2016-06-24 2 views
2

Мне нужно написать простую программу, в которой вы должны ввести имена студентов и их средний класс, а затем распечатать самый высокий средний класс и кому он принадлежит. Здесь есть несколько тем, как определить, появляется ли значение в массиве. Вещь, с которой я борюсь, - это то, что нужно делать, если есть более 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

Используйте перегрузку 'Array.IndexOf()' с аргументом 'StartIndex', чтобы найти несколько индексов: https://msdn.microsoft.com/en-us/ library/3b2fz03t (v = vs.110) .aspx –

+1

Недавний и активный вопрос о SO, который имеет дело с одной и той же проблемой несколькими способами - [SO link] (http://stackoverflow.com/questions/38006865/how-can -i-make-my-procedure-for-find-the-nth-most-often-element-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

Другой способ создает класс, содержащий два свойства (name и average grade), а затем генерировать List и заполнить его в for цикла. Следующим шагом будет order by descending список через average grade и выберите первый элемент N равный. После этого вы можете просто распечатать результат, используя ForEach

Смежные вопросы