我有一个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循环。我不知道这里发生了什么。
答案 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;
}
除非你真的希望它被召唤两次。