Рассчитать средние оценки, исключая введенные значения, которые являются самыми низкими и самыми большими - PullRequest
0 голосов
/ 02 апреля 2020

Задача состоит в том, чтобы позволить пользователю вводить значения от 0 до 100. Если пользователь вводит -99, программа должна остановиться. После выхода из программы необходимо вычислить среднее значение. Однако среднее значение должно включать все введенные значения, кроме самого низкого введенного значения (минимального) и наибольшего введенного значения (максимального). Я написал довольно красивый код, но он выдает IndexOutOfRangeException.

Вот этот код:

class Program
{
    static void Main(string[] args)
    {
        DisplayApp();

        Calculate();
    }

    static void DisplayApp()
    {
        Console.WriteLine("Grade Calculator: ");

        Console.WriteLine();
    }

    static double Calculate()
    {
        Console.WriteLine("Enter grades (-99 to exit): ");
        string input = Console.ReadLine();

        int[] array1 = new int[] { };

        int iInput = int.Parse(input);

        int min = 100;
        int max = 0;

        int i = 0;

        int sum = 0;
        double average = 0;

        while(iInput != 99)
        {
            if(iInput < min)
            {
                array1[i] = min;
            }
            else if(iInput > max)
            {
                array1[i] = max;
            }

            sum += iInput - (min + max);

            i++;
        }

        average = (double)sum / i;

        return average;
    }
}

Как вы думаете, что можно улучшить, чтобы программа работала?

1 Ответ

0 голосов
/ 02 апреля 2020

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

static double Calculate()
{
    Console.WriteLine("Enter grades (-99 to exit): ");

    int min = Int32.MaxValue;
    int max = Int32.MinValue;

    int sum = 0;
    int i = 0;

    while (true)
    {
        // TODO: Change to TryParse and handle input errors.
        int iInput = int.Parse(Console.ReadLine());
        if (iInput == -99) break;

        if (iInput > 0 && iInput < 100) {
            if (iInput < min)
            {
                min = iInput;
            }
            if (iInput > max)
            {
                max = iInput;
            }
            sum += iInput;
            i += 1;
        }
    }

    // TODO: Ensure no division by zero
    return (double)(sum - max - min) / (i - 2);
}
...