循环方法并使用结果

Looping through a method and using the results

我正在尝试循环执行此方法 10 次以搜索数字数组以纳秒为单位捕获 运行 时间并打印结果。然后我想要 t 取 10 运行 次并找到平均值和标准偏差。 有没有办法捕获 10 运行 之后的时间并使用结果来找到我的平均值和标准偏差? 这是我目前所拥有的:

public class Search {
    public static int Array[] = new int[100];
    //Building my array with 100 numbers in sequential order
    public static void createArray(){


        int i = 0;
        for(i = 0; i<Array.length; i++)
            Array[i]  = i + 1;
        int check[] = {5, 15, 12};
        int target = check[2];
        boolean found = false;
        int j = 0;
        long startTime = System.nanoTime();
    for(j=0; j<Array.length;j++){
        if(Array[j] == target){
             long endTime = System.nanoTime();

             System.out.print(endTime - startTime + "ms" + "\t\t");
            found = true;



        break;
        }
    }
        if(found){
            //System.out.println("got you! "+ target + " is at index "+ j +"\t");..... just to test if it was working

        }
        else{
            System.out.println("not available");


        }

    }
// Printing header
    public static void main(String[]args){
        System.out.print("First run\tSecond run\tThird run\tFourth run\tFifth run\tSixth run\tSeventh run\tEight run\tNinth run\tTenth run\tAverage \tStandard deviation\n");
    // looping through the  method 10 times 
    int i=0;
    while(i<10){

        createArray();


        i++;
    }

    }
}

尝试创建大小为 10 的数组列表,例如:

private static List<Long> times = new ArrayList<>(10);

然后,当您找到元素时,只需将 endTime - startTime 添加到列表中,例如:

times.add(..);

完成后,在您的主要方法中,您可以求和,求平均值,例如:

long totalTime = 0;
for (Long time : times) {
    totalTime += time;
}
//print average by dividing totalTime by 10.

尝试:

long sum = 0;
long sumSquare = 0;
for(int c = 0 ; c < 10 ; c++) {
    long start = System.nanoTime();
    // do work
    long end = System.nanoTime();
    sum += end - start;
    sumSquare += Math.pow(end - start, 2);
}
double average = (sum * 1D) / 10;
double variance = (sumSquare * 1D) / 10 - Math.pow(average, 2);
double std = Math.sqrt(variance);