【问题标题】:Why can't I check if a method returns true in my If statement?为什么我不能在我的 If 语句中检查方法是否返回 true?
【发布时间】:2020-08-02 06:08:32
【问题描述】:

我想要实现的是我希望我的 if 语句检查我的方法 verifyAnswer 是否返回 true,如果它返回 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());
        }
    });

【问题讨论】:

  • 您的verifyAnswer 方法有一个字符串参数,但您没有向它传递任何参数。你认为userAnswer 的值是多少,为什么?
  • 我的 verifyAnswer 方法检查用户是否在四个错误问题之间回答正确,因此如果用户回答正确,它应该返回 true,反之亦然。
  • 但这并不能真正回答我的问题——您希望用户的回答来自哪里?它是一个方法参数,当您尝试调用该方法时并没有传入它。
  • 对不起,我对此有点陌生,所以我不太明白,当您说“我希望用户回答来自哪里”时,您的确切意思是什么?我不确定我应该传递什么参数才能使它起作用。
  • 您应该传入“用户答案” - 目前,我们不知道它来自哪里。您还没有向用户展示任何地方提供答案。例如,我们不知道某处是否存在包含该信息的字段。您希望用户如何提供答案?您希望这些信息如何通过该计划?

标签: java if-statement compiler-errors boolean


【解决方案1】:

因为您没有在 verifyAnswer 方法中传递参数。 verifyAnswer期望字符串参数。

public boolean verifyAnswer(String userAnswer) { .. }

你应该这样打电话

else if(verifyAnswer("pass_what_argument_you_want_to_pass_for_user_answer")) { 
     t.cancel();
}

【讨论】:

    【解决方案2】:

    您应该在方法中更改 true 和 false 返回。就这样

    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;
    }
    
    } 
    

    【讨论】:

    • 没有迹象表明 OP 想要相反的结果(我强烈怀疑他们不想要) - 这并没有解决“OP 没有为 @987654322 传递参数的问题” @"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2015-05-06
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多