好的,这是我的代码:
public static void playAgain(Scanner in){
System.out.print("Play again?: ");
String again=in.next();
if (again.equalsIgnoreCase("y")){
playerScore=0;
aiScore=0;
playAgain=true;
}
else if (again.equalsIgnoreCase("n")){
playAgain=false;
}
else {
while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){
System.out.print("Invalid response. Please enter \"y\" or \"n\": ");
again=in.next();
}
}
}
出于某种原因,如果我输入了错误的变量,比如说'boog',那么while循环会打印一条错误信息但是由于某种原因,即使我输入'n'也默认为'y' - 例如,一个样本运行会是:
再玩一次?的布格
输入无效,请输入y或n。 名词
尽管输入了n - ,- 程序仍会再次播放
我该如何解决这个问题?这是订单的问题吗?提前谢谢!
答案 0 :(得分:4)
我猜你正在使用一些全局变量playAgain
来指示是否再次播放。我会从函数中返回boolean
,但无论如何,我都没有在最后playAgain
块中看到else
被修改:
else {
while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){
System.out.print("Invalid response. Please enter \"y\" or \"n\": ");
again=in.next();
}
}
也许你想要if
循环中的while
整套,所以again
在包含“y”或“n”之后会被处理?无论哪种方式,功能的结构都需要重新思考。
编辑:我的方法将是:
public static boolean playAgain(Scanner in){
System.out.print("Play again?: ");
String again=in.next();
while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")) {
System.out.print("Invalid response. Please enter \"y\" or \"n\": ");
again = in.next();
}
if (again.equalsIgnoreCase("y")){
playerScore = 0;
aiScore = 0;
return true;
}
// there are only two valid options, so to get here it must be "n"
return false;
}
答案 1 :(得分:3)
在最后的else
分支中,在您从while
循环获得有效输入后,您没有设置playAgain
变量,因此它保留了它具有的值 - 是的这个案例。您必须根据输入进行设置。
答案 2 :(得分:3)
可能是因为您在退出while循环后没有将playAgain
设置为false
。前一个值是playAgain
true
吗?
我认为你需要考虑重构,以便while循环高于'y'和'n'if
/ else
语句。这样,一旦用户输入了有效值,就会始终调用if
/ else
。验证应该在方法的开头。
答案 3 :(得分:0)
我可以看到,你的程序存在缺陷。
again ==n
的情况下为无限循环或退出)。这样每次进入scanner.next()元素时,都会再次执行play逻辑。 因此again
的值为“n”,因此你的while循环退出逻辑。因此请检查playAgain
是否设置为 true
答案 4 :(得分:0)
流量不好。 你应该做这样的事情(抱歉任何错误,这是在我的手机上精心打字的:
public static void playAgain(Scanner in){
System.out.print("Play again?: ");
while (true) {
String again=in.next();
if (again.equalsIgnoreCase("y")){
playerScore=0;
aiScore=0;
playAgain=true;
break;
} else if (again.equalsIgnoreCase("n")){
playAgain=false;
break;
} else {
// bad input, so allow to loop again
System.out.print("Invalid input! Please enter y or n");
}
}
}