Java 验证输入时的无限循环

Java 验证输入时的无限循环,java,Java,我对输入验证有问题。我写了一个程序,其中两个人在模拟骰子游戏。实际的游戏代码是好的,但我只是不知道为什么我有一个无限循环,当我试图再次运行该程序。基本上,如果用户输入“Y”,程序将再次运行,如果他们输入“N”,程序将结束,如果他们输入Y或N以外的任何内容,则提示“您想再次播放吗?”下面的代码是否正确,或者我是否需要对其进行一些更改(我主要指的是输入验证代码) } 编辑:我删除了整个代码,只是插入了一段有问题的代码,但它是正确的…再次感谢 输入是一个扫描器对象,永远不会等于YES或YES2,它们是

我对输入验证有问题。我写了一个程序,其中两个人在模拟骰子游戏。实际的游戏代码是好的,但我只是不知道为什么我有一个无限循环,当我试图再次运行该程序。基本上,如果用户输入“Y”,程序将再次运行,如果他们输入“N”,程序将结束,如果他们输入Y或N以外的任何内容,则提示“您想再次播放吗?”下面的代码是否正确,或者我是否需要对其进行一些更改(我主要指的是输入验证代码)

}


编辑:我删除了整个代码,只是插入了一段有问题的代码,但它是正确的…再次感谢

输入
是一个
扫描器
对象,永远不会等于
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);