Eu estou com uma duvida que é a seguinte: eu estou a fazer o jogo do 21 e queria saber como fasso para ver qual dos jogadores tem a pontuação mais perto ou igual de 21. Para tal eu tenho um atributo na classe jogador que é a pontuaçao mas eu agora não sei como fazer para comparar os valores desse atributo.
Pois isso eu ja tinha tentado mas neste caso e o minimo de jogadores é 3 logo esse cilclo ja nao da
vanzella
Faz o seguinte, cria um classe com dois atributos, guarde a identificação do jogador e o numero dele que foi sorteado.
Depois adicione esses objetos em uma collection, ordene pelo maior numero sorteado e retirando os jogadores que tiverem um numero sorteado maior que 21. tera o ganhador.
Blz? a logica ta ai, se precisar de mais só falar.
abraço…
Marky.Vasconcelos
outro exemplo
se(if) o jogador1.pontos for menor ou igual a 21(=<) e(&&) jogador1.pontos for maior que jogador2.pontos e jogador1.pontos for maior que jogador3.pontos
//ele ganha
mas isso ia enche de if seu código é só pensa numa solução melhor mas essa é uma lógica para que os jogadores parem de pedir cartas e não esperarem passar 21
K
krespo
Não tou a conseguir fazer como tu disseste, será que me podes dar um exemplo atraves de codigo
vanzella
Coloca seus codigos, principalmente o bean de jogador.
publicvoidvencedor(){Collection<Jogador>vencedores=determinaVencedores(jogadores21);System.out.println("Os vencedores são:");// itera a colecção e mostra os nomes.. }privateCollection<Jogador>determinaVencedores(Collection<Jogador>jogadores){// 'clona'Listsel=newArrayList(jogadores);// ordena os jogadores pelo quanto mais se aproximou de 21.// quem mais se aproximou fica primeiro na colecçãoCollections.sort(sel,newComparator<Jogador>(){publicintcompare(Jogadora,Jogadorb){// está mais perto quem tem diferença para 21 menor e positiva intdifA=21-a.getPontuacao();intdifB=21-a.getPontuacao();if(difA<0){if(difB<0){return0;// iguais }else{return1;// a > b // b é mais proximo}}else{if(difB<0){return-1;// a < b // a é mais proximo}else{// ambos são positivos // retorna a diferença dos valores returndifA-difB;}}}});// aqui, sel está ordenado , sendo que o primeiro é o mais proximo de 21 , sem ter ultrapassado 21.// so que pode ter havido empate. Então os vencedores são os primeiros N que tiverem a mesma pontuaçãointpontos=sel.get(0).getPontuacao();for(Iterator<Jogador>it=sel.iterator();it.hasNext();){if(it.next().getPontaucao()!=pontos){it.remove();}}returnsel;}