【问题标题】:While loop to check character inputwhile循环检查字符输入
【发布时间】:2012-10-05 14:15:28
【问题描述】:

我正在尝试以字符的形式接受用户的输入。我有这个工作,但我需要检查并确保它是 6 个字符之一(H、h、S、s、L、l)。我有一个 while 循环,但只要向其中添加多个字符语句,循环就会为每个应该正确的值给出错误。

函数如下:

    private static char getHighLow(Scanner keyboard) 
{
    System.out.println("High, Low, or Sevens (H/L/S): ");
    String choiceString = keyboard.next();

    char choice = choiceString.charAt(0);

    while (choice != 'H' || choice != 'h' || choice != 'L' || choice != 'l' || choice != 'S' || choice != 's')
    {
        System.out.println("You have entered an invalid entry.");
        System.out.println("High, Low, or Sevens (H/L/S): ");
        choiceString = keyboard.next();
    }

    return choice;

}

像这样继续检查多个字符的最佳方法是什么?

【问题讨论】:

    标签: java string loops while-loop character


    【解决方案1】:

    使用&& 代替||

    while (choice != 'H' && choice != 'h' && choice != 'L' && choice != 'l' && choice != 'S' && choice != 's')
    

    这可以通过先转换为小写来简化。

    choice = Character.toLowerCase(choice);
    
    while (choice != 'h' && choice != 'l' && choice != 's')
    

    【讨论】:

    • 完美做到了。我想我现在明白了这个逻辑,但如果我错了,请纠正我。除非没有输入这些字符,否则我不想进入该循环。所以它检查每个字符并失败,因为每个 AND 都需要为真?
    【解决方案2】:

    您的逻辑中有一个错误:您应该使用 AND 连接这些测试:&&:

    while (choice != 'H' && choice != 'h' && choice != 'L' && ...
    

    此外,choice 永远不会在循环体内更新,因此它永远不会改变。在循环中重新读取choiceString 后复制choice = choiceString.charAt(0);

    从概念上讲,只要字符 不是 H AND 不是 L AND 不是 S,您就会一直要求输入。

    【讨论】:

    • 完美。感谢您的帮助!
    【解决方案3】:

    您永远不会在 while 循环中更新 choice

    只需在循环末尾添加这一行:

    choice = choiceString.charAt(0);
    

    此外,您应该使用&& 而不是||

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2020-02-15
      • 2015-07-27
      • 2017-12-24
      相关资源
      最近更新 更多