2016-06-24 2 views
2

学生名と平均成績を入力して最高平均成績とそれが所属している人を入力しなければならない簡単なプログラムを書く必要があります。 valueが配列に含まれるかどうかを調べる方法については、ここでいくつかのトピックがあります。私が苦労しているのは、最大平均グレードを持つ1人以上の学生がいればどうするかです。だから、C# - 配列に値が何回表示されているかを調べてインデックスを検索します

 Console.WriteLine("Enter the overall count of students."); 


     int stuCount = Convert.ToInt32(Console.ReadLine()); 
     string[] name = new string[stuCount]; 
     double[] avg = new double[stuCount]; 

     for (int i = 0; i < stuCount; i++) 
     { 
      Console.WriteLine("Enter the name of student # {0}.", i + 1); 
      name[i] = Console.ReadLine(); 
      Console.WriteLine("Enter the average grade of {0}.", name[i]); 
      avg[i] = Convert.ToDouble(Console.ReadLine()); 
     } 

     // Finding the max average 
     double maxAvg = avg[0]; 
     for (int i = 1; i < stuCount; i++) 
     { 
      if (avg[i] > maxAvg) 
      { 
       maxAvg = avg[i]; 
      } 
     } 

     // Displaying the max average 
     Console.WriteLine("The highest average grade is {0}.", maxAvg); 

、私は複数のインデックスを見つけることArray.IndexOf()メソッドを使用することができます。ここでは

は、私がこれまで持っている何ですか?

ありがとうございます。

+0

複数のインデックスを見つけるには、 'StartIndex'引数で' Array.IndexOf() 'のオーバーロードを使います:https://msdn.microsoft.com/en-us/ライブラリ/ 3b2fz03t(v = vs.110).aspx –

+1

同じ問題を複数の方法で処理しているSOに関する最新かつ積極的な質問 - [SO link](http://stackoverflow.com/questions/38006865/how-can -i-make-my-procedure-for-the-nth-most-frequent-in-an-arra/38008666#38008666) – pijemcolu

+0

配列またはクラスとリストのみを使用できますか? – Tinwor

答えて

-1

Console.WriteLine("The highest average grade is {0}.", maxAvg); 

Console.WriteLine("The students with this average grade are"); 
     for (int i = 0; i < stuCount; i++) 
     { 
      if (avg[i] == maxAvg) 
      { 
       Console.WriteLine(name[i]); 
      } 
     } 
+0

心配しないでください。それは一日中私に起こります。 –

2

グレードを表現するためにクラスを使用することを検討してください。

class Grade { 
    public String Name {get;set;} 
    public double Average {get;set;} 
} 

あなたのコードはもっと似ています。あなたは最大のものであるどれを参照し、インデックスを使用してスタッドを印刷するために平均化し、配列を再び最高の平均だけでループを見つけた後

Console.WriteLine("Enter the overall count of students."); 

     int stuCount = Convert.ToInt32(Console.ReadLine());   

     List<Grade> allGrades = new List<Grade>(); 

     for (int i = 0; i < stuCount; i++) 
     { 
      Console.WriteLine("Enter the name of student # {0}.", i + 1); 
      var name = Console.ReadLine(); 
      Console.WriteLine("Enter the average grade of {0}.", name[i]); 
      var avg = Convert.ToDouble(Console.ReadLine()); 
      Grade current = new Grade(){ 
       Name = name, 
       Average = avg 
      }; 
      allGrades.Add(current); 
     } 

     // Finding the max average 
     double maxAvg = allGrades.Max(g => g.Average); 
     var highestGrades = allGrades.Where(g => g.Average == maxAvg); 

     Console.WriteLine("The following Student(s) have the highest average grade:"); 
     foreach(var grade in highestGrades){ 
       // Displaying the max average 
       Console.WriteLine("Student: {0}. Grade: {1}.", grade.Name, grade.Average); 
     } 
} 
0

別の方法は、Listを生成し、forサイクルでそれを埋め、次に、二つの特性(nameaverage grade)を含むクラスを作成しています。次のステップはorder by descendingであり、リストはaverage gradeであり、最初のN要素が等しくなるように選択します。その後、単純に結果を出力することができますForEach

関連する問題