好吧,我正在尝试添加这个秒表类的方法来暂停和恢复秒表上的时间。秒表工作正常,恢复方法也工作正常。问题出在暂停方法上。 当我使用 elapsedTime 检查已经过去了多少时间,然后使用暂停方法暂停时间,然后我等待一会儿并再次检查时间时,时间暂停了。但是,如果我等待一会儿并使用 elapsedTime 再次检查时间(不再使用暂停()),时间就会发生变化,就好像我已经恢复了时间一样。如果我检查时间,暂停,检查时间,暂停,...那么时间不会改变,但显然我希望时间保持暂停状态,直到我恢复。
public class Stopwatch {
private final long start;
private long additionalTime;
private long pauseStart;
public Stopwatch() {
start = System.currentTimeMillis();}
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;}
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(timi);
watch.pause();
for (int i = 0; i < 200000000; i++)
total += Math.random();
time = watch.elapsedTime();
StdOut.println(time);
for (int i = 0; i < 200000000; i++)
total += Math.random();
time = watch.elapsedTime();
StdOut.println(time);
}
}
最佳答案
我认为你应该使用两个不同的类。您考虑过这样的事情吗?
- 将您的 Stopwatch 类重命名为:InnerStopwatch。
- 创建一个新的 Stopwatch 类,其中包含 InnerStopwatchs 列表。
- 当您启动秒表时,它会创建一个新的 InnerStopwatch,启动它并将其引用存储为“当前内部秒表”
- 当您暂停秒表时,它会调用“当前内部秒表”的 stop 方法。
- 当您恢复秒表时,它会创建一个新的 InnerStopwatch 并启动它;并将其标记为新的“当前内部秒表”
- 当您询问耗时时,它会汇总列表中所有内部秒表的耗时。
请告诉我这是否适合您。
关于Java秒表类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58984839/