2012-10-15 155 views
0

我试图接受来自用户的输入形式的字符。我有这个工作,但我需要检查并确保它是6个字符(H,H,S,S,L,L)之一。我有一个while循环,但只要向它添加多个字符语句,循环会为每个应该正确的值给出错误。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; 

} 

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

回答

3

有一个在你的逻辑错误:你应该连接与那些测试:&&

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

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

从概念上讲,只要字符不是H并且不是L并且不是S,您想继续询问输入。

+0

完美。感谢您的帮助! – malibubts

4

使用&&而不是||

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

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

choice = Character.toLowerCase(choice); 

while (choice != 'h' && choice != 'l' && choice != 's') 
+0

完美无瑕。我想我现在已经明白了这一点,但如果我错了,请纠正我。除非输入这些字符,否则我不想输入该循环。所以它检查每个字符并失败,因为每个AND都需要是真的? – malibubts

2

你从来没有在您的while循环更新choice

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

choice = choiceString.charAt(0); 

而且你应该&&而非||检查。