如何向该类添加pause和resume方法?当你暂停的时候,它已经暂停了,那么不应该发生任何事情。此外,如果您在未暂停时恢复,则不会发生任何事情。
public class Stopwatch {
private final long start;
public Stopwatch() {
start = System.currentTimeMillis();}
public double elapsedTime() {
long now = System.currentTimeMillis();
return (now - start) / 1000.0;}
public static void main(String[] args) {
Stopwatch watch = new Stopwatch();
double total = 0.0;
for (int i = 0; i < 100000000; i++)
total += Math.random();
double time = watch.elapsedTime();
StdOut.println(time);
}
}发布于 2019-11-22 05:19:51
为什么不保存一个变量accumulatedTime,并在调用pause()方法时将累积时间附加到该变量
accumulatedTime += System.currentTimeMillis() - start / 1000.0;当调用resume()时,您可以重置start
start = System.currentTimeMillis();然后elapsedTime()会添加两个:
public double elapsedTime() {
long now = System.currentTimeMillis();
return ((now - start) / 1000.0) + accumulatedTime;
}您还需要跟踪暂停状态-也许是一个isPaused boolean实例变量?然后,您的pause()/resume()可以在适当的情况下响应,例如在pause()方法中:
if (isPaused) {
return; //do nothing
}发布于 2019-11-22 05:20:14
暂停时间存储在additionaltime变量中,当调用elapsedTime时,该变量将用于删除暂停时间。PauseStart变量存储调用暂停的时间(在恢复调用之后,会计算附加时间)
private long additionalTime;
private long pauseStart;
public void pause() {
if (pauseStart == 0) {
pauseStart = System.currentTimeMillis();
}
}
public void resume() {
if (pauseStart != 0) {
long stopTime = System.currentTimeMillis() - pauseStart;
additionalTime += stopTime;
pauseStart = 0;
}
}
public double elapsedTime() {
long now = System.currentTimeMillis();
if (pauseStart != 0) {
long stopTime = System.currentTimeMillis() - pauseStart;
additionalTime += stopTime;
pauseStart = 0;
}
return ((now - start) - additionalTime) / 1000.0;
}发布于 2019-11-22 05:20:29
看起来您的秒表当前与系统时间(System.currentTimeMillis())相关联,因此要暂停应用程序,您需要从已用时间中减去暂停的时间
不过,您可以做的是保存暂停时钟的时间以及恢复时钟的时间:
pause() {
if(!alreadyPaused)
timePaused = System.currentTimeMillis();
}
resume() {
timeResumed = System.currentTimeMillis();
totalTimePaused = previousPausedTimes + (timeResumed-timePaused);
}然后在您的elapsedTime()中:
public double elapsedTime() {
long now = System.currentTimeMillis();
return (now - start - totalTimePaused) / 1000.0;
}https://stackoverflow.com/questions/58983710
复制相似问题