有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我似乎无法为我推荐的程序找到跟踪“无效答案”的方法

代码如下:

do {
    System.out.println("Question #1:");

    System.out.println("What is your budget for purchasing the laptop?");

    System.out.println("A. >$500.00");
    System.out.println("B. $500.00 - $700.00");
    System.out.println("C. $700.00 - $1000.00");
    System.out.println("D. <$1000.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”),它仍然将其视为无效答案,并重新开始提问。 任何帮助都将不胜感激!:)


共 (3) 个答案

  1. # 1 楼答案

    如果答案是“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]))
    
  2. # 2 楼答案

    当情况变得复杂时,最好尝试使用变量简化复杂性,使代码更清晰、更容易理解。例如:

        boolean validCondition = false;
    
        do {
            System.out.println("Question #1:");
            System.out.println("What is your budget for purchasing the laptop?");
    
            System.out.println("A. >$500.00");
            System.out.println("B. $500.00 - $700.00");
            System.out.println("C. $700.00 - $1000.00");
            System.out.println("D. <$1000.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);
    
  3. # 3 楼答案

    尽管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]))