You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让计算用户答题耗时的reactionTime在while循环中正常工作?

问题分析与解决方案

你遇到的问题很典型——计时变量的时机完全放错了位置,导致reactionTime始终是0或者一个极小的数值,根本没记录到用户实际答题的耗时。

问题出在哪?

你现在的代码里,startTime和endTime都是在循环开始前就赋值了,这两个时间戳几乎是同一时刻获取的,所以reactionTime = endTime - startTime的结果基本是0。而且整个循环过程中,你从来没更新过endTime,也没在用户答对的时候重新计算耗时,自然得不到正确的答题时间。

修正后的代码

我们需要调整计时变量的位置,让它真正对应用户答题的时间区间:

  1. 在显示题目之后、等待用户输入之前记录startTime——这才是用户开始思考答题的起点
  2. 在用户答对的瞬间记录endTime,然后计算实际耗时
import java.util.Scanner;

public class ReactionTimeTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 展示题目
        System.out.println("Q1");
        System.out.println("What is 1+1: ");
        
        // 开始计时:用户看到题目后准备输入时记录起始时间
        long startTime = System.currentTimeMillis();
        
        while (true) {
            int ans = scanner.nextInt();
            if (ans == 2) {
                // 用户答对时立即记录结束时间,计算耗时
                long endTime = System.currentTimeMillis();
                long reactionTime = endTime - startTime;
                
                System.out.println("Correct");
                System.out.println(reactionTime + "ms");
                break;
            } else {
                System.out.println("Incorrect, please try again");
            }
        }
        scanner.close();
    }
}

额外优化建议

  • 如果用户答错多次,上面的代码会记录从第一次看到题目到最终答对的总耗时,这通常是符合需求的
  • 如果你想记录用户每次尝试答题的单独耗时,可以把startTime放到循环内部,每次提示用户输入前重新计时

这样调整后,就能准确计算用户的答题耗时啦!

内容的提问来源于stack exchange,提问作者Abdullah Alshamrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:17:31