我遇到输入验证问题。我写了一个程序,其中两个人正在模拟骰子游戏。实际的游戏代码没问题,但是当我试图再次运行程序时,我只是不知道为什么我会有无限循环。基本上,如果用户输入" Y"程序将再次运行,如果他们输入" N",程序将结束,如果他们输入除Y或N以外的任何内容,则提示,"您想再次玩吗?" ;以下代码是正确的还是我需要更改一下(我主要是指输入验证代码)?
do{
System.out.print("Would you like to play again? (Y/N): ");
String command = input.next();
if(input.hasNextLine()){
if(command.equals("Y") || command.equals("y")){
die1 = rand.nextInt(6) + 1;
die2 = rand.nextInt(6) + 1;
die3 = rand.nextInt(6) + 1;
die4 = rand.nextInt(6) + 1;
sum = die1 + die2;
sum2 = die3 + die4;
System.out.printf("%s rolled a %d and %d for a total of %d. %n", name1, die1, die2, sum);
System.out.printf("%s rolled a %d and %d for a total of %d. %n", name2, die3, die4, sum2);
if(sum > sum2){
System.out.println(name1 + " " + "won!");
}
else if (sum2 > sum){
System.out.println(name2 + " " + "won!");
}
else if (sum == sum2){
System.out.println(name1 + " " + "and" + " " + name2 + " " + "tied!");
}
game = input.nextLine();
}
else if(command.equals("N") || command.equals("n")){
System.exit(1);
}
}
}while(!validInput);
}
}
编辑:我删除了整个代码,只是插入了一些有问题的代码,但这是正确的......再次感谢!
答案 0 :(得分:0)
input
是Scanner
个对象,永远不会等于YES
或YES2
个String
个对象。您需要使用nextLine
来阅读下一个String
并将该值保存到response
等变量中。然后,您可以将response
与YES
和其他字符串进行比较。
do {
System.out.print("Would you like to play again? (Y/N): ");
String response = input.nextLine();
if (response.equalsIgnoreCase(YES)) {
die1 = rand.nextInt(6) + 1;
die2 = rand.nextInt(6) + 1;
die3 = rand.nextInt(6) + 1;
die4 = rand.nextInt(6) + 1;
sum = die1 + die2;
sum2 = die3 + die4;
System.out.printf("%s rolled a %d and %d for a total of %d. %n", name1, die1, die2, sum);
System.out.printf("%s rolled a %d and %d for a total of %d. %n", name2, die3, die4, sum2);
game = input.nextLine();
break;
} else if (response.equalsIgnoreCase(NO)) {
System.exit(1);
}
} while (validInput);
答案 1 :(得分:0)
如果你想通过System.exit()终止程序,你可以用一个while(true)循环来包围你的程序,你不必非常喜欢do-while循环。此处也不需要hasNextLine。您可以使用equalsIgnoreCase(" y")缩短输入验证。在循环之外声明变量通常也是个好主意。 (即。字符串命令;在外部,命令="东西"在内部)。我不确定它在这种特殊情况下是如何工作的,但很多时候你会在尝试重新声明变量时遇到错误。
虽然我看到你的循环问题是你没有其他条款来处理输入,如果用户输入的内容不是" Y"或" N"。如果输入了这个其他输入,你可以在结束时使用else子句终止程序,或者你可以简单地使用continue;声明开始重新编程。