做循环错误,陷入while循环

时间:2017-04-26 16:50:14

标签: java while-loop

我有一个boolean Guess功能:

public boolean guess() {
  String checkInput = scanner.nextLine();

  try {
    guess = Integer.parseInt(checkInput);
  } catch (NumberFormatException e) {
    return false;
  }

  return true;
}

由do while循环中的另一个函数调用:

while (!player.guess()) {
  player.guess();
}

如果我输入int,程序将正常运行并终止。但是如果输入是非int字符,程序就会陷入while循环。我不知道这里发生了什么。

3 个答案:

答案 0 :(得分:0)

你的scanner.nextLine()永远读取该行,它不会要求另一个输入。

答案 1 :(得分:0)

while (!player.guess()) { // Entered Integer. (!true) and loop breaks
    player.guess();
}

while (!player.guess()) { // Entered Non-Integer. (!false) and program enters the loop
    player.guess();  // You are not storing the result in some boolean variable
    //Therefore, it doesn't matter whether true or false
    //while (!player.guess()) will be checked once again
}

<强> SOLUTION:

    boolean flag = player.guess(); // capture the result
    while (!flag) { // verify the result
        flag = player.guess(); // capture the result again
    }

答案 2 :(得分:0)

你的猜测功能是这样设计的。 如果输入不是数字(catch),则返回false。所以它一直保持在循环中,直到你输入一个数值。 另一个问题是你在每个循环中调用该函数两次(一次在循环条件检查中,另一次在循环内)。因此,如果您在第一个(循环条件)上键入非数字字符而在第二个(循环内)中键入数字,它仍将第三次请求输入。

我不知道你的意图是什么,但你可能会想要这样的东西:

while (!player.guess()) {
  continue;
}

除非你真的希望它被召唤两次。