Java 当我输入A、B、C或D时,它仍然表示这不是一个有效的答案。为什么?
这是我在学校的项目。我们被要求做一个小测验,我想确保当用户输入选项之外的内容时,他们会收到一条错误消息,说这不是一个有效的答案,但无论我输入什么,它仍然说这是无效的。为什么?Java 当我输入A、B、C或D时,它仍然表示这不是一个有效的答案。为什么?,java,string,Java,String,这是我在学校的项目。我们被要求做一个小测验,我想确保当用户输入选项之外的内容时,他们会收到一条错误消息,说这不是一个有效的答案,但无论我输入什么,它仍然说这是无效的。为什么? import java.util.Scanner; class Main { public static void main(String[] args) { String answer; int score = 0; Scanner input = new Scanner(System.in); Sy
import java.util.Scanner;
class Main {
public static void main(String[] args) {
String answer;
int score = 0;
Scanner input = new Scanner(System.in);
System.out.println("ALL SUBJECT QUIZ Starting now, please enter the correct option (Letters or T or F) for the next 10 questions");
System.out.println("Question 1 (Maths): What is the vertex of the equation y=2(x-2)^2+5");
System.out.println("A. (-2,5)" + "\n" + "B. (2, 5)" + "\n" + "C. (-2,-5)" + "\n" + "D. (2, -5)");
answer = input.nextLine();
answer = answer.toUpperCase();
while (!answer.equals("A") || !answer.equals("B") || !answer.equals("C") || !answer.equals("D")) {
System.out.println("That is not a valid response");
answer = input.nextLine();
answer = answer.toUpperCase();
}
if (answer.equals("A")) {
System.out.println("Incorrect, the answer is B");
} else if (answer.equals("B")){
System.out.println("Correct");
score += 1;
} else if (answer.equals("C")){
System.out.println("Incorrect, the answer is B");
} else if (answer.equals("D")){
System.out.println("Incorrect, the answer is B");
}
}
}
任何帮助都将不胜感激 如果查看while循环条件,您会注意到它将始终计算为
true
,因为用户输入不能同时等于A
、B
、C
和D
因此,这里的解决方案是将条件中的or(|
)更改为and(&&
),因为您希望用户输入仅为以下内容之一:A
,B
,C
,或D
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D")) {
System.out.println("That is not a valid response");
answer = input.nextLine();
answer = answer.toUpperCase();
}
如果查看while循环条件,您会注意到它的计算结果总是
true
,因为用户输入不能同时等于A
、B
、C
和D
因此,这里的解决方案是将条件中的or(|
)更改为and(&&
),因为您希望用户输入仅为以下内容之一:A
,B
,C
,或D
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D")) {
System.out.println("That is not a valid response");
answer = input.nextLine();
answer = answer.toUpperCase();
}
让我们评估一下您的以下情况:
!answer.equals("A") || !answer.equals("B") || !answer.equals("C") || !answer.equals("D")
假设,answer=E
现在,您的情况将被评估为
true | |!回答:等于(B)| |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
请注意,当多个条件与|
合并时,只要找到true
条件,计算就会停止
假设,answer=B
现在,您的情况将被评估为
true | |!回答:等于(B)| |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
假设,answer=A
现在,您的情况将被评估为
false | | true | |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
因此,您可以看到,无论答案如何,条件的计算结果总是true
解决方案:
换成
while (!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D")))
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D"))
这意味着答案不是(A
,或B
,或C
,或D
)
或者,您可以将其更改为
while (!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D")))
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D"))
这意味着答案不是A
,答案不是B
,答案不是C
,答案不是D
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D")) {
System.out.println("That is not a valid response");
answer = input.nextLine();
answer = answer.toUpperCase();
}
然而,为了简单起见,我的口味是第一位的。让我们评估一下您的以下情况:
!answer.equals("A") || !answer.equals("B") || !answer.equals("C") || !answer.equals("D")
假设,answer=E
现在,您的情况将被评估为
true | |!回答:等于(B)| |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
请注意,当多个条件与|
合并时,只要找到true
条件,计算就会停止
假设,answer=B
现在,您的情况将被评估为
true | |!回答:等于(B)| |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
假设,answer=A
现在,您的情况将被评估为
false | | true | |!回答:等于(“C”)| |!回答。等于(“D”)
=>true
因此,您可以看到,无论答案如何,条件的计算结果总是true
解决方案:
换成
while (!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D")))
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D"))
这意味着答案不是(A
,或B
,或C
,或D
)
或者,您可以将其更改为
while (!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D")))
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D"))
这意味着答案不是A
,答案不是B
,答案不是C
,答案不是D
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D")) {
System.out.println("That is not a valid response");
answer = input.nextLine();
answer = answer.toUpperCase();
}
然而,为了简单起见,我的品味是第一位的。
虽然(!answer.equals(“A”)| |!answer.equals(“B”)|!answer.equals(“C”)| |!answer.equals(“D”)
-糟糕的逻辑,它总是不等于这4个选项中的至少3个(因此总是正确的)。将这些|
中的每一个更改为&
,而(!answer.equals(“A”)|!answer.equals(“B”)|!answer.equals(“C”)|!answer.equals(“D”)
-糟糕的逻辑,它总是不等于这4个选项中的至少3个(因此总是正确的)。将这些|
中的每一个更改为。