我似乎无法让我的推荐程序跟踪 "Invalid Answers"
I can't seem to work a way for my recommend program to track "Invalid Answers"
代码如下:
do {
System.out.println("Question #1:");
System.out.println("What is your budget for purchasing the laptop?");
System.out.println("A. >0.00");
System.out.println("B. 0.00 - 0.00");
System.out.println("C. 0.00 - 00.00");
System.out.println("D. <00.00");
questionArray [0] = myScanner.nextLine();
if (!questionArray [0].equals ("A") || !questionArray [0].equals ("B") || !questionArray [0].equals ("C") || !questionArray [0].equals ("D")) {
System.out.println("Invalid Entry");
}
} while (!questionArray [0].equals ("A") || !questionArray [0].equals ("B") || !questionArray [0].equals ("C") || !!questionArray [0].equals ("D"));
基本上,即使我写了一个有效的回复(例如"A"),它仍然将其视为无效答案,并重新开始问题。
任何帮助将不胜感激! :)
如果答案是"A",则questionArray[0].equals("B")
为假,所以!questionArray[0].equals("B")
为真,所以整个or
表达式为真,所以答案无效.
将 ||
替换为 &&
。
或使用
if (!(questionArray[0].equals("A") || questionArray[0].equals("B") || questionArray[0].equals("C") || questionArray[0].equals("D")))
或者更好,使用
private static final Set<String> VALID_ANSWERS = new HashSet<>(Arrays.asList("A", "B", "C", "D"));
和
if (!VALID_ANSWERS.contains(questionArray[0]))
尽管有 JB 的回答,但像这样更易读地表达逻辑通常更容易:
private static final List<String> VALID_ANSWERS = Arrays.asList("A", "B", "C", "D");
然后:
do {
// ...
questionArray[0] = myScanner.nextLine();
if (!VALID_ANSWERS.contains(questionArray[0])) {
System.out.println("Invalid Entry");
}
} while (!VALID_ANSWERS.contains(questionArray[0]))
当条件变得复杂时,最好尝试使用变量来简化复杂性,从而使代码更清晰、更易于理解。例如:
boolean validCondition = false;
do {
System.out.println("Question #1:");
System.out.println("What is your budget for purchasing the laptop?");
System.out.println("A. >0.00");
System.out.println("B. 0.00 - 0.00");
System.out.println("C. 0.00 - 00.00");
System.out.println("D. <00.00");
questionArray[0] = myScanner.nextLine();
validCondition = questionArray[0].equals("A") || questionArray[0].equals("B") || questionArray[0].equals("C")
|| questionArray[0].equals("D");
if (!validCondition) {
System.out.println("Invalid Entry");
}
} while (!validCondition);
代码如下:
do {
System.out.println("Question #1:");
System.out.println("What is your budget for purchasing the laptop?");
System.out.println("A. >0.00");
System.out.println("B. 0.00 - 0.00");
System.out.println("C. 0.00 - 00.00");
System.out.println("D. <00.00");
questionArray [0] = myScanner.nextLine();
if (!questionArray [0].equals ("A") || !questionArray [0].equals ("B") || !questionArray [0].equals ("C") || !questionArray [0].equals ("D")) {
System.out.println("Invalid Entry");
}
} while (!questionArray [0].equals ("A") || !questionArray [0].equals ("B") || !questionArray [0].equals ("C") || !!questionArray [0].equals ("D"));
基本上,即使我写了一个有效的回复(例如"A"),它仍然将其视为无效答案,并重新开始问题。 任何帮助将不胜感激! :)
如果答案是"A",则questionArray[0].equals("B")
为假,所以!questionArray[0].equals("B")
为真,所以整个or
表达式为真,所以答案无效.
将 ||
替换为 &&
。
或使用
if (!(questionArray[0].equals("A") || questionArray[0].equals("B") || questionArray[0].equals("C") || questionArray[0].equals("D")))
或者更好,使用
private static final Set<String> VALID_ANSWERS = new HashSet<>(Arrays.asList("A", "B", "C", "D"));
和
if (!VALID_ANSWERS.contains(questionArray[0]))
尽管有 JB 的回答,但像这样更易读地表达逻辑通常更容易:
private static final List<String> VALID_ANSWERS = Arrays.asList("A", "B", "C", "D");
然后:
do {
// ...
questionArray[0] = myScanner.nextLine();
if (!VALID_ANSWERS.contains(questionArray[0])) {
System.out.println("Invalid Entry");
}
} while (!VALID_ANSWERS.contains(questionArray[0]))
当条件变得复杂时,最好尝试使用变量来简化复杂性,从而使代码更清晰、更易于理解。例如:
boolean validCondition = false;
do {
System.out.println("Question #1:");
System.out.println("What is your budget for purchasing the laptop?");
System.out.println("A. >0.00");
System.out.println("B. 0.00 - 0.00");
System.out.println("C. 0.00 - 00.00");
System.out.println("D. <00.00");
questionArray[0] = myScanner.nextLine();
validCondition = questionArray[0].equals("A") || questionArray[0].equals("B") || questionArray[0].equals("C")
|| questionArray[0].equals("D");
if (!validCondition) {
System.out.println("Invalid Entry");
}
} while (!validCondition);