错误的中位数答案

Wrong Median Answer

问题:我在计算 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 == 1) {

中位数的计算方式

  1. 按升序排列列表
  2. 如果列表中的项目数是奇数,则中间的数字是中位数
  3. 如果项目数是偶数,则将中间两个数相加再除以二,结果就是中位数

在你的代码中你有偶数和奇数切换的条件,所以正确的是如下

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);
}

为了获得中间值,您只需要获取中间值即可。而在您的示例中,您正在计算前两个值的某个平均值。

将代码更改为:

Collections.sort(myDataB);
        double middle = myDataB.size()/2;
        if (myDataB.size()%2 == 1) {
           middle = (double)myDataB.get(myDataB.size()/2);
        } else {
            middle = (double) myDataB.get(myDataB.size() / 2);
        }
        System.out.println("median:" + middle);

改变其他条件,无论你想在那里执行什么。