【问题标题】:Validating a user's String type 'menu choice'验证用户的字符串类型“菜单选择”
【发布时间】:2014-04-22 11:33:05
【问题描述】:

我们最近接到的一项任务是让我们构建一个基本的、基于控制台的“税收计算器”,因为它让我们能够实现迄今为止所学的东西——变量、常量、循环等。

其中一部分让我们向用户展示了一个菜单,他们可以在其中输入一个字母 - 无论是 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。

【问题讨论】:

    标签: java eclipse string while-loop boolean


    【解决方案1】:

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

    【讨论】:

    • 好了,创建这个方法让事情变得更简单,为此欢呼。
    猜你喜欢
    • 2021-09-25
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多