我正在尝试打印elapsed
所持有的长值,有人可以帮我解决如何操作的格式吗?
这会打印0.0
但我知道它有更多有效数字(可能像.0005324或其他东西)
System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");
System.currentTimeMillis();
long start = System.currentTimeMillis();
int sortedArr[] = selectionSort(arr1);
long elapsed = System.currentTimeMillis() - start;
System.out.println("\n///////////SELECTIONSort//////////////");
System.out.println("\nSelection sort implemented below prints a sorted list:");
print(sortedArr);
System.out.printf("It took %.7f ms....", elapsed);
//System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");'
private static int[] selectionSort(int[] arr) {
int minIndex, tmp;
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
minIndex = i;
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[minIndex])
minIndex = j;
if (minIndex != i) {
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
return arr;
}'
答案 0 :(得分:2)
更改格式不会给你更多的分辨率,如果你用7位数字打印1 ms你每次只得到1.0000000就会产生真正的问题。这对你没有任何帮助。
您需要的是高分辨率计时器
long start = System.nanoTime();
int sortedArr[] = selectionSort(arr1);
long elapsed = System.nanoTime() - start;
System.out.println("\n///////////SELECTIONSort//////////////");
System.out.println("\nSelection sort implemented below prints a sorted list:");
print(sortedArr);
System.out.printf("It took %.3f ms....", elapsed / 1e6);
但是,如果你这样做,一旦你自欺欺人,因为Java动态编译代码并且速度越快你运行它就越多。它可以快100倍或更快,使你看到的第一个数字毫无用处。
通常情况下,我建议您多次运行循环,忽略前10,000次。这将改变结果,以至于您将看到第一个数字完全错误。我建议你试试这个
for(int iter = 1; iter<=100000; iter *= 10) {
long start = System.nanoTime();
int[] sortedArr = null
for(int i=0;i<iter;i++)
sortedArr = selectionSort(arr1);
long elapsed = System.nanoTime() - start;
System.out.println("\n///////////SELECTIONSort//////////////");
System.out.println("\nSelection sort implemented below prints a sorted list:");
print(sortedArr);
System.out.printf("It took %.3f ms on average....", elapsed / 1e6 / iter);
}
通过长时间运行代码,您将看到结果提高10倍甚至100倍。
答案 1 :(得分:1)
您可以使用print formatting。对于double
或float
,要获得小数点后的7个位置,您可以这样做:
System.out.printf("It took %.7f ms....", elapsed);
修改强>:
您实际上使用的是long
,而不是double
,因此您无法使用有效数字,因为long
仅采用整数值。
答案 2 :(得分:0)
试试这个: 的String.format( “%7F”,的longValue); 通过使用上面的行,您可以格式化您的长或任何浮点数。这里有7个被称为'。'之后你想要多少位数。
答案 3 :(得分:0)
long
是一个整数值,没有小数位。
要获得运行时的近似值,请在循环中运行相同的排序,例如1000次,然后将测量的时间除以1000.
例如:
System.out.println("It took " + ((double)elapsed) / NUMBER_OF_ITERATONS);