Java: Not operator in if 语句打印 "error" 和正确的语句?
Java: Not operator in if statement prints "error" and correct statement?
这快把我逼疯了。这是一个非常简单的程序。当操作错误时它只打印"error",这样很好。但我遇到的问题是,当正确的答案输入控制台时,它会同时打印正确的语句和错误。我不明白为什么。我确信这很容易,但我没有看到它。
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!");
}
}
}
提前致谢!
你的两个 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.
}
}
如果 letter
是任何东西,您的原始代码将打印 "Error" - 不是 x、不是 y、不是 z 或不是 q。如果 letter
是 x、y、z 或 q,则您的原始代码将打印 "Correct"。
修改后的代码首先检查您想要的特定字母,然后如果 letter
不是您想要的,则在 else
块中打印错误。
问题是这种情况:
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");
}
这快把我逼疯了。这是一个非常简单的程序。当操作错误时它只打印"error",这样很好。但我遇到的问题是,当正确的答案输入控制台时,它会同时打印正确的语句和错误。我不明白为什么。我确信这很容易,但我没有看到它。
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!");
}
}
}
提前致谢!
你的两个 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.
}
}
如果 letter
是任何东西,您的原始代码将打印 "Error" - 不是 x、不是 y、不是 z 或不是 q。如果 letter
是 x、y、z 或 q,则您的原始代码将打印 "Correct"。
修改后的代码首先检查您想要的特定字母,然后如果 letter
不是您想要的,则在 else
块中打印错误。
问题是这种情况:
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");
}