Как я могу преобразовать этот цикл Do While в другой цикл, цикл while? - PullRequest
1 голос
/ 12 декабря 2011
public void humanPlay()
 {
if (player1.equalsIgnoreCase("human"))
    System.out.println("It is player 1's turn.");
else
    System.out.println("It is player 2's turn.");

System.out.println("Player 1 score: " + player1Score);
System.out.print("Player 2 score: " + player2Score);

String eitherOr;

  do {
    eitherOr= input.nextLine(); 
    humanRoll();
  } while (eitherOr.isEmpty());

 if (!eitherOr.isEmpty())
    humanHold();

}

Это весь метод, единственное, что я пытаюсь исправить, это.

       String eitherOr;
do {
     eitherOr= input.nextLine();    
     humanRoll();
   } while (eitherOr.isEmpty());

Он должен принимать входные данные несколько раз, поэтому каждый раз, когда требуется ввод, чтобы определить, что происходит, именно поэтому мне нравится цикл Do While, но, поскольку он инициализируется по крайней мере один раз за время, я получаю дополнительный бросок, чем необходимо.

Я пытался сделать это таким образом, и различные варианты этого способа:

String eitherOr = input.nextLine();

while(eitherOr.isEmpty());
        humanRoll();

Это не работает, потому что не запрашивает ввод заново. Если я попытаюсь поставить input.nextline (); в цикле while говорится, что «anyOr» не инициализируется, и даже если я инициализирую его при вводе ввода, командная строка остается пустой, поэтому она ничего не делает с моим вводом.

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

У вас посторонняя точка с запятой:

while(eitherOr.isEmpty());
    humanRoll();'

должно быть:

while(eitherOr.isEmpty())
    humanRoll();

По сути, ваша версия говорит, что ничего не делать, в то время как eitherOr.isEmpty() равен true, и поэтому ему никогда не удастся вызвать humanRoll.

1 голос
/ 12 декабря 2011

Если во втором фрагменте кода вы выполняете пустое выражение как часть вашего цикла while

while(eitherOr.isEmpty());//this semicolon is a blank statement
    humanRoll();

, вы должны удалить эту точку с запятой, чтобы выполнить humanRoll как часть цикла

while(eitherOr.isEmpty())
    humanRoll();

С другой стороны, использование парантеза обычно позволяет избежать такой незначительной проблемы.

while(eitherOr.isEmpty()) {
    humanRoll();
}

В приведенном выше коде легко определить, была ли введена непреднамеренная точка с запятой или нет.

...