Java:if语句中的运算符不打印"错误"和正确的声明?

时间:2016-02-17 01:56:25

标签: java printing logical-operators

这让我疯狂。这是一个非常简单的程序。它仅打印"错误"当操作错误时,这样做很好。但我遇到的问题是,当正确的答案输入控制台时,它会打印正确的语句和错误。我不明白为什么。我相信这很容易,但我没有看到它。

import java.util.Scanner;

public class MeowSample{
    public static void main(String[] args) {

    Scanner okay = new Scanner(System.in);
    System.out.println("Please enter a letter ");
    char letter = okay.next().charAt(0);
    if(letter != 'x' || letter != 'y' || letter != 'z' || letter != 'q'){
        System.out.println("Errorrr");
    }
    if(letter == 'x' || letter == 'y' || letter == 'z'|| letter == 'q'){
        System.out.println("Correct!");
        }
    }
}

提前谢谢!

2 个答案:

答案 0 :(得分:3)

您的两个if声明不是互斥的。尝试:

import java.util.Scanner;

public class MeowSample{
    public static void main(String[] args) {

    Scanner okay = new Scanner(System.in);
    System.out.println("Please enter a letter ");
    char letter = okay.next().charAt(0);
    //if(letter != 'x' || letter != 'y' || letter != 'z' || letter != 'q'){
    //    System.out.println("Errorrr");
    //}
    if(letter == 'x' || letter == 'y' || letter == 'z'|| letter == 'q'){ // this one is OK
        System.out.println("Correct!");
    } else { // <-- add the else
        System.out.println("Errorrr");  // Move the error print down here.
    }
}

您的原始代码打印&#34;错误&#34;如果letter是任何东西 - 不是x,不是y,不是z,或者不是q。您的原始代码然后打印&#34;正确&#34;如果letter是x,y,z或q。

修改后的代码首先检查您想要的特定字母,然后如果else不是您想要的,则在letter块中打印错误。

答案 1 :(得分:1)

问题在于这个条件:

if(letter != 'x' || letter != 'y' || letter != 'z' || letter != 'q')

如果letter不是'x'或'y'将始终为真,那只是因为letter不能同时为'x'和'y' 。一些布尔代数表明:

l != 'x' || l != 'y' || ...
--> bracket NOT
!(l == 'x') || !(l == 'y') || ...
--> apply rule "!A || !B is equivalent to !(A && B)" (De Morgan 2)
!((l == 'x') && (l == 'y') && ...)

很明显((l == 'x') && (l == 'y') && ...)将始终评估为false,除非给出'x' == 'y' - 事实并非如此。应用NOT运算符,完整条件的最终结果将始终为true

这里正确的逻辑运算符为&&

if(letter != 'x' && letter != 'y' && ...

只会评估为真,如果letter既不是'x',也不是'y',也不是......。到目前为止,如何解决问题本身。但总的来说,使用互斥条件的方法无论如何都会更优雅:

if(letter == 'x' || letter == 'y' || letter == 'z'|| letter == 'q'){
    System.out.println("Correct!");
}else{
    System.out.println("Errorrr");
}