英文:
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();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论