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

时间:2013-11-16 15:13:12

标签: 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();
    }
  }
}

但最小值始终为0,为什么会这样?

5 个答案:

答案 0 :(得分:15)

除了您的问题,您还可以使用Enumerable.MinEnumerable.Max等方法;

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

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

答案 1 :(得分:6)

您的问题是,在填充号码之前,您正在初始化minmaxnumbers[0] ,因此它们都被设置为零。对于min(如果您的所有数字都是正数)和max(如果您的所有数字都是负数),这都是错误的。

如果移动块

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());
}

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

for (int i = 1; i < n; i++)
    ....

确保用户n的值大于零!

答案 2 :(得分:2)

您正在将min初始化为0.

尝试以下

int min = Int32.MaxValue;

此外,如果您接受负值作为输入,则应将max初始化为最小整数值。

int max = Int32.MinValue;

答案 3 :(得分:2)

此代码将以非常简单的方式为您提供帮助,而无需添加任何循环和条件

    int[] arr={1,1,2,4,5,1,2,1};
    Array.Sort(arr);
    Console.WriteLine("Min no: "+arr[0]);
    Console.WriteLine("Max no: "+arr[arr.Length-1]);

答案 4 :(得分:0)

onStart()