繁体   English   中英

中位数答案错误

[英]Wrong Median Answer

问题:我在计算arrayList的中位数时遇到问题

背景:所以我的ArrayList获取随机生成的值,我必须计算它的中位数; 我相信我的中位数公式很好,但是我得到了ArrayList中3个值的中位数答案错误。

对于三个值,它给出了错误的中位数。 EG:当数组列表的值是: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);

更改其他条件,无论您要在此处执行什么操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM