Программа выводит неверную опцию из оператора if-else - PullRequest
2 голосов
/ 30 апреля 2020

Я пытался создать программу на Java, которая задает вопрос, а затем в зависимости от ввода пользователя отображает одно из диалоговых окон. По какой-то причине, когда я нажимаю на правильный вариант, он дает мне «Неправильно. Правильный ответ А.» сообщение, хотя оно должно сказать «исправить!». Я подозреваю, что ошибка где-то в методе check () (строки с 25 по 34), однако я не уверен, так как код выглядит довольно простым, и я не могу точно определить, что не так и почему Программа не работает должным образом. Может ли кто-нибудь помочь?

import javax.swing.JOptionPane;
public class Quiz {

public static void main(String[] args) {
    String question = "What color is the hair of Disney princess Jasmine?\n";
    question += "A. Black\nB. White\nC. Green\nD. Blue\nE. Rainbow";
//  ask(question);
    check(question, "A");
}

static String ask(String question) {
    while (true) {
        String answer = JOptionPane.showInputDialog(question);
        answer = answer.toUpperCase();  

        if (answer.equals("A")) {
             return question.toUpperCase();
            }
        else if(!answer.equals("B") && !answer.equals("C") && !answer.equals("D") && !answer.equals("E")) {
             JOptionPane.showMessageDialog(null,"Invalid answer. Please enter A, B, C, D, or E.");  
        }
    }   
}

static void check(String question, String correctAnswer) {
    String answer = ask(question);  

    if (answer.equals(correctAnswer)) {
         JOptionPane.showMessageDialog(null,"Correct!");
    }
    else {
        JOptionPane.showMessageDialog(null, "Incorrect. The correct answer is A.");
    }
}

}

Ответы [ 3 ]

3 голосов
/ 30 апреля 2020

У вас есть небольшая ошибка здесь,

if (answer.equals("A")) {
     return question.toUpperCase();
}

Это должно быть

if (answer.equals("A")) {
     return "A";
}

См. Также check и

String answer = ask(question);
2 голосов
/ 30 апреля 2020

Вы должны позволить методу "ask" возвращать сам ответ, а не question.toUppercase.

Во-вторых, ваш метод ask теперь возвращается только тогда, когда пользователь действительно ответил A. Так что вы должны сделать это таким образом. Кстати, эти ответы, такие как B, также возвращаются, так что ваш метод проверки (который кажется правильным) может классифицировать эти ответы как неправильные.

1 голос
/ 30 апреля 2020

Ваш метод ask(String question) рассматривает вариант «A» (правильный ответ в вашем случае) и все другие возможности, кроме (B, C, D и E). Почему? Потому что в вашем операторе if вы говорите, что должны сделать это:

//This means in case we have all other answers except A (according to the 
//condition in  the if), B, C, D and E
else if(!answer.equals("B") && !answer.equals("C") && !answer.equals("D") && 
!answer.equals("E")) {
JOptionPane.showMessageDialog(null,"Invalid answer. Please enter A, B, C, D, 
or E.");  
}

Вы должны добавить else, чтобы завершить его, а затем охватить все параметры:

if (answer.equals("A")) {
//Case we choose A
return "A";
}else if(!answer.equals("B") && !answer.equals("C") && !answer.equals("D") && 
 !answer.equals("E")) {
 //All other options
 JOptionPane.showMessageDialog(null,"Invalid answer. Please enter A, B, C, D, 
 or E.");  
 }else{
  //Case we choose B, C, D or E
  //As the return is different from the correct answer
  //The message "Incorrect. The correct answer is A." should appear
  return "Incorrect answer";
  }
...