2016-06-22 5 views
0

Was ist das Problem, wenn ich versuche, den Durchschnitt der Werte in int-Array zu drucken und es gibt etwas völlig anderes aus so oft wie ich Werte habe.C# berechnen Mittelwert der Werte im Array int

int[] numbers; 
numbers = new int[5]; 
Console.WriteLine("give five integer numbers:"); 
numbers[0] = Int32.Parse(Console.ReadLine()); 
numbers[1] = Int32.Parse(Console.ReadLine()); 
numbers[2] = Int32.Parse(Console.ReadLine()); 
numbers[3] = Int32.Parse(Console.ReadLine()); 
numbers[4] = Int32.Parse(Console.ReadLine()); 
int sum = 0; 

foreach (int x in numbers) { 
    sum += x; 
    int aver = sum/numbers.Length; 
    Console.WriteLine("average: {0}",aver); 
} 
+3

Verwenden LINQ 'numbers.Average()' – Baldrick

+7

Sie muss den Durchschnitt außerhalb von foreach berechnen – GeralexGR

+1

Integer division –

Antwort

2

Durchschnitt außerhalb der Schleife sein sollte:

foreach (int x in numbers) 
{ 
    sum += x; 
} 

int aver = sum/numbers.Length; 
Console.WriteLine("average: {0}",aver); 

Oder mit Linq Erweiterungsmethoden:

Console.WriteLine("average: {0}", numbers.Average()); 
+0

Oh, richtig, es kann nicht in foreach sein. :) – HateB

0

ändern

foreach (int x in numbers) { 
    sum += x; 
    int aver = sum/numbers.Length; Console.WriteLine("average: {0}",aver); 
} 

Um

foreach (int x in numbers) { 
    sum += x; 
} 
int aver = sum/numbers.Length; Console.WriteLine("average: {0}",aver); 
3

Sie könnten die Schleifen als

int sum = 0; 
foreach (int x in numbers) 
{ 
    sum += x; 
} 
int aver = sum/numbers.Length; 

oder einfach tun, um die Berechnung als

int aver = numbers.Average(); 

mithilfe von Linq umformulieren.

2

Oder mit Linq: var aver = numbers.Average();

https://msdn.microsoft.com/en-us/library/bb399409(v=vs.110).aspx

ich mit meiner Antwort vervollständigen würde, was unter Average() die Haube ist so;)

public static double Average(this IEnumerable<int> source) { 
     if (source == null) throw Error.ArgumentNull("source"); 
     long sum = 0; 
     long count = 0; 
     checked { 
      foreach (int v in source) { 
       sum += v; 
       count++; 
      } 
     } 
     if (count > 0) return (double)sum/count; 
     throw Error.NoElements(); 
    } 
+1

"Denke nicht, benutze linq" - ist das wirklich eine Antwort ?. Unter der Haube macht Linq die 'foreach' _for_ you; Es ist nichts falsch daran, Linq zu verwenden, aber ich hoffe, dass das OP auch versucht, das Problem zu verstehen. –