Java 验证输入时的无限循环
我对输入验证有问题。我写了一个程序,其中两个人在模拟骰子游戏。实际的游戏代码是好的,但我只是不知道为什么我有一个无限循环,当我试图再次运行该程序。基本上,如果用户输入“Y”,程序将再次运行,如果他们输入“N”,程序将结束,如果他们输入Y或N以外的任何内容,则提示“您想再次播放吗?”下面的代码是否正确,或者我是否需要对其进行一些更改(我主要指的是输入验证代码) }Java 验证输入时的无限循环,java,Java,我对输入验证有问题。我写了一个程序,其中两个人在模拟骰子游戏。实际的游戏代码是好的,但我只是不知道为什么我有一个无限循环,当我试图再次运行该程序。基本上,如果用户输入“Y”,程序将再次运行,如果他们输入“N”,程序将结束,如果他们输入Y或N以外的任何内容,则提示“您想再次播放吗?”下面的代码是否正确,或者我是否需要对其进行一些更改(我主要指的是输入验证代码) } 编辑:我删除了整个代码,只是插入了一段有问题的代码,但它是正确的…再次感谢 输入是一个扫描器对象,永远不会等于YES或YES2,它们是
编辑:我删除了整个代码,只是插入了一段有问题的代码,但它是正确的…再次感谢
输入
是一个扫描器
对象,永远不会等于YES
或YES2
,它们是字符串
对象。您需要使用nextLine
读取下一个字符串
,并将该值保存到变量中,如response
。然后您可以将响应
与是
和其他字符串进行比较
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);
如果您要通过System.exit()终止程序,则不必对do while循环充满幻想,您可以用while(true)循环将程序包围起来。这里也不需要hasNextLine。您可以使用equalsIgnoreCase(“y”)缩短输入验证。另外,在循环之外声明变量通常也是一个好主意。(例如,String命令;在外部,command=“stuff”在内部)。我不确定在这种特殊情况下它将如何工作,但很多时候,您在尝试重新声明变量时会遇到错误
不过,我看到循环的问题是,如果用户输入的不是“Y”或“N”,那么就没有处理输入的else子句。如果输入了其他输入,您可以在末尾使用else子句终止程序,也可以使用continue;语句重新开始编程。
如果(input.equals(YES)| input.equals(YES2)){
永远不会是真的
,因为input
是一个扫描器
你需要调用nextLine
并将它存储在某个地方。有办法吗?首先在问题之后,写String command=input.next()
并将if(input.equals(YES)| | input.equals(YES2))
更改为if(command.equals(“y”)| | command.equals(“y”)
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);