C#从数组中获取最小值

7

我在获取数组中的最小值时遇到了困难。 每次运行代码时,最小值仍然是零。 我知道索引必须要减一,但是我不知道如何将其应用到代码中。 对于我的英语水平很抱歉,希望你们能帮帮我!

public partial class Form1 : Form
{
    int[] numbers = new int[99];
    int index = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    public int Som()
    {
        //if the numbers are <99 they will be add to index.
        int som = 0;
        for (int i = 0; i < 99; i++)
        {
            som = som + numbers[i];
        }
        return som;
    }
    public int Average()
    {
        // 
        int answersom = Som();
        int g = (answersom / index);
           return g;     
    }
    public int Max()
    {
        int Max = numbers[0];
        foreach (int number in numbers)
        {
            if (number > Max)
            {
                Max = number;
            }
        }
        return Max;
    }
    public int Min()
        {// array gets de value thats on 0
            int Min = numbers[0];
            foreach (int number in numbers)
            {// if the number is smaller then 0.
                if (number < Min)
                {// zero is the new number
                    Min = number;
                }

            }
            return Min;
        }
    private void button1_Click(object sender, EventArgs e)
    {
        //if textbox doesnt contain numbers
        if (textBox1.Text.All(chr => char.IsLetter(chr)))
        {
            //labeltext message 'please only fill in numbers'
            label1.Text = "Vul alleen Cijfers in";
        }
        //else
        else
        {
            //is putting the numbers on the right spot of the array
            numbers[index] = Convert.ToInt32(textBox1.Text);
            //index will add each time.
            index++;
            label4.Text = Convert.ToString(Som());

        }
        //
        int g = Convert.ToInt32(textBox1.Text);
        label5.Text = Convert.ToString(Average());
        {

            label6.Text = Convert.ToString(Min());

            label7.Text = Convert.ToString(Max());

        }
    }
}

}

4个回答

23
您可以轻松地使用 Linq,
使用 System.Linq;
int min = numbers.Min();

1
既然核心框架中已经有了某些东西,为什么要重新发明自己的呢? - Caramiriel
1
@Caramiriel 因为这并没有解决原帖提出的问题。此外,他很可能需要自己实现这些函数来完成计算机科学练习。 - Overv
@Overv 确实。虽然我认为在这种情况下使用 List<int> 并使用 .Min() 会更容易。这只是重新发明已经存在的东西。 - Caramiriel
@Caramiriel 我同意你的观点,但是答案应该包含这个变化。 - Overv
@Caramiriel OP刚才提到他的作业需要使用数组。 - Overv
@Overv 我同意他似乎在寻找一种全面的解决方案,Min是一种捷径,但了解时间和空间复杂度背后发生的事情是必要的。 - undefined

5

问题在于你总是用所有数字中的最小值进行计算,这包括那些你还没有使用按钮添加的数字0。因此,除非你添加了99个数字,否则你的最小值始终返回0。你需要修改你的Min函数如下:

public int Min() {
    int min = numbers[0];

    for (int i = 0; i < index; i++) {
        int number = numbers[i];

        if (number < min) {
            min = number;
        }
    }

    return min;
}

正如您所看到的,该函数现在只计算您添加的数字(索引小于index),而不是numbers数组中的所有数字的最小值。


非常感谢!它终于能够工作了,我真是太开心了T_T。 - sharpee

0

这里的问题在于你的命名规范,你有一个Min变量和一个Min方法。


0
这是一个不可知论的实现,展示了Linq Min在幕后对整数数组的操作。它也是最优化的算法,符合OP的要求。
注意: 时间复杂度:O(n) 辅助空间:O(1),因为没有使用额外的空间。
   public  int Min(int[] numbers)
    {
        int min = numbers[0];
        
        foreach (int num in numbers)
        {
            // if the number (num) is smaller than current iteration (min) then it is the minimum.
            if (num < min)
            { 
                min = num;
            }
        }

        return min;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接