2016-06-20 12 views
-2

私は以前の投稿を見ていて、私が探している答えはありません。 私はC#を初めて使い、この小さなアプリケーションを動作させようとしています。 "hours.txt"という名前のファイルが30個入っていて、そのファイルを読み込んでAverageとHighest Numberを出力したいのですが、動作させることができません。私は文字列に配列を変更しようとしましたが、私は実際にこれを動作させる方法に固執しています。どんな助けやヒントも高く評価されます。C# - テキストファイルから数値を読み込んで平均を出力する

 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

私はまた、ファイルの表示方法を掲示することをお勧め。私はそれが1行に1つの数字だと仮定しています、それは正しいでしょうか?数値は整数値ですか? –

+0

これをデバッガで実行すると、特にどこで失敗するのですか? – David

+0

トミーの答えを見てください。これはコードの残りの部分が見た目に見えるように見えるため、おそらく唯一の問題です。 –

答えて

2

文字列をint型の場所に配置するので、これは間違っています。

hoursArray[counter] = line; 

最初にintを解析する。別の方法として、

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

これは正しいです。[こちら](https://msdn.microsoft.com/en-us/library/system.io.streamreader.readline(v = vs.110).aspx)戻り値の型ReadLineが 'String' –

+0

@stuartdはいであり、ReadLineが文字列を返すという事実のために、それはIntに解析されなければなりません。あなたのコメントは意味をなさない。 –

1

、LINQを使用して、コードがより簡潔に置き換えることができます:

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(); 
関連する問題