2016-02-15 3 views
1

Im пытается выяснить, как сделать цикл над двумя вещами, например, для игроков и проверить, активен ли каждый из них, и если да, то они должны делать разные вещи.Как переключаться между различными операторами в цикле

Сначала нужно проверить, есть ли победитель, если не первый игрок должен сделать свой ход и проверить, выиграл ли он, совершив этот ход. После того, как первый игрок сделал свой ход и еще не выиграл, второй игрок должен сделать свой ход и, конечно же, проверить, выиграл ли он. Если никто не выиграл, первый игрок должен сделать следующий ход и так далее.

Это то, что проходит через мой разум прямо сейчас.

boolean playerOne = true; 
boolean playerTwo = false; 
boolean haveWinner = false; 


while(haveWinner == false) { 

    if (playerOne == true & playerTwo == false) { 
     /*do something */ 
     playerOne = false; 
     playerTwo = true; 
    } else if (playerOne == false & playerTwo == true) { 
     /* do something */ 
     playerOne = true; 
     playerTwo = false; 
    } else { 
     System.out.println("No ones turn"); 
    } 
} 

Я знаю, что это не будет работать, как, что, так как первый Если запрос является истинным, а другим, если не будет даже прийти до конца. Но как я могу заставить его в принципе переключаться каждый раз?

+0

код работы тонкой – Abdelhak

+0

не самый красивый код, но я не Не понимаю, почему это не должно работать. Ответ Эрана показывает лучший способ. Вы также можете использовать 'switch()', что было бы лучше, если вы хотите добавить больше игроков. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Flikk

ответ

5

Вам не нужна переменная playerTwo. Просто переключите переменную playerOne, чтобы определить, является ли это игроком на ходу или нет (в этом случае это будет игрок на два оборота).

Это делает ваш цикл просто:

boolean playerOne = true; 
boolean haveWinner = false; 

while (!haveWinner) { 
    if (playerOne) { 
     /*player one's turn - do something */ 
     playerOne = false; 
    } else { 
     /* player two's turn - do something */ 
     playerOne = true; 
    } 
} 

или вы можете даже сохранить одну строку кода с:

boolean playerOne = true; 
boolean haveWinner = false; 

while (!haveWinner) { 
    if (playerOne) { 
     /*player one's turn - do something */ 
    } else { 
     /* player two's turn - do something */ 
    } 
    playerOne = !playerOne; 
} 
+0

Да, это прекрасно работает, спасибо большое! –

+0

Как работает второй? –

+0

@DeanJ. Он переключает значение 'playerOne' в конце каждой итерации. Если это правда, оно становится ложным и наоборот. – Eran

Смежные вопросы