问题:我在计算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);
}

10-05 23:33