如何将此Do While循环转换为另一种循环,while循环?

时间:2011-12-12 04:12:38

标签: java loops methods while-loop do-while

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循环中,它表示“bothOr”未初始化,即使我在输入输入时初始化它,命令行也会保持空白,因此它对我的输入没有任何作用。

2 个答案:

答案 0 :(得分:4)

你有一个无关的分号:

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

应该是:

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

基本上,您的版本在eitherOr.isEmpty()true时不会执行任何操作,因此永远无法调用humanRoll

答案 1 :(得分:1)

如果您的第二个代码段是在while循环中执行空白语句

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

你必须删除这个分号才能执行humanRoll作为循环的一部分

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

另一方面,使用paranthesis通常可以避免这种小问题

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

在上面的代码中,如果引入了无意的分号,很容易识别。