从数组中查找最小和最大数字,最小值始终为0

ale*_*lex 6 c#

程序首先要求用户输入要存储在数组中的元素数量,然后询问数字.

这是我的代码

    static void Main(string[] args)
    {
        Console.Write("How many numbers do you want to store in array: ");
        int n = Convert.ToInt32(Console.ReadLine());
        int[] numbers = new int[n];
        int min = numbers[0];
        int max = numbers[0];

        for (int i = 0; i < n; i++)
        {
            Console.Write("Enter number {0}:  ", i+1);
            numbers[i] = Convert.ToInt32(Console.ReadLine());
        }

        for (int i = 0; i < n; i++)
        {
            if (min > numbers[i]) min = numbers[i];
            if (max < numbers[i]) max = numbers[i];
        }
        Console.WriteLine("The minimum is: {0}", min);
        Console.WriteLine("The maximum is: {0}", max);
        Console.ReadKey();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但最小值总是0,为什么呢?

Son*_*nül 16

除了你的问题,你可以使用Enumerable.MinEnumerable.Max方法,如;

int[] numbers = new int[]{1, 2, 3 ,4};
Console.WriteLine(numbers.Min()); //1
Console.WriteLine(numbers.Max()); //4
Run Code Online (Sandbox Code Playgroud)

不要忘记添加System.Linq命名空间.

  • 辉煌."嗨,我已经编写了一些代码来计算数组的最小值和最大值,但是它不起作用,我该如何解决呢?" "哦,只需将这两行代码替换为神奇的代码,效率就会降低." (2认同)

Raw*_*ing 6

你的问题是,你初始化minmaxnumbers[0] 之前填充数字,所以他们都得到设置为零.这是错误的min(如果你的所有数字都是正数)和max(如果你的所有数字都是负数).

如果移动块

int min = numbers[0];
int max = numbers[0];
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < n; i++)
{
    Console.Write("Enter number {0}:  ", i+1);
    numbers[i] = Convert.ToInt32(Console.ReadLine());
}
Run Code Online (Sandbox Code Playgroud)

然后minmax都将被初始化为第一输入数,这是好的.实际上,您可以将for循环限制为仅检查后续数字:

for (int i = 1; i < n; i++)
    ....
Run Code Online (Sandbox Code Playgroud)

只需确保用户的值n大于零!