java do while 循环不断重复,我不明白为什么
java do while loop keeps repeating and I can't figure out why
所以我附加了一个调试器,并尝试了不同的输入,但我似乎无法弄清楚为什么这不会通过循环。当 运行 我输入 "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');
input
将只有一个值。该值不能同时为 L
和 M
。您需要更改终止条件。
喜欢
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');
}
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'));
试试这个
您的 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
条件将继续迭代。
你已经使用了逻辑或条件,它只需要一个 true 语句到 运行,即使你输入 'L',此时你的一个语句是 false,但其他语句变为 true,这就是为什么继续重复。
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
一次只能等于一件事。
尽可能使用德摩根定律来避免额外的 NOT。计算机不在乎,但人类处理的不是很好。
所以我附加了一个调试器,并尝试了不同的输入,但我似乎无法弄清楚为什么这不会通过循环。当 运行 我输入 "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');
input
将只有一个值。该值不能同时为 L
和 M
。您需要更改终止条件。
喜欢
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');
}
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'));
试试这个
您的 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
条件将继续迭代。
你已经使用了逻辑或条件,它只需要一个 true 语句到 运行,即使你输入 'L',此时你的一个语句是 false,但其他语句变为 true,这就是为什么继续重复。
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
一次只能等于一件事。
尽可能使用德摩根定律来避免额外的 NOT。计算机不在乎,但人类处理的不是很好。