【问题标题】:Calculate elapsed time with System.currentTimeMillis() in java在 java 中使用 System.currentTimeMillis() 计算经过的时间
【发布时间】:2015-09-21 23:24:48
【问题描述】:

由于某种原因,我可以在我的程序中获取开始时间和停止时间(通常相差 3 毫秒),但是当我打印 getElapsedTime() 方法的结果时,它总是返回 0。列出的代码是创建一个名为sortTimeStopWatch 对象。

也许四舍五入有问题? 可能getElapsedTime()方法本身有问题?

    System.out.println(sortTime.start()); // Start Timer

    java.util.Arrays.sort(numbers); // Sort the array

    System.out.println(sortTime.stop());// stop timer

    System.out.println("the elapsed time is: " + sortTime.getElapsedTime());
    }
} //end of main class (used for testing)

//Define Class
 class StopWatch {
 long startTime;
 long endTime;

 //Constructors
 public StopWatch () { 
 }

 //Methods
long start() {
    long startTime = System.currentTimeMillis();
    return startTime; 
}
long stop() {
    long endTime = System.currentTimeMillis();
    return endTime; 
}
long getElapsedTime() {
        return (endTime - startTime);
    }
     }

例如,当我运行程序时,结果是:

1442877972466
1442877972469
经过的时间是:0

【问题讨论】:

标签: java


【解决方案1】:

您正在创建与类变量同名的局部变量:

long start() {
    long startTime = System.currentTimeMillis();
    return startTime; 
}

在此函数中使用long startTime 会生成一个与名为startTime 的类成员不同的局部变量。将其更改为:

long start() {
    startTime = System.currentTimeMillis();
    return startTime; 
}

【讨论】:

    【解决方案2】:

    startTimeendTime 已被重新声明/隐藏为局部变量,实例字段保留其默认值(0

    long start() {
        long startTime = System.currentTimeMillis();
        return startTime; 
    }
    long stop() {
        long endTime = System.currentTimeMillis();
        return endTime; 
    }
    

    相反,使用实例字段...

    long start() {
        startTime = System.currentTimeMillis();
        return startTime; 
    }
    long stop() {
        endTime = System.currentTimeMillis();
        return endTime; 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多