Как я могу вернуть целочисленное значение из класса таймера - Java? - PullRequest
0 голосов
/ 05 августа 2020

, поэтому я делаю систему подсчета очков для своей викторины, и я хотел основать ее, как в кахуте, чтобы чем больше времени вы тратите на ответ на вопрос, тем меньше очков вы получаете. Вот ссылка на веб-сайт, иллюстрирующий формулу, которую я пытался составить.

https://support.kahoot.com/hc/en-us/articles/115002303908-How-to-toggle-points

Однако я понял, что не могу вернуться из класса таймера целочисленное значение для выполнения моих вычислений. После исследования я попытался придумать следующее решение. Я бы создал класс таймера, который добавлял бы 1 к переменной на 30 секунд и останавливал бы добавление 1, когда был выбран ответ или время истекло. При этом я мог бы использовать значение в классе переменных для выполнения моих вычислений. Но я также столкнулся с некоторыми проблемами, так как либо моя переменная начала добавлять 1 только после того, как пользователь выбрал ответ, либо я не мог остановить таймер после выбора ответа. Ниже приведен код, который у меня есть. Мой вопрос: можно ли вернуть целое число из таймера, а если нет, как я могу изменить свой код, чтобы он работал?

    public boolean verifyAnswer(String userAnswer) {
    
    String correctAnswer = this.questions.get(currentQuestionIndex).correctAnswerText;
    
    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(userAnswer.equals(correctAnswer)) {
                t.cancel();
            }
        };
    };
    
    t.scheduleAtFixedRate(tt, 0, 1000);
    

    if(userAnswer.equals(correctAnswer)) {
        
        timer.pauseTimer();
        
        long total = 0;
        long equation = score / 30000;
        long equation2 = equation / 2000;
        long equation3 = 1 - equation2;
        long point = equation3 * 1000;
        total += point;
        
        QuestionScreen label = new QuestionScreen(questions);
        JLabel label1 = label.label_2;
        label_2.setText(""+total);
        JOptionPane.showMessageDialog(null, "Correct Answer");
        return true;
    }
    else {
        timer.pauseTimer();
        JOptionPane.showMessageDialog(null, "Wrong Answer");
        return false;
    }
    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...