0

这是我的主要代码,它使用 nanoTime() 计算 selectionSort() 的时间差:

    System.out.println("Start time :: " + test.start());
    test.selectionSort();
    System.out.println("End time :: " + test.end());
    System.out.println(test);
    System.out.print("Time took to run selectionSort() == ");
    System.out.println((test.getElapsedTime()) + " nanoseconds");

我的 start()、end() 和 getElapsedTime() 方法是:

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

    public long end(){
    endTime = System.nanoTime();
    return endTime;
    }

    public long getElapsedTime(){
    return end() - start();
    }

运行此程序后,输出为:

    5 2 9 7 4 3 0 1 6 8 
    Start time :: 915929737160723
    End time :: 915929737309925
    0 1 2 3 4 5 6 7 8 9 
    Time took to run selectionSort() == -5921 nanoseconds

getElapsedTime() 方法在它应该是正数时如何返回负数?

4

2 回答 2

1

因为getElapsedTime不会startTime从中减去,而是在对和endTime的调用中重置它们。两个调用几乎同时发生,并返回新的纳米时间。显然碰巧稍后被评估,所以结果是一个小的负数。end()start()start()

建议修复:

public long getElapsedTime() {
  return endTime - startTime;
}
于 2017-03-26T10:55:39.550 回答
0

您必须将时间保存在变量中,如下所示:

startTime = System.nanoTime();
doThings(); //This is what you want to measure
elapsedTime = System.nanoTime() - startTime;
System.out.println((elapsedTime + " nanoseconds");
于 2017-03-26T11:04:30.963 回答