java do while循环不断重复,我无法弄清楚原因

时间:2015-04-28 03:14:09

标签: java do-while

所以我已经附加了一个调试器,尝试了不同的输入,我似乎无法弄清楚为什么它不能通过循环。跑步时,我进入" 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 个答案:

答案 0 :(得分:2)

input只有一个值。该值不能同时为LM。您需要更改终止条件。

答案 1 :(得分:1)

您的boolean ||不正确。如果值为L,则不是MPQ,因此您的循环将继续迭代。我想你想要的东西,

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。计算机并不在乎,但是人类并不能很好地处理这些问题。