2015-02-07 2 views
1

Я пытаюсь выполнить этот метод 10 раз, когда поиск массива чисел фиксирует время выполнения в nano секунд и печатает результаты. Затем я хочу, чтобы я взял 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++; 
    } 

    } 
} 

ответ

0

Try:

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); 
0

Попробуй создать список массива размера 10, как:

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

А потом, когда вы находите элемент просто добавьте EndTime - начальное время перечислить как:

times.add(..); 

И как только это будет сделано, в основной метод вы могли бы сделать сумму, в среднем, как:

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