用java计算完成函数的平均时间

用java计算完成函数的平均时间,java,arrays,loops,Java,Arrays,Loops,我正在运行一个简单的排序1000次,并试图根据用户定义的数组长度获得完成排序所需的平均时间(然后与另一个排序进行比较)。我的问题是,当我尝试获取时间时,它总是0。我已经有一段时间没有编码了,也没有看到我的错误 import java.util.Scanner; public class TimingExpBubble2 { public static long average(long[] arr){ int sum = 0; for (int i

我正在运行一个简单的排序1000次,并试图根据用户定义的数组长度获得完成排序所需的平均时间(然后与另一个排序进行比较)。我的问题是,当我尝试获取时间时,它总是0。我已经有一段时间没有编码了,也没有看到我的错误

import java.util.Scanner;

public class TimingExpBubble2 {
    public static long average(long[] arr){
        int sum = 0; 

        for (int i = 0; i < arr.length; i++) 
            sum += arr[i]; 

        return sum / arr.length; 
    }
    public static void main(String args[]) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter array length: ");
        int x = reader.nextInt();
        long[] time = new long[1000];
        for(int i = 0; i < 1000; i++)
        {
            int[] arr = new int[x];
            for(int j = 0; j < arr.length; j++) {
                arr[j] = (int) (Math.random() * 5000);
            }
            long start = System.currentTimeMillis();

            for (int l = 0; l < arr.length - 1; l++) {
                for (int j = 1; j < arr.length - i; j++) {
                    if (arr[j - 1] > arr[j]) {
                        int temp = arr[j - 1];
                        arr[j - 1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            reader.close();
            long end = System.currentTimeMillis();
            time[i] = (end - start);
        }
        System.out.println("Average time in Miliseconds: " + average(time));
    }

}
'''
import java.util.Scanner;
公共类计时ExpBubble2{
公共静态长期平均值(长期[]arr){
整数和=0;
对于(int i=0;iarr[j]){
内部温度=arr[j-1];
arr[j-1]=arr[j];
arr[j]=温度;
}
}
}
reader.close();
long end=System.currentTimeMillis();
时间[i]=(结束-开始);
}
System.out.println(“以毫秒为单位的平均时间:+平均(时间));
}
}
'''

你需要使用
System.nanoTime()
而不是
System.currentTimeMillis()
我在朋友的帮助下解决了这个问题。 我需要将我的时间变量和度量值作为一个双倍值,因为它们的数量非常小,只需要使用一个运行变量而不是数组就可以了 '''


''

在大多数情况下(在我的测试中),使用System.nanoTime()将排序设置为
0
毫秒,超过10个元素的数组。这往往会在1000次迭代中产生非常小的值(1-3毫秒),因此结果平均为
0.003
毫秒(例如)-而不是对结果使用
long
,您需要使用一个
double
——这将要求您将一个可除值更改为
double
,我可能会尝试使用
java.time
API及其
Duration
支持,但这样做可能会带来额外的开销:/将其更改为double或同时使用两者。感谢您的输入使用纳米也工作。谢谢你的快速回复。
time = time + (end - start);
        }
        System.out.println("Average time in Miliseconds: " + (time / 1000));