如何让计算用户答题耗时的reactionTime在while循环中正常工作?
问题分析与解决方案
你遇到的问题很典型——计时变量的时机完全放错了位置,导致reactionTime始终是0或者一个极小的数值,根本没记录到用户实际答题的耗时。
问题出在哪?
你现在的代码里,startTime和endTime都是在循环开始前就赋值了,这两个时间戳几乎是同一时刻获取的,所以reactionTime = endTime - startTime的结果基本是0。而且整个循环过程中,你从来没更新过endTime,也没在用户答对的时候重新计算耗时,自然得不到正确的答题时间。
修正后的代码
我们需要调整计时变量的位置,让它真正对应用户答题的时间区间:
- 在显示题目之后、等待用户输入之前记录
startTime——这才是用户开始思考答题的起点 - 在用户答对的瞬间记录
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
相关产品推荐
相关产品推荐

