因此,在我的java类中,我们有一个作业分配使用System.currentTimeMillis
来显示点击之间的时间量。我尝试过但尝试过但是没有用。这是我的代码。
1 /* Matthew Caldwell
2 * September 21, 2011
3 * Homework #4: Problem 5.8.1 pg. 149
4 * Program that displays the amount of time that passed
5 * between two mouse clicks. Nothing is displayed
6 * on the first click, then each successive click will
7 * display how much time passed between that click and
8 * the previous one.
9 */
10
11 import objectdraw.*;
12 import java.awt.*;
13
14 public class ElapsedTimeClient extends WindowController {
15
16 public static void main(String[]args) {
17 new ElapsedTimeClient().startController(800,500);
18 }
19
20 private Text title,result;
21 private double count = 0;
22
23 public void begin() {
24
25 // Set up the title and result
26 title = new Text("CLICK COUNTER",
27 canvas.getWidth() / 2,
28 20, canvas);29 title.move(-title.getWidth() / 2, 0);
30 result = new Text("", canvas.getWidth() / 2, 40, canvas);
31
32 }
33
34 public void onMouseClick(Location p) {
35
36 double timerS=0;
37
38 if(count == 0) {
39 timerS = System.currentTimeMillis();
40 } else {
41 result.setText("The time between clicks was " +
42 (System.currentTimeMillis() - timerS)/1000 +
43 " seconds.");
44 timerS = System.currentTimeMillis();
45 }
46
47 count++;
48
49 }
50
51 }
我真的不想让任何人完全告诉我该怎么做但我只需要一点指导。我做错了什么? 代码全部编译并运行得很好,但是当我点击而不是给我点击之间经过的时间时,它给了我一个永远不会改变的大数字。它几乎每次都告诉我1.316639174817E9。
答案 0 :(得分:4)
首先,以毫秒为单位的系统时间应表示为长,而不是双倍。
其次,你需要创建一个变量,它保存自上次点击(timerS)以来的实际变量时间,它当前是本地方法,因此每次都重置。
简而言之,改变:
double timerS=0;
从局部变量,实例变量和long:
public class ElapsedTimeClient extends WindowController {
long timerS;
答案 1 :(得分:2)
timerS变量在onMouseClick方法的内声明,因此只存在于此方法中。第一次单击鼠标后,该变量消失,无法用于比较时间。
相反,您应该使用类变量来存储此信息。
答案 2 :(得分:1)
你的问题是:
timerS
应该是该类的字段(不是局部变量),否则在您的方法调用之间不会保留其值timerS
应为long
类型 - 从系统时间返回的类型此外:
count
应为int
答案 3 :(得分:1)
除了提到的其他答案外,System.nanoTime
是此类测量的首选方法。该方法测量的是纳秒数,而不是测量“时钟时间”的差异。您经常会发现currentTimeMilils
上的分辨率并不比16 ms左右更好,而nanoTime
可以解决更小的间隔。
答案 4 :(得分:0)
timerS不需要双重类型。 currentTimeMillis()返回long。
为什么会这样? 如果您使用这样的双重类型:
(double - long) / 1000,
解释如下:
double / double = double
所以在结果中你有“精确”值(例如1.316639174817E9)而不是长值。