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 将只有一个值。该值不能同时为 LM。您需要更改终止条件。

喜欢

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,则它不是 MPQ,因此您的循环将继续迭代。我想你想要这样的东西,

while (input != 'L' && input != 'M' && input != 'P' && input != 'Q');

while (!(input == 'L' || input == 'M' || input == 'P' || input == 'Q'));

考虑当 inputL 时,显然 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。计算机不在乎,但人类处理的不是很好。