所以我附加了一个调试器,并尝试了不同的输入,但我似乎不明白为什么这不能通过循环。当我输入“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');
6条答案
按热度按时间2j4z5cfb1#
你已经使用了逻辑或条件,它只需要一个true语句就可以运行,即使你输入了'l',此时你的一个语句是false,但其他语句变为true,这就是为什么它不断重复的原因。
rbpvctlc2#
就像
qco9c6ql3#
你的
boolean
||
不正确。如果值为L
那就不是了M
,P
或者Q
所以你的循环将继续迭代。我想你想要的是,或
考虑一下什么时候
input
是L
,显然L
不是M
所以你的首字母while
条件将继续迭代。f8rj6qna4#
德摩根定律告诉我们
(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
一次只能等于一件事。利用德摩根定律,尽可能避免额外的“不”。计算机不关心,但人类不处理,不是很好。
8wigbo565#
试试这个
3zwtqj6y6#
input
只有一个值。该值不能同时为L
以及M
. 你需要改变终止条件。