2016-11-16 6 views
0

У меня есть входной файл, где у меня есть первичные баллы и дополнительные баллы. Мне нужно найти среднее значение первичных баллов.Среднее число из входного файла

Я могу прочитать первичный и вторичный баллы и добавить их в Списки. Но, вычисляя среднее значение, я получаю сообщение об ошибке на строке s1.Average (PrimaryScore);

Я использую классы program.cs и регрессии .cs. Спасибо за любую помощь.

class Program 
{ 
    static Regression s1; 
    static void Main(string[] args) 
    { 
     int numRecords = 0; 
     List<double> PrimaryScore = new List<double>(); 
     List<double> SecondaryScore = new List<double>(); 
     FileStream fs = null; 
     Console.Write("Enter the file path: "); 

     while (fs == null) 
     { 
      string fileName = Console.ReadLine(); 
      fs = OpenFileForRead(fileName); 
     } 

     StreamReader sr = new StreamReader(fs); 
     ReadFirstValueAsInt(sr, ref numRecords); 
     sr.ReadLine();  
     for (int i = 1; i <= numRecords; i++) 
     { 
      ReadRecordAsDoubleList(sr, PrimaryScore); 
      ReadRecordAsDoubleList(sr, SecondaryScore); 

      Console.WriteLine("Primary Data set {0}: ", i); 
      foreach (double d in PrimaryScore) 
       Console.Write(d + " "); 

      Console.WriteLine(); 
      Console.ReadLine(); 
      PrimaryScore.Clear(); 
      sr.ReadLine(); 
      Console.WriteLine("Secondary Data set {0}: ", i); 
      foreach (double d in SecondaryScore) 
       Console.Write(d + " "); 

      Console.WriteLine(); 
      Console.ReadLine(); 
      SecondaryScore.Clear(); 
     } 
     s1 = new Regression(); 
     s1.Average(PrimaryScore); //getting an error here 
    } 

    public static FileStream OpenFileForRead(string fileName) 
    { 
     try 
     { 
      return new FileStream(fileName, FileMode.Open, FileAccess.Read); 
     } 
     catch (Exception e) 
     { 
      Console.Write("Problem opening file {0}, please enter a valid path: ", fileName); 
     } 

     return null; 
    } 

    public static void ReadFirstValueAsInt(StreamReader sr, ref int numRecords) 
    { 
     try 
     { 
      numRecords = Int32.Parse(sr.ReadLine()); 

     } 
     catch (Exception e) 
     { 
      Console.Write(e.Message); 
     } 
    } 

    public static void ReadRecordAsDoubleList(StreamReader sr, List<double> cr) 
    { 
     try 
     { 
      string[] doubles = sr.ReadLine().Split(new char[] { ' ' }); 

      foreach (string s in doubles) 
       cr.Add(Double.Parse(s)); 

     } 
     catch (Exception e) 
     { 
      Console.Write(e.Message); 
     } 
    } 
} 

Регрессионный класса, который вызывается из программы класса

class Regression 
{ 

    public static double Average(List<double> PrimaryScore) 
    { 
     int sum = 0; 

     foreach (int element in PrimaryScore) 
      sum += element; 

     return (double)sum/PrimaryScore.Count; 
    } 
} 
+1

«Я получаю сообщение об ошибке на линии» --- ошибка компиляции или исключение времени выполнения? –

+1

Что такое сообщение об ошибке –

+1

В качестве примечания стороны: вы должны закрыть 'Stream' после их использования или обернуть их в 'использование'. – Jim

ответ

0

Average объявлен как статический метод, так что вы eithr вызвать его, используя Regression.Average(PrimaryScore) или удалить модификатор static из определения метода так вы можете продолжать звонить, используя s1.Average(PrimaryScore).

, такие как ваш метод Defintion становится так:

public static double Average(List PrimaryScore) 
{ 
    . 
    . 
    . 
+0

Работал как шарм. Как отобразить среднее значение? –

+0

@ KinjalMaruShah отображает среднее значение, как при печати на консольном окне? 'Console.WrtieLine (s1.Average (PrimaryScore))'? –