2016-05-05 8 views
0

Also schreibe ich eine Methode, in der sie den Median eines n-nummerierten Arrays findet. Wenn das Array eine ungerade Anzahl von Elementen hat, funktioniert es gut, aber wenn das Array eine gerade Anzahl von Elementen hat, möchte ich, dass das Programm die höhere der 2 mittleren Zahlen und nicht die untere der 2 ausgibt. Im aktuellen Moment Mein Code gibt die niedrigere Nummer aus. Dies ist der Code:Median-Methode, die einen höheren Wert zurückgibt Median

public Long getMedian() { 

    long median = 0; 

    Arrays.sort(elements); 

    if (length % 2 != 0) { 
     median = elements[length/2]; 
    } if (length % 2 == 0) { 
     median = ((elements[length/2]) + (elements[(length/2) - 1]))/2; 
     median++; 
    } 

    return median; 
} 

Zum Beispiel, wenn das Array mit Zahlen [30 41 45 50] eingegeben wurde, wäre der Median 45, nicht 41. Bitte helfen Sie!

Antwort

2

Überraschenderweise ist es am einfachsten Lösung:

+0

Wow, das ist unglaublich, dass so ein einfacher Ansatz übersehen werden könnte! Vielen Dank! –

0

in Ihrem Code vermute ich, dass die Variable length nicht elements.length ist.

Wie dem auch sei, verwende ich diese Funktion Median:

public static double median(int[] values) { 
    Arrays.sort(values); 

    if (values.length == 0) 
     return 0; 
    else if (values.length % 2 == 0) 
     return ((double)values[values.length/2] + (double)values[values.length/2 - 1])/2; 
    else 
     return (double)values[values.length/2]; 
} 
+2

die zweite, wenn zurückkehren sollte das Maximum, nicht der Durchschnitt – assylias

+1

@assylias warum? Wenn das Array eine gerade Anzahl von Elementen hat, ist der Median der Durchschnitt zweier Zentralen: https://en.wikipedia.org/wiki/Median#Easy_explanation_of_the_sample_median – Exceptyon

+0

Ich stimme zu, aber das ist nicht das, was gefragt wird. – assylias

0
public double findmedian(int[] arr) { 
    int middlevalue = arr.length/2; 
    if (arr.length%2 == 1) { 
     return arr[middle]; 
    } else { 
     return (arr[middle-1] + arr[middle])/2.0; 
    } 
} 

Ich denke, seine besten einen doppelten Wert zurückzukehren, wenn meadian zu finden. Vielleicht wird dieser Ansatz Ihnen helfen.

median = elements[(length/2)] 

für den selbst-Fall

0

Sie können den rechten Rand des Median wie dies erreichen

public Long getMedian() { 
    Arrays.sort(elements); 

    return elements[elements.length/2]; 
} 
+0

Für '[30 41 45 50]' gibt es 50, wie 4/2 + 1 = 3 (Arrays in Java sind Null basiert) – kan

+0

Sicher, sorry. Ich habe Post – Supahupe

Verwandte Themen