Java中位数。当我有一个带有对号的数组时,我得到的中位数是不正确的

时间:2015-12-06 21:57:59

标签: java median

 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.我无法理解为什么。提前致谢

2 个答案:

答案 0 :(得分:0)

因为您要将int除以int,结果也是int类型,结果的小数部分(.5)会被截断。

要获得双重结果,请在除法运算之前将被除数或除数转换为双精度,如下所示:

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

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

答案 1 :(得分: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;
}