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