, поэтому я делаю систему подсчета очков для своей викторины, и я хотел основать ее, как в кахуте, чтобы чем больше времени вы тратите на ответ на вопрос, тем меньше очков вы получаете. Вот ссылка на веб-сайт, иллюстрирующий формулу, которую я пытался составить.
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;
}
}