如何为此类添加暂停和恢复方法? 当您暂停并且已经暂停时,则不会发生任何事情。 另外,如果您在不暂停的情况下恢复播放,则不会发生任何事情。
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);
}
}
答案 0 :(得分:0)
为什么不保存变量accumulatedTime
,并且在调用pause()
方法时,将累积的时间附加到变量
accumulatedTime += System.currentTimeMillis() - start / 1000.0;
调用resume()
时,您可以重置开始
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
}
答案 1 :(得分:0)
已暂停时间存储在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;
}
答案 2 :(得分:0)
您的秒表当前与系统时间(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;
}