java do while循环不断重复,我不知道为什么

qkf9rpyu  于 2021-07-09  发布在  Java
关注(0)|答案(6)|浏览(430)

所以我附加了一个调试器,并尝试了不同的输入,但我似乎不明白为什么这不能通过循环。当我输入“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');
2j4z5cfb

2j4z5cfb1#

你已经使用了逻辑或条件,它只需要一个true语句就可以运行,即使你输入了'l',此时你的一个语句是false,但其他语句变为true,这就是为什么它不断重复的原因。

rbpvctlc

rbpvctlc2#

就像

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');
}
qco9c6ql

qco9c6ql3#

你的
boolean || 不正确。如果值为 L 那就不是了 M , P 或者 Q 所以你的循环将继续迭代。我想你想要的是,

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

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

考虑一下什么时候 inputL ,显然 L 不是 M 所以你的首字母 while 条件将继续迭代。

f8rj6qna

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 一次只能等于一件事。
利用德摩根定律,尽可能避免额外的“不”。计算机不关心,但人类不处理,不是很好。

8wigbo56

8wigbo565#

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'));

试试这个

3zwtqj6y

3zwtqj6y6#

input 只有一个值。该值不能同时为 L 以及 M . 你需要改变终止条件。

相关问题