java - 验证用户的字符串类型 'menu choice'

标签 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) block (这是正确的术语吗?)工作正常,但while(menuChoiceRule == false)不行;一旦用户输入了违反menuChoiceRule的内容,无论输入什么(输入的?),循环都会无限重复

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

问候, AUS_道格。

最佳答案

看起来 boolean 测试在循环内没有改变,请再次将代码放在 while 循环的底部。

此外, boolean 测试不需要 ==,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);
}

关于java - 验证用户的字符串类型 'menu choice',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451368/

相关文章:

java - 使用 IMAP 从 GMail 获取邮件到 Java 应用程序

java.lang.ClassCastException : jdk. nashorn.internal.objects.NativeArray 无法转换为 java.lang.Comparable

java - 无法导入servlet类

java - CheckStyle SuppressionFilter 模块文件路径以实现 Eclipse 和 Maven 兼容性

r - 关键字在 R 中字符串的上下文中重复多次

c - malloc 中的反向字符串

java - 使用堆栈的迷宫中的老鼠 (Java)

java - 为什么Java除以0.0时不抛出异常?

java - Eclipse 调试器似乎无缘无故地退出了,以前有人处理过这个问题吗?

c# - 在测试 1、测试 10、测试 2 中对包含数字的字符串进行排序的好方法