我似乎无法让我的推荐程序跟踪 "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);