问题:我在计算arrayList的中位数时遇到问题
背景:所以我的ArrayList获取随机生成的值,我必须计算它的中值;我相信我的中位数公式很好,但是我得到了ArrayList中3个值的中位数答案错误。
对于三个值,它给出了错误的中位数。例如:
当数组列表具有以下值时:
193.5、200.5、239.8
那么该程序只是获取前两个值的平均值并给出答案,而不是求200.5
public double getMedianB(){
Collections.sort(myDataB);
double middle = myDataB.size()/2;
if (myDataB.size()%2 == 1) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 - 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}
System.out.println("median:" + middle);
return middle;
}
最佳答案
中位数由
以升序排列清单
如果列表中的项目数为奇数,则中间数为中位数
如果项目数为偶数,则将中间的两个数字相加并除以二,结果将为中位数
在您的代码中,您具有偶数和奇数切换的条件,因此正确的条件如下
if (myDataB.size()%2 == 0) {
middle = (myDataB.get(myDataB.size()/2) + myDataB.get(myDataB.size()/2 + 1))/2;
} else {
middle = myDataB.get(myDataB.size() / 2);
}