最近分配给我们的一项任务是,我们构建一个基于控制台的基本“税计算器”,因为它使我们能够实现到目前为止所学的内容-变量,常量,循环等。

其中一部分让我们为用户提供了一个菜单,他们可以在其中输入字母-a,b,c,d或x-取决于他们下一步要做什么。

那不是戏剧,因为我们的任务并没有要求我们解释如果用户在菜单上未输入选项就会发生什么情况。

现在,出于我个人的利益,我今天返回到此,并希望在其中进行验证。

我定义了“ menuChoiceRule”:
menuChoice是字符串)

    boolean menuChoiceRule = (menuChoice.equalsIgnoreCase("A"))
            || (menuChoice.equalsIgnoreCase("B"))
            || (menuChoice.equalsIgnoreCase("C"))
            || (menuChoice.equalsIgnoreCase("D"))
            || (menuChoice.equalsIgnoreCase("X"));


只要违反了规则,这就是应该发生的事情:(程序应该不断询问,直到得到符合规则的东西,然后停止询问)

    while (menuChoiceRule == false) {
        System.out.print(menuChoiceString);
        System.out.print("Enter Your Selection");
        menuChoice = SCANNER.nextLine();
    }


如果用户做正确的事情会发生什么:

    // As long as the user input is 'A','B','C' or 'D', they'll be able to
    // keep doing stuff.
    while (menuChoiceRule == true) {
        *All the various menu options go here*
    }


目前,while(menuChoiceRule == true)块(这是正确的术语吗?)可以正常工作,但while(menuChoiceRule == false)不能正常工作;用户输入违反menuChoiceRule的内容后,无论输入(输入的是什么),循环都会无休止地重复。

如果有人能提供一些关于我为什么在这里遇到麻烦的见解,将不胜感激。

问候,
AUS_Doug。

最佳答案

看起来布尔测试未在循环内更改,请将代码再次放在while循环的底部。

此外,布尔测试不需要==,while(menuChoiceRule){ ...是首选的编码样式。

我还将考虑创建一种方法来测试您的规则:

private boolean testChoice(String menuChoice) {
        return ((menuChoice.equalsIgnoreCase("A"))
             || (menuChoice.equalsIgnoreCase("B"))
             || (menuChoice.equalsIgnoreCase("C"))
             || (menuChoice.equalsIgnoreCase("D"))
             || (menuChoice.equalsIgnoreCase("X")));
}


这将产生代码:

boolean validChoice = false;

while (!validChoice) {
    System.out.print(menuChoiceString);
    System.out.print("Enter Your Selection");
    menuChoice = SCANNER.nextLine();
    validChoice = testChoice(menuChoice);
}

10-04 12:51