[RESOLVIDO] Problema com passagem de array como parâmetro
13 respostas
brunoties
Olá pessoal,
Tenho um baralho ordenado, criei uma outra classe BaralhoEmbaralhado, agora quero criar um baralhoEmbaralhado a partir do ordenado, mas não estou conseguindo passá-lo como parâmetro.
publicclassBaralhoEmbaralhadoextendsBaralho{privateCartabaralhoEmbaralhado[];publicBaralhoEmbaralhado(CartabaralhoX[]){baralhoEmbaralhado=newCarta[QTD_CARTAS];Randomaleatorio=newRandom();intcont=0;while(cont<QTD_CARTAS){intiAleatorio=aleatorio.nextInt(QTD_CARTAS);baralhoEmbaralhado[iAleatorio]=baralhoX[cont];cont++;}}// ---> FIM CONSTRUTOR
Estando ordenado ou embaralhado, um Baralho é um Baralho. Não vejo o porquê de criar duas classes distintas.
brunoties
Eu pensei em não perder o baralho original…
F
felipeaps
Bom, como eu já te disse, seus arrays estão declarados errados.
Também concordo que não é necessária outra classe. Se quer embaralhar, apenas crie um método para isso.
Terceiro que seu construtor recebe um array de Cartas e vc está tentando passar um objeto Baralho.
brunoties
Entendi, estou alterando aqui para tentar resolver na própria classe Baralho.
Por curiosidade, como seria a passagem correta?
F
felipeaps
Aí depende. Como tá sua classe baralho? Tem um array de Carta lá?
Se tiver vc pode fazer um método getCartas(), que retorne esse array de Carta.
Ou vc pode mudar no construtor, ao invés de receber Carta[] baralhoX, recebe Baralho baralhoX.
Tudo depende do que vc quer fazer e de como está implementado o resto.
brunoties
Ta assim:
publicclassCarta{privateNipenipe;privateValorvalor;publicCarta(Valorvalor,Nipenipe){this.valor=valor;this.nipe=nipe;}publicNipegetNipe(){returnnipe;}publicValorgetValor(){returnvalor;}@OverridepublicStringtoString(){Stringcarta="";carta=this.getValor()+" de "+this.getNipe();returncarta;}}
publicclassBaralho{publicstaticfinalintQTD_CARTAS=Nipe.getQTD_NIPES()*Valor.getQTD_VALORES();privateCartabaralho[];privateCartabaralhoEmbaralhado[];publicBaralho(){baralho=newCarta[QTD_CARTAS];intcont=0;for(Nipenipe:Nipe.values()){for(Valorvalor:Valor.values()){Cartacarta=newCarta(valor,nipe);baralho[cont]=carta;cont++;}}}// ---> FIM CONSTRUTORpublicvoidexibirBaralho(){for(Cartacarta:baralho){System.out.println(carta);}}// ---> FIM exibirBaralhopublicvoidembaralhar(){baralhoEmbaralhado=newCarta[QTD_CARTAS];Randomaleatorio=newRandom();intcont=0;while(cont<QTD_CARTAS){intiAleatorio=aleatorio.nextInt(QTD_CARTAS);this.baralhoEmbaralhado[iAleatorio]=this.baralho[cont];cont++;}}// ---> FIM CONSTRUTOR}// ---> FIM CLASS
Agora to tentando embaralhar...
F
felipeaps
Beleza, não acho que precisaria de dois baralhos, mas blz.
O problema agora é o seguinte. Você pega um número “randômico”, mas ninguém disse que esse número não pode repetir certo?
Então antes de atribuir o this.baralhoEmbaralhado[iAleatorio] = this.baralho[cont];, vc precisa verificar se o iAleatorio já não foi sorteado.
brunoties
Pois é, eu tinha feito outro método para fazer isso, mas agora estou tentando só embaralhar primeiro. Pois não esta funcionando ainda…
F
felipeaps
Não está funcionando pelo que te falei. O randon.nextInt() pode retronar o mesmo valor.
Fim do seu while e vc não conseguiu sortear os números 1 e 2. Entendeu?
Seu vetorEmbaralhado possui [4, null, null, 3, 5]
brunoties
felipeaps, muito obrigado pela paciência e pelas respostas.
Sobre o randon.nextInt() poder retronar o mesmo valor, eu estava ligado, o que não entendo, é porque dá erro na exibição do baralho ordenado, depois que chamo o método de exibição do baralhoEmbaralhado?
Criei outro método para exibir por não ter conseguido passar o baralho ordenado para o método exibirBaralho.
F
felipeaps
Cara, acho que vc está precisando de uns conceitinhos básicos.
Quando vc executa Baralho baralhoEmbaralhado = new Baralho();, vc está criando uma nova instância da classe baralho.
Portanto, não adianta vc fazer baralho.embaralhar(); e depois dar um “new”.
Mas de novo, seu método de embaralhar não vai funcionar se vc não arrumou aquilo que falei.
Outra coisa. Pensando em orientação a objetos. Sua classe baralho representa 1 e apenas 1 único baralho.
Portanto não faz sentido vc ter 2 objetos dentro dela. O certo seria vc ter apenas 1 objeto Carta[].
Quando for embaralhar, vc embaralha ele mesmo, não sei pra que vc quer manter o original.
Desse modo, vc nao precisa do método exibirBaralhoEmbaralhado().
brunoties
Eu tenho certeza…
Vou seguir essa linha de só um baralho e esquecer esse lance de querer manter o ordenado…
Vou tentar fazer primeiro então a verificação do número aleatório repetido.