Java秒表类

标签 java

好吧,我正在尝试添加这个秒表类的方法来暂停和恢复秒表上的时间。秒表工作正常,恢复方法也工作正常。问题出在暂停方法上。 当我使用 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/

相关文章:

java - HK2 与 Jersey 2 和 Apache Shiro 的依赖注入(inject)

java - eclipse中的快捷方式与tab相反?

java - 当我们有 Map 时,为什么还需要 Set 呢?

java - lucene dateToString,stringToDate

java - Maven 和 Tomcat 中的 Jar 冲突?

java - 将 JPA 扩展到 Web 服务

java - 如何在启动时禁用 EditText 中的编辑,然后在用户单击 EditText 时重新启用它?

java - 允许用户在 Java 运行时重新定义 Swing 的热键

java - 为什么我的公共(public)变量显示为 "' 这'不可用”?

java - Spring Boot Devtools 示例