验证用户的字符串类型菜单选项'

时间:2014-03-17 10:01:47

标签: java eclipse string while-loop boolean

我们最近给出的一项任务是让我们构建一个基于控制台的基本计算器'税务计算器,因为它使我们能够实现我们迄今为止学到的东西 - 变量,常数,循环等。

它的一部分让我们向用户提供一个菜单,在那里他们会输入一个字母 - 无论是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。

1 个答案:

答案 0 :(得分:3)

看起来布尔测试没有在循环中更改,将代码再次放在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);
}