Сортировка правильных результатов по правильным именам (параллельные массивы) C # - PullRequest
0 голосов
/ 15 мая 2018

как упомянуто выше, я пытаюсь отобразить правильные оценки для правильных пользователей, используя параллельные массивы, где должно отображаться имя учащегося и его оценка, если они получили менее 40.

В настоящее время я сделалэто, но это не присваивает счет правильному имени.

Код:

  static void Main(string[] args)
    {
        //bool YesNo = Console.ReadKey;
        // Empty Variable arrays declared for usage.
        int[] classScores = new int[5];
        string[] studentNames = new string[5];
        object[] ClassANDStudent = new object[5];

        //
        //   if (YesNo == true)
        //Loop Method for user input for student name.
        for (int i = 0; i < studentNames.Length; i++)
        {
            Console.WriteLine("Please enter a Student Name.");
            studentNames[i] = Console.ReadLine();

            Console.WriteLine("Please enter marks.");
            classScores[i] = Convert.ToInt32(Console.ReadLine());

        }
        //


        var Lessthan40Array = classScores.Where(OverallMark => OverallMark <= 40).ToArray();

        Array.Sort(studentNames, classScores, 0, studentNames.Length);
        Array.Sort(studentNames, Lessthan40Array, 0, Lessthan40Array.Length);

        for (int i = 0; i < studentNames.Length; i++)
        {
            ClassANDStudent[i] = studentNames[i] + " " + classScores[i];
        }



        //
       for (int i = 0; i < Lessthan40Array.Length; i++)
        {

            Console.WriteLine(studentNames[i] + " " + Lessthan40Array[i]);
          //  Console.WriteLine(" {0,-10}: {1}", studentNames[i], Lessthan40Array[i]);
        }

        Console.ReadKey();
    }

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Если вы хотите выполнить сортировку перед записью результатов:

static void Main(string[] args)
{
    int[] classScores = new int[]{30,50,25,39,62};
    string[] studentNames = new string[]{"Jim","John","Mary","Peter","Sarah"};
        Array.Sort(classScores, studentNames);   // sort both according to scores
    for (int i = 0; i < classScores.Length; i++)
    {
        if (classScores[i] < 40)
        {
            Console.WriteLine(classScores[i] + " " + studentNames[i]);
        }
    }
}

Если у вас более двух массивов, создайте массив индексов от 0 до длины-1:

static void Main(string[] args)
{
    int[] classScores = new int[]{30,50,25,39,62};
    string[] firstNames = new string[]{"Jim","John","Mary","Peter","Sarah"};
    string[] lastNames = new string[]{"Thorpe","Smith","Jones","Tork","Conner"};
    int[] index = new int[]{0,1,2,3,4};
        Array.Sort(classScores, index);   // sort both according to scores
    for (int i = 0; i < classScores.Length; i++)
    {
        if (classScores[i] < 40)
        {
            Console.WriteLine(classScores[i] + " " +
                firstNames[index[i]] + " " + lastNames[index[i]]);
        }
    }
}
0 голосов
/ 15 мая 2018

Все, что вам действительно нужно сделать, - это просмотреть все ваши оценки и вывести информацию об ученике (из обоих массивов) для любого индекса, где оценка меньше 40. Проблема с вашим кодом выше состоит в том, что, как только вы сортируете один из массивов, они больше не синхронизируются.

Одна из первых вещей, которые я обычно делаю, когда пытаюсь получить числа от пользователя, - это создать вспомогательный метод, который выполнит некоторую проверку (используя int.TryParse), чтобы убедиться, что они действительно вводят целое число. Этот метод принимает строку в качестве приглашения для отображения пользователю и продолжает запрашивать его до тех пор, пока он не введет действительное число:

private static int GetIntFromUser(string prompt)
{
    int input;

    do
    {
        Console.Write(prompt);
    } while (!int.TryParse(Console.ReadLine(), out input));

    return input;
}

С учетом этого, вот пример кода, который предложит пользователю указать, сколько учеников они хотят ввести, а затем соберет имя и оценку для каждого из них в два отдельных массива. Затем он просто использует счетчик для циклического перебора массива результатов и выводит имя студента и оценку для всех, кто набрал менее 40:

private static void Main()
{
    int numStudents = GetIntFromUser("Enter the number of students: ");

    int[] scores = new int[numStudents];
    string[] names = new string[numStudents];

    for (int i = 0; i < numStudents; i++)
    {
        Console.WriteLine("\nStudent #" + (i + 1));
        Console.Write(" - Enter student's name: ");
        names[i] = Console.ReadLine();
        scores[i] = GetIntFromUser(" - Enter student's score: ");
    }

    Console.WriteLine("\nHere are the students who scored less than 40:");

    for (int i = 0; i < numStudents; i++)
    {
        if (scores[i] < 40)
        {
            Console.WriteLine(" - " + names[i] + " scored " + scores[i]);
        }
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}

выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...