Как я могу заставить время реакции работать в моем цикле while

#java

#java

Вопрос:

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

Но время реакции не работает, когда я помещаю переменные в свой цикл while.

Вот код:

 long startTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();
long reactionTime = endTime - startTime;
//Q1
System.out.println("Q1");
while (true) {
    System.out.println("What is 1 1: ");
    int ans = scanner.nextInt();
    if (ans == 2) {
        System.out.println("Correct");
        System.out.println(reactionTime   "ms");
        break;
    } else {
        System.out.println("incorrect please try again");

    }
}
 

Комментарии:

1. Конечно, время окончания следует считать, когда найден правильный ответ. Что вы подразумеваете под » Но время реакции не работает, когда я помещаю переменные в свой цикл while «?

2. Ожидается ли, что время реакции будет равняться времени, которое потребовалось пользователю, чтобы найти правильный ответ, или времени от запроса вопроса до ввода ответа?

3. @vsfDawg Это количество времени, которое потребовалось пользователю, чтобы найти правильный ответ

4. @maloomeister Да, я решил свою проблему, просмотрев ответы, которые я получил от других. Спасибо вам всем.

Ответ №1:

Проблема в том, что ваше время окончания и время начала в основном равны, потому что вы берете их оба до того, как вопрос даже задан.

Чтобы решить эту проблему, рассчитайте время, которое потребовалось, только после правильного ответа пользователя.

 // take the start time once before the user gets to answer your question
long startTime = System.currentTimeMillis();

//Q1
System.out.println("Q1");
while (true) {
    System.out.println("What is 1 1: ");
    int ans = scanner.nextInt();
    if (ans == 2) {
        System.out.println("Correct");

        // take the end time here, only if the answer of the user is correct
        long endTime = System.currentTimeMillis();
        long reactionTime = endTime - startTime;

        System.out.println(reactionTime   "ms");
    } else {
        System.out.println("incorrect please try again");
    }
}
 

Ответ №2:

 public class Questionnaire {
    
    public static void main(String... args) {
        int totalQuestions = 10;
        Scanner scan = new Scanner(System.in);
        
        for (int i = 0; i < totalQuestions; i  ) {
            String title = "What is 1 1: ";
            String correctAnswer = "2";
            long reactionTime = askQuestionAndGetReactionTimeMs(scan, title, correctAnswer);
            System.out.format("Reaction time: %dmsnn", reactionTime);
        }
    }
    
    private static long askQuestionAndGetReactionTimeMs(Scanner scan, String title, String correctAnswer) {
        long beginTime = System.currentTimeMillis();
        
        while (true) {
            System.out.print(title);
            String answer = scan.next();
            
            if(correctAnswer.equals(answer))
                return System.currentTimeMillis() - beginTime;
            
            System.out.println("incorrect please try again")
        }
    }
}