Почему я не могу проверить, возвращает ли метод true в моем операторе If? - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь добиться того, чтобы мой оператор if проверял, возвращает ли мой метод verifyAnswer значение true, и если это так, я хочу, чтобы он отменил мой таймер. Итак, я искал, как сделать следующее, но в ответе я нашел все похожие вещи, однако я думаю, что, поскольку мой аргумент в методе зависит от ответа пользователя, он не работает. Это кажется простым, но я новичок в Java и не могу заставить его работать. Спасибо всем за помощь!

public boolean verifyAnswer(String userAnswer) {
    
    
    String correctAnswer = this.questions.get(currentQuestionIndex).correctAnswerText;
    

    if(userAnswer.equals(correctAnswer)) {
        
        timer.pauseTimer();

        JOptionPane.showMessageDialog(null, "Correct Answer");
        return true;
    }
    else {
        timer.pauseTimer();
        JOptionPane.showMessageDialog(null, "Wrong Answer");
        return false;
    }
    
}    


Timer t = new Timer();
    
    int[] score = {0};
    TimerTask tt = new TimerTask() {
        @Override
        public void run() {
            System.out.println(++score[0]);
            if (score[0] == 30) {
                t.cancel();
                
            }
            else if(verifyAnswer()) { //Why doesn't this line work?
                t.cancel();
            }
        };
    };
    
    t.scheduleAtFixedRate(tt, 0, 1000);

Ниже находится метка со слушателем действия, поэтому, когда пользователь нажимает на нее, он проверяет текст, который находится в метке, с помощью метода verifyAnswer, чтобы увидеть, есть ли пользователь выбрал правильно.

    label_option_a = new JLabel("<html>Option A</html>");
        label_option_a.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            
        verifyAnswer(label_option_a.getText());
        }
    });

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Потому что вы не передаете аргумент в методе verifyAnswer. verifyAnswer ожидаемый строковый параметр.

public boolean verifyAnswer(String userAnswer) { .. }

Вы должны называть это

else if(verifyAnswer("pass_what_argument_you_want_to_pass_for_user_answer")) { 
     t.cancel();
}
0 голосов
/ 02 августа 2020

Вы должны изменить истинный и ложный возврат в вашем методе. Вот так

public boolean verifyAnswer(String userAnswer) {


String correctAnswer = this.questions.get(currentQuestionIndex).correctAnswerText;


if(userAnswer.equals(correctAnswer)) {
    
    timer.pauseTimer();

    JOptionPane.showMessageDialog(null, "Correct Answer");
    return false;
}
else {
    timer.pauseTimer();
    JOptionPane.showMessageDialog(null, "Wrong Answer");
    return true;
}

} 
...