2017-10-11 1 views
-3

Ich bin ein Neuling bei C# und wollte versuchen, dass der Benutzer 3 Zahlen eingeben und den Median dafür bekommen und dann wieder 4 Zahlen eingeben und einen anderen Median dafür bekommen, aber ich weiß nicht, wie man die Zahlen bekommt numerische Ordnung. Leute haben mir gesagt, entweder Arrays oder Variablen zu verwenden, aber nachdem ich etwas über diese gelesen habe, weiß ich immer noch nicht, wie man eine numerische Reihenfolge programmiert. Wenn jemand Tipps hat, würde ich das sehr schätzen. Danke im Voraus.Wie mache ich einen Median von 3 und 4 Zahlen in C#?

+1

Mögliches Duplikat: https://Stackoverflow.com/q/4140719/5779732 –

Antwort

2

Median ein Mittelpunkt der sortiert Sequenz ist:

https://en.wikipedia.org/wiki/Median

int[] array = new int[] { 15, 7, 110, 20}; 

    Array.Sort(array); 

    // 17.5 
    // if we have odd length (3 items) we just return the middle item 
    // in case of even length (4 items) we compute middle as a average of two "middle" items 
    double median = array.Length % 2 == 0 
    ? (array[array.Length/2] + array[array.Length/2 - 1])/2.0 
    : array[array.Length/2]; 

So haben wir

7, 15, 20, 110  - sequence sorted 
(15 + 20)/2 = 17.5 - "middle" item is an average of 15 and 20 

Bei 3 Artikel, sagen { 15, 7, 110 } wir haben

7, 15, 110   - sequence sorted 
15     - middle item 

bearbeiten: Wenn ternäre Operator? : in double median = ... ? ... : ...; sieht zu komplex, kann es in guten alten if ... else (siehe Kommentare) geändert werden

... 

double median; 

if (array.Length % 2 == 0) 
    median = (array[array.Length/2] + array[array.Length/2 - 1])/2.0; 
else 
    median = array[array.Length/2]; 
+0

Sieht korrekt aus, obwohl ich eine detaillierte Erklärung für die letzte Zeile hinzufügen würde Code, selbst als erfahrener Programmierer sieht es überwältigend aus! Da ist eine ganze Menge los, die ein Noob nicht verstehen würde =) –

+1

Obwohl es den Code kürzer macht, würde ich vorschlagen, 'if' /' else' über den Bedingungsoperator '' '' zu verwenden. Es macht den Code klarer zu lesen und zu verstehen, besonders wenn Sie kein erfahrener Programmierer sind. –

+0

@Ian H .: Ich denke, es ist eine Frage des Geschmacks; Ich persönlich bezweifle im 'if' im Kontext:'? : 'operator - * abhängig von geraden/ungeraden Länge Median ist entweder Durchschnitt von zwei Elementen oder einer einzigen * oder' if' - * wenn wir gerade Länge haben, ist median ein Durchschnitt sonst ist der einzelne Artikel *. Ich habe festgestellt, dass beide Konstruktionen ziemlich * lesbar * sind. –

2

Wenn Sie das machen wollen Anzahl der Zahlen dynamisch, können Sie dies tun (verwendet System.Linq):

public static double Median(IEnumerable<int> numbers) 
{ 
    if (numbers == null) throw new ArgumentNullException("numbers"); 

    int[] ordered = numbers.OrderBy(i => i).ToArray(); 

    if (ordered.Length == 0) return double.NaN; 

    if (ordered.Length % 2 == 0) 
    { 
     int half = ordered.Length/2; 
     return (ordered[half] + ordered[half - 1])/2d; 
    } 
    return ordered[ordered.Length/2]; 
} 

Dieser sortiert zunächst das Zahlenfeld mit OrderBy() und nimmt dann das mittlere Element der Sammlung. Im Falle einer geraden Anzahl von Items wird der Durchschnitt der mittleren 2 Items benötigt. Wenn die Auflistung null oder leer ist, gibt die Methode 0 zurück.

+1

Das sieht gut aus, außer dass es nicht berücksichtigt, wenn es eine gerade Anzahl von Zahlen gibt (Durchschnitt der zwei mittleren Zahlen statt nur ein Element zurückgeben). –

+1

Was ist, wenn 'Zahlen'' null' sind oder keine Gegenstände haben? – NotADeveloper

+0

@NotADeveloper Danke, fügte es hinzu. –

Verwandte Themen