2015-12-06 18 views
1
public static double calcMedian(int[] array) { 
    int n = array.length; 
    int middle = n/2; 
    double median=0; 
    for (int i = 0; i < n; i++) { 
     if ((n % 2) == 1) { 
      median = array[middle]; 
     } else if((n % 2) == 0){ 
      median = (array[middle-1] + array[middle])/2; 
     } 
    } 
    return median; 
} 

當我有一個奇數的元素,我沒有得到正確的中位數。例如,如果我的數組是[1 3 6 7 10 12],那麼中位數應該是6.5。我得到的是6.我不明白爲什麼。由於事先Java中位數。當我有一個數字對的數組,我得到的中位數不正確

回答

0

因爲您正在由int分割一int,其結果是也int類型的,並且將結果(.5)的小數部分被截斷。

要得到雙重效果,投無論是股利或除數爲雙師操作之前,像這樣:

median = (array[middle-1] + array[middle])/((double) 2); 

median = ((double) (array[middle-1] + array[middle]))/2; 
0

您應將其更改爲這個(複印機並粘貼準備好,也測試並給出6.5)

public static double calcMedian(int[] array) { 
    int n = array.length; 
    int middle = n/2; 
    double median=0; 
    for (int i = 0; i < n; i++) { 
     if ((n % 2) == 1) { 
      median = array[middle]; 
     } else if((n % 2) == 0){ 
      median = ((double)(array[middle-1] + array[middle]))/2; 
     } 
    } 
    return median; 
} 
相關問題