FOR circular

Galera estou com a seguinte questão:

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:

while (c < 4) {
System.out.println("Mão do jogador " + c + “:”);
jogadores.get©.imprimeMao();
System.out.println();
int testeParada = opcoesJogador©;
if (testeParada > 4) {
break;
}
System.out.println(“Jogador " + c + " faça sua jogada, escolha uma carta:”);
int i = entrada.nextInt();
c_rodada[c] = jogadores.get©.cartasJogador.get(i).impCarta();
jogadores.get©.cartasJogador.remove(i);
c++;
}

Porem dessa forma sempre que a rodada começa, o jogo começa com o jogador 0.

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:

List jogadores = new ArrayList<String>();

jogadores.add("Joao");
jogadores.add("Lucas");
jogadores.add("Mateus");
jogadores.add("Zé");

while (! partidaEncerrada){
   jogadorAtual = jogadores.remove(0);

  // aqui o jogador atual faz sua jogada

  jogadores.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.

Você pode usar o resto da divisão, para gerar este ciclo.

Ex.:

public static void main(String[] args) {
        ArrayList<String> jogadores = new ArrayList<>(Arrays.asList("Ana", "Maria", "Oliveira", "Santana"));
        int alterna = 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 (int i = 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 jogar
                contador++;
            }

            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:

public static void main(String[] args) {
        ArrayList<String> jogadores = new ArrayList<>(Arrays.asList("Ana", "Maria", "Oliveira", "Santana"));
        int partida = 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;
            }
        }
    }

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.