2016-06-20 13 views
-2

Ich habe mir vorherige Beiträge angeschaut und keiner hat die Antwort, nach der ich suche. Ich bin neu in C# und versuche, diese kleine Anwendung zum Laufen zu bringen. Ich habe eine Datei namens "hours.txt" mit 30 Zahlen darin und ich möchte die Datei lesen und die durchschnittliche und die höchste Zahl ausgeben, aber ich kann nicht scheinen, es zum Funktionieren zu bringen. Ich habe versucht, das Array zu einer Zeichenfolge zu ändern, aber ich bin nur fest, wie man dies zum Laufen bringt. Jede Hilfe oder Tipps würden sehr geschätzt werden.C# - Zahlen aus einer Textdatei lesen und Durchschnittswerte ausgeben

 int[] hoursArray = new int[30]; 
     StreamReader fileSR = new StreamReader("hours.txt"); 
     int counter = 0;            
     string line = "";    
     line = fileSR.ReadLine();    
     while (line != null) 
     { 
      hoursArray[counter] = line; 
      counter = counter + 1; 
      line = fileSR.ReadLine(); 
     } 
     fileSR.Close();  

     int total = 0; 
     double average = 0; 
     for (int index = 0; index < hoursArray.Length; index++) 
     { 
      total = total + hoursArray[index]; 
     } 
     average = (double)total/hoursArray.Length; 

     int high = hoursArray[0]; 
     for (int index = 1; index < hoursArray.Length; index++) 
     { 
      if (hoursArray[index] > high) 
      { 
       high = hoursArray[index]; 
      } 
     } 
     Console.WriteLine("Highest number is: " + high); 
     Console.WriteLine("The average is: " + average); 
     Console.ReadLine(); 
+0

schlage ich würde auch veröffentlichen, wie die Datei angezeigt wird. Ich nehme an, es ist eine Nummer pro Zeile, wäre das korrekt? Und sind die Zahlen ganzzahlige Werte? –

+0

Wenn Sie dies in einem Debugger durchlaufen, insbesondere wo/wie scheitert es? – David

+0

Blick auf Tommys Antwort. Dies ist wahrscheinlich das einzige Problem, da der Rest des Codes gut aussieht, wenn man ihn anschaut. –

Antwort

2

Dies ist falsch, da Sie einen String in einen int-Platz setzen.

hoursArray[counter] = line; 

Zeichenfolge zunächst nach int deklarieren.

hoursArray[counter] = int.Parse(line); 
+1

Dies ist korrekt, da es [hier] (https://msdn.microsoft.com/en-us/library/system.io.streamreader.readline (v = vs.110) .aspx) der Rückgabetyp zu sehen ist für ReadLine ist ein 'String' –

+0

@stuartd ja, und aufgrund der Tatsache, dass ReadLine eine Zeichenfolge zurückgibt, muss es zu einem Int analysiert werden. Dein Kommentar macht keinen Sinn. –

1

Als alternatives Verfahren, LINQ verwenden, könnte der Code mit dem prägnanten Fassung:

string[] lines = System.IO.File.ReadAllLines("hours.txt"); 
int[] values = lines.Select((l) => int.Parse(l)).ToArray(); 
double average = values.Average(); 
int peak = values.Max(); 
Verwandte Themen