2016-10-04 45 views
1

我正在嘗試編寫一個c#代碼,用於獲取鋸齒陣列的學生成績(每個學生的成績數量可以不同)並計算每個學生的平均成績。這裏是我的代碼:如何將一個數組添加到整數c#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace students_avg 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int n,m,i,j,count=0,avg; 
      Console.WriteLine("please enter the number of students"); 
      n = Convert.ToInt32(Console.ReadLine()); 
      int [][] student = new int [n+1][]; 
      for (i = 1; i <= n; i++) 
      { 
       Console.WriteLine("how many grades does student number " + i + "have?"); 
       m = Convert.ToInt32(Console.ReadLine()); 
       student[i] = new int[m]; 
       Console.WriteLine("please enter student number " + i + "'s grades"); 
       for (j = 1; j <= m; j++) 
       { 
        student[i] =new int[] {Convert.ToInt32(Console.ReadLine())}; 
        count +=Convert.ToInt32(student[i]);    
       } 
       avg = count/m ; 
       Console.WriteLine("the student number " + i + "'s average is " + avg);   
      } 
      Console.ReadKey(); 
     } 
    } 
} 

但我有問題,因爲它不給我適當的平均。那麼,我怎樣才能以正確的方式添加學生的成績呢?

+2

有什麼特別的原因,試圖用手球陣列時,你可以用列表的列表,並得到這一切通過LINQ? – Mark

+0

您在循環外部和循環的每次執行中設置'student [i] = new ...',但不在循環中使用'j'。 'Convert.ToInt32(student [i])'傳遞內部數組作爲對象,我認爲應該拋出一個異常,因爲int []不是'IConvertible'。我認爲你的意思是'學生[i] [j] = Convert.ToInt32(Console.ReadLine()); count + = student [i] [j];'當我們已經知道這個值是一個'int'時,不需要在第二行調用Convert。你可能應該使用'int.Parse()'或甚至更好的'int.TryParse()',這樣你可以處理錯誤的輸入。 – pinkfloydx33

+0

不需要在方法頂部聲明循環變量。它們的範圍應該是循環條件。也給你的其他變量有意義的名字。 –

回答

0

我想用鋸齒陣s是您的任務需求,所以我會堅持OP。如果不是這樣,你可以使用List<List<int>>作爲Mark的建議。

我試着在你的代碼中做最小的改動。

事情是,你是缺少聲明你的數組「鋸齒」的一部分,並試圖增加總計數,你有一點問題。

static void Main(string[] args) 
{ 
    int n, m, i, j, count; 

    Console.WriteLine("please enter the number of students"); 
    n = Convert.ToInt32(Console.ReadLine()); 
    int[][] student = new int[n][]; 
    for (i = 0; i < n; i++) 
    { 
     count = 0; 
     Console.WriteLine("how many grades does student number " + (i+1) + "  have?"); 
     m = Convert.ToInt32(Console.ReadLine()); 
     student[i] = new int[m]; 
     Console.WriteLine("please enter student number " + (i+1) + "'s grades"); 
     for (j = 0; j < m; j++) 
     { 
      student[i][j] = Convert.ToInt32(Console.ReadLine()); 
      count += Convert.ToInt32(student[i][j]); 
     } 
     var avg = count/m; 
     Console.WriteLine("the student number " + i + "'s average is " + avg); 

    } 


    Console.ReadKey(); 
} 
+0

謝謝,真的很有幫助 –

+0

@SaraMolavi不客氣。猜猜我忘了在顯示平均值時添加「+ 1」。你可能需要改變它。爲了學習的目的,我還建議你也看看德米特里的答案,因爲它包括Linq和字符串插值主題。 – uTeisT

+0

您也可以在打印值後將平均值設置爲零 –

0

改變這一行:

int n,m,i,j,count=0,avg; 

到:

int n,m,i,j,count=0; 
double avg; 

這行:

avg = count/m ; 

avg = (double)count/(double)m ; 
count=0; 
0

另外:你要創建一個新的等級排列,每級輸入這裏

student[i] =new int[] {Convert.ToInt32(Console.ReadLine())}; 

這行應該是

student[i][j-1] =Convert.ToInt32(Console.ReadLine()); 

二:

count +=Convert.ToInt32(student[i]); 

應該

count += student[i][j-1]; 
0

修改,現在你的代碼嘗試

static void Main(string[] args) 
    { 
     int n, m, i, j, count = 0, avg; 
     Console.WriteLine("please enter the number of students"); 
     n = Convert.ToInt32(Console.ReadLine()); 
     int[][] student = new int[n + 1][]; 
     for (i = 1; i <= n; i++) 
     { 
      Console.WriteLine("how many grades does student number " + i + "  have?"); 
      m = Convert.ToInt32(Console.ReadLine()); 
      student[i] = new int[m+1]; 
      Console.WriteLine("please enter student number " + i + "'s grades"); 
      for (j = 1; j <= m; j++) 
      { 
       student[i][j] = Convert.ToInt32(Console.ReadLine()); 
       count += Convert.ToInt32(student[i][j]); 
      } 
      avg = count/m; 
      Console.WriteLine("the student number " + i + "'s average is " + avg); 
      avg = 0; 
     } 


     Console.ReadKey(); 
    } 
相關問題