为什么这会导致一个不变的真实'在这个while循环?

时间:2018-01-08 15:08:34

标签: java while-loop constants

这是代码;

public class Main {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Do you need instructions for this game? Y/N.");
    char a = input.next().charAt(0);
    // This while loop always comes out as true.
    while (a != 'y' || a != 'n') {
        System.out.println("Please enter either Y/N. ");
        System.exit(0);
    }
    if (a == 'y') {
        System.out.println("This game is called heads and tails.");
        System.out.println("You must type h (heads), or t (tails).");
        System.out.println("You will need to keep guessing correctly, each correct guess will increase your score.");
    }
}
}

有没有解释为什么它总是如此真实,是否有另一种方法可以做到这一点?我想要进行验证检查,如果用户输入除y或n以外的任何内容,程序将关闭。

问题是,当我输入字符y或n时,即使我使用!=(非等于)运算符,它仍然会关闭。

6 个答案:

答案 0 :(得分:4)

(a != 'y' || a != 'n')至少有一个子条件必须为真。

考虑三种可能的情况:

a is 'y':            false || true  gives true
a is 'n':            true  || false gives true
a is something else: true  || true  gives true

答案 1 :(得分:4)

如果您有a==y,则a != 'n'为真,a != 'y' || a != 'n'为真。 如果您有a==n,那么a != 'y'为真,a != 'y' || a != 'n'为真。 如果您有a == other thing,则a != 'y' || a != 'n'为真。

OR操作每次都是如此。需要使用AND。

答案 2 :(得分:3)

字符a不能同时为yn,因此会为任何输入执行while循环。

此外,循环不循环。

答案 3 :(得分:3)

您正在检查a是否不等于' y'或者a不等于' n' 这总是如此。

将其更改为while ((a != 'y') && (a != 'n'))

答案 4 :(得分:1)

while内的条件 while (a != 'y' || a != 'n') 总是如此,因为

  • 如果a等于y,则a显然不等于n。所以,结果是真的。

  • 同样,如果a等于n,那么a显然不等于y。所以,结果是真的。

  • 同样,如果a不等于yn,那么结果也是如此。

因此,while内的条件始终为真。因此,执行进入while循环,打印完消息后即退出。

因此,使用AND代替OR可以解决您的问题,例如

while(a != 'y' && a !='n') {
    //your work
}

我认为你愿意这样做,如下,

public class Main { 
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Do you need instructions for this game? Y/N: ");
        char a = input.next().charAt(0); 
        while (a != 'y') {
            if(a =='n') {
                System.exit(0);
            }
            else{
                 System.out.println("Please enter either Y/N : ");
                 a = input.next().charAt(0);
            }
        }

        if (a == 'y') {
            System.out.println("This game is called heads and tails.");
            System.out.println("You must type h (heads), or t (tails).");
            System.out.println("You will need to keep guessing correctly, each correct guess will increase your score.");
        }
    } 
}

答案 5 :(得分:0)

你的逻辑应该是" a不是y而a不是n"

while (a != 'y' && a != 'n')