英文:
When I enter A, B, C, or D, it still says That is not a valid answer. Why?
问题
这是我为学校做的项目。我们被要求制作一个小测验,我想确保当用户输入的内容超出选项范围时,他们会收到一个错误消息,指出这不是一个有效的答案,但无论我输入什么,它都显示无效。为什么呢?
```java
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("所有科目测验现在开始,请为接下来的10个问题输入正确的选项(字母、T或F)");
System.out.println("问题1(数学):方程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("这不是一个有效的回答");
answer = input.nextLine();
answer = answer.toUpperCase();
}
if (answer.equals("A")) {
System.out.println("回答错误,正确答案是B");
} else if (answer.equals("B")){
System.out.println("正确");
score += 1;
} else if (answer.equals("C")){
System.out.println("回答错误,正确答案是B");
} else if (answer.equals("D")){
System.out.println("回答错误,正确答案是B");
}
}
}
英文:
This is my project for school. We were asked to make a little quiz and I want to make sure when the user enters something outside of the options, they will get an error message saying that is not a valid answer, but whatever I enter it still says that is not valid. Why?
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");
}
}
}
Any help would be appreciated!
答案1
得分: 3
让我们评估您的以下条件:
!answer.equals("A") || !answer.equals("B") || !answer.equals("C") || !answer.equals("D")
假设,answer = E
现在,您的条件将被评估为
true || !answer.equals("B") || !answer.equals("C") || !answer.equals("D") => true
请注意,当多个条件用||连接时,一旦找到一个true条件,评估就会停止。
假设,answer = B
现在,您的条件将被评估为
true || !answer.equals("B") || !answer.equals("C") || !answer.equals("D") => true
假设,answer = A
现在,您的条件将被评估为
false || true || !answer.equals("C") || !answer.equals("D") => true
因此,您可以看到,无论答案如何,条件总是评估为true。
解决方案:
将其更改为
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"))
这意味着答案不是A,且答案不是B,且答案不是C,且答案不是D。
然而,为了简单起见,我偏好第一种方式。
英文:
Let's evaluate your following condition:
!answer.equals("A") || !answer.equals("B") || !answer.equals("C") || !answer.equals("D")
Assume, answer = E
Now, your condition will be evaluated as
true || !answer.equals("B") || !answer.equals("C") || !answer.equals("D") => true
Note that when multiple conditions are joined with ||, the evaluation stops as soon as a true condition is found.
Assume, answer = B
Now, your condition will be evaluated as
true || !answer.equals("B") || !answer.equals("C") || !answer.equals("D") => true
Assume, answer = A
Now, your condition will be evaluated as
false || true || !answer.equals("C") || !answer.equals("D") => true
Thus, you see that irrespective of the answer, the condition always evaluates to true.
Solution:
Change it to
while (!(answer.equals("A") || answer.equals("B") || answer.equals("C") || answer.equals("D")))
which means the answer is not (A, or B, or C, or D)
Alternatively, you can change it to
while (!answer.equals("A") && !answer.equals("B") && !answer.equals("C") && !answer.equals("D"))
which means the answer is not A and the answer is not B and the answer is not C and the answer is not D.
However, for the sake of simplicity, my taste is the first one.
答案2
得分: 1
如果你看一下你的 while 循环条件,你会注意到它将始终评估为 true,因为用户输入不能同时等于 A、B、C 和 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();
}
英文:
If you look at your while loop condition, you will notice that it will always evaluate to true because the user input can't equal A, B, C, and D all at once.
So the solution here is to change the or's (||) in the condition to and's (&&) since you want the user input to be only one of the following: A, B, C, or 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();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论