Queria fazer um for circular em java onde da primeira vez que o for rodasse fosse 1 a 4 depois começasse de 2 e chegasse ao 4 e terminasse no 1. A ideia é mais ou menos igual a fila circular.
Devido ao fato que estou montando um jogo em java de quatro jogadores e a cada rodada o inicio do jogo começa com o jogador seguinte, passando por todos jogadores (truco).
o trecho do código onde eu estou tratando isso é esse:
Ao invés de ficar tentando ajustar o laço for, use estruturas de dados que te auxiliem nessa tarefa.
Você pode, por exemplo, implementar uma lista circular (há exemplos no Google, só procurar) ou usar as estruturas já existentes. Por exemplo, usando um List/ArrayList, você pode sempre fazer a jogada sobre o elemento zero. Assim que o jogador fizer sua jogada, remova-o da posição zero e adicione-o no fim da estrutura. Assim, o próximo jogador passará a ser o zero, e o processo se repete. Algo assim:
Listjogadores=newArrayList<String>();jogadores.add("Joao");jogadores.add("Lucas");jogadores.add("Mateus");jogadores.add("Zé");while(!partidaEncerrada){
jogadorAtual=jogadores.remove(0);//aquiojogadoratualfazsuajogadajogadores.add(jogadorAtual); // agora ele foi pro fim da fila
}
Possivelmente, isso será mais fácil se você usar alguma implementação de Queue. Dê uma olhada nisso também.
Abraço.
A
anon62916717
Você pode usar o resto da divisão, para gerar este ciclo.
Ex.:
publicstaticvoidmain(String[]args){ArrayList<String>jogadores=newArrayList<>(Arrays.asList("Ana","Maria","Oliveira","Santana"));intalterna=0,contador;while(true){//o contador fica limitado à posição do próximo jogador no array.contador=alterna++%jogadores.size();System.out.println("Rodada atual: "+alterna+", "+jogadores.get(contador)+" inicia o jogo");for(inti=0;i<jogadores.size();i++){System.out.println("Vez de: "+jogadores.get(contador%jogadores.size()));//mesmo incrementando o contador o resto da divisão corresponde à posição do próximo a jogarcontador++;}if(JOptionPane.showConfirmDialog(null,"Continuar")!=JOptionPane.YES_OPTION){break;}}}
Considerando a incerteza, eu achei melhor fazer uma combinação usando while, vide o próximo exemplo:
publicstaticvoidmain(String[]args){ArrayList<String>jogadores=newArrayList<>(Arrays.asList("Ana","Maria","Oliveira","Santana"));intpartida=0,contador;while(true){contador=partida++%jogadores.size();System.out.println("Partida atual: "+partida+", "+jogadores.get(contador)+" inicia o jogo.");while(contador<=Math.random()*16*jogadores.size()){System.out.println("Vez de: "+jogadores.get(contador%jogadores.size()));contador++;}System.out.println(jogadores.get(--contador%jogadores.size())+" venceu a partida "+partida+"\n");if(JOptionPane.showConfirmDialog(null,"Iniciar outra partida")!=JOptionPane.YES_OPTION){break;}}}
Douglas_Fonseca
Valeu galera, consegui fazer a partir das ideias apresentadas! Ate quem fim terminei o jogo. Só falta documentar(o que eu não sei por enquanto) e correr pros 15 pts.