Проблема с минимальным элементом массива в windows форме приложения - PullRequest
3 голосов
/ 05 апреля 2020

Я учусь создавать простые. NET приложения. В этом приложении я добавляю числа в массив целых чисел от TextBox и отображаю самое большое и наименьшее число из этого массива в ListBox. Проблема в том, что когда я нахожу минимальное число, используя метод Min, он всегда дает мне 0, однако метод Max работает просто отлично

    public partial class Form1 : Form
    {
        // ...

        int[] array = new int[100];
        int counter = 0;
        private void button1_Click_1(object sender, EventArgs e)
        {
            for (int i = 0; i <= counter; i++)
            {
                array[i] = Convert.ToInt32(txtInsertNumber.Text);
            }
            counter++;
        }

        private void btnShowMinMax_Click_1(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            int max = array.Max();
            int min = array.Min();

            int maxIndex = Array.IndexOf(array, max);
            int minIndex = Array.IndexOf(array, min);

            listBox1.Items.Add(array[maxIndex] + " " + array[minIndex]);
        }
    }

Screen of application interface

Ответы [ 2 ]

3 голосов
/ 05 апреля 2020

Ваш массив int[] array = new int[100]; инициализируется 100 целыми числами со значением по умолчанию, равным 0. Поэтому минимальное значение равно 0.

Решением было бы иметь массив Nullable<int> для дифференцирования "нет значение "null от реальных значений. Пример:

int[] a = new int[50];
Console.WriteLine(a.Min()); // prints "0"

Nullable<int>[] b = new Nullable<int>[100];
Console.WriteLine(b.Min()); // prints ""
0 голосов
/ 05 апреля 2020

Также вы можете использовать List<int> с предопределенным размером.

    static void Main(string[] args)
    {
        var list = new List<int>(10);
        list.Add(1);
        list.Add(2);

        var min = list.Min(); //  will be 1
        var max = list.Max(); // will be 2 
    }
...