我试图以角色的形式接受用户的输入。我有那个工作但我需要检查并确保它是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;
}
继续检查这样的多个字符的最佳方法是什么?
答案 0 :(得分: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')
答案 1 :(得分:3)
您的逻辑中存在错误:您应该使用AND连接这些测试:&&
:
while (choice != 'H' && choice != 'h' && choice != 'L' && ...
此外,choice
永远不会在循环体内更新,因此它永远不会改变。在循环中重新阅读choice = choiceString.charAt(0);
后重复choiceString
。
从概念上讲,只要字符不是H并且不是L且不是S ,您就要继续询问输入。
答案 2 :(得分:2)
您永远不会在choice
循环中更新while
:
只需在循环结束时添加此行:
choice = choiceString.charAt(0);
此外,您应该使用&&
而不是||
进行核对。