ActionScript 3中的中位数计算

时间:2012-04-03 05:03:14

标签: actionscript-3

我有一个数字数组,我想计算中位数。 当数组是奇数时,计算就可以了,甚至出现奇怪的数字。

private var numbers:String = "2,5,3,4,6,1";
private var array:Array = numbers.split(",");

private function getMedian(array:Array):Number {
 var sortnums:Array = array.sort(Array.NUMERIC);
 var length:Number = sortnums.length;
 var mid1:Number; var mid2:Number; var median:Number;

 if(length % 2 == 0){
     mid1 = length / 2; trace("mid1: "+mid1);
 mid2= ((length - 1) / 2)-0.5; trace("mid2: "+mid2);
 trace ("mid1: "+sortnums[mid1]+", mid2: "+sortnums[mid2]);
 median = (sortnums[mid1] + sortnums[mid2]) / 2;
 }else{
 mid1 = (length / 2)-0.5
 median = sortnums[mid1]
 }
 trace (median);
 return median;
}

结果是21.5,但应该是3.5

mid1和mid2是阵列中的一个位置。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

试试这个(整洁):

function getMedian(plug:Array):Number
{
    // Even length.
    if(plug.length % 2 == 0)
    {
        var a:Number = plug[int(plug.length / 2) - 1];
        var b:Number = plug[int(plug.length / 2)];

        return (a + b) / 2;
    }

    // Odd length.
    return plug[int(plug.length / 2)];
}


// Tests.
trace(getMedian([2,5,3,4,6,1])); // 3.5
trace(getMedian([2,5,3,4,6])); // 3

顺便说一下,我相当肯定你的代码工作正常,问题是你在这里做了一个字符串连接而不是数字总和:

median = (sortnums[mid1] + sortnums[mid2]) / 2;

意味着你真的将字符串 1.5添加到2并获取21.5而不是3.5

尝试修改您的代码,使其如下所示:

median = (Number(sortnums[mid1]) + Number(sortnums[mid2])) / 2;