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