所以我已经附加了一个调试器,尝试了不同的输入,我似乎无法弄清楚为什么它不能通过循环。跑步时,我进入" l"或者" L",然后将条目设置为,然后将输入设置为大写版本,然后重复。
public static char displayMenu(){
char input;
sc.nextLine();//clear junk
do {
System.out.println();
System.out.println("\t\t Enter L to (L)oad ");
String entry = sc.nextLine();
input = entry.toUpperCase().charAt(0);
} while (input != 'L' || input!='M' || input != 'P' || input != 'Q');
答案 0 :(得分:2)
input
只有一个值。该值不能同时为L
和M
。您需要更改终止条件。
答案 1 :(得分:1)
您的boolean
||
不正确。如果值为L
,则不是M
,P
或Q
,因此您的循环将继续迭代。我想你想要的东西,
while (input != 'L' && input != 'M' && input != 'P' && input != 'Q');
或
while (!(input == 'L' || input == 'M' || input == 'P' || input == 'Q'));
考虑input
何时为L
,显然L
不是M
,因此您的初始while
条件会继续迭代。
答案 2 :(得分:1)
你已经使用了逻辑或条件它只需要一个真实的陈述来运行,即使你输入了' L'在这一点上,你的一个陈述是错误的,但其他陈述变为真实,为什么它一直在重复。
答案 3 :(得分:0)
喜欢
public static void main(String[] args) {
char input;
Scanner sc = new Scanner(System.in);
input = sc.nextLine().charAt(0);//clear junk
do {
System.out.println();
System.out.println("\t\t Enter L to (L)oad ");
String entry = sc.nextLine();
input = entry.toUpperCase().charAt(0);
} while (input != 'L' && input!='M' && input != 'P' && input != 'Q');
}
答案 4 :(得分:0)
public static char displayMenu(){
char input;
sc.nextLine();//clear junk
do {
System.out.println();
System.out.println("\t\t Enter L to (L)oad ");
String entry = sc.nextLine();
input = entry.toUpperCase().charAt(0);
} while ((input != 'L') && (input!='M') && (input != 'P') && (input != 'Q'));
试试这个
答案 5 :(得分:0)
De Morgan's laws告诉我们
(input != 'L' || input!='M' || input != 'P' || input != 'Q')
与
相同 ! (input == 'L' && input=='M' && input == 'P' && input == 'Q')
必须始终为真,因为
(input == 'L' && input=='M' && input == 'P' && input == 'Q')
必须始终为假,因为
input
一次只能等于一件事。
使用De Morgan的法律可以避免额外的NOT。计算机并不在乎,但是人类并不能很好地处理这些问题。