2012-04-03 14 views
0

Ich habe eine Array-Nummer und ich möchte den Median berechnen. Wenn das Array ungerade ist, ist die Berechnung in Ordnung, wenn es noch seltsame Zahl ist.Median Berechnung in 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; 
} 

Das Ergebnis ist 21,5, sollte jedoch 3,5

mid1 und MID2 ist eine Position in dem Array sein.

Könnte jemand helfen?

Antwort

3

die Sie interessieren (für tidyness):

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 

By the way, ich bin ziemlich sicher, dass Ihr Code funktioniert gut, das Problem ist, dass Sie dies als eine String-Verkettung tun, anstatt eine Reihe Zusammengefasst hier:

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

Bedeutung Sie buchstäblich Hinzufügen der String1.5 auf 2 und bekommen 21.5 statt 3.5.

Versuchen Sie Ihren Code so zu ändern, es wie so lautet:

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

auf einer kompletten Seite beachten, sollen Sie Ihre String-Werte in numerisch diejenigen sanieren und konvertieren, bevor Sie Ihre Berechnungen durchführen. – joncys

+0

@joncys Yup, das ist natürlich bevorzugt. Meine Anfangsfunktion nimmt ein Array, das bereits Zahlen enthält, um dies zu tun. – Marty

+0

[at] Marty - Dieser Kommentar musste als Kommentar zu OPs Beitrag kommen, nicht als Antwort, mein Fehler. (Wie stellst du Namen mit Leerzeichen überhaupt vor ?!) – joncys