【问题标题】:max and min of array c#数组c#的最大值和最小值
【发布时间】:2017-02-13 00:43:44
【问题描述】:

所以,我将双精度值输入数组,然后创建总和(没有最大值和最小值)、平均值、最大值和最小值。一切正常,但是min永久为0,不知道怎么办;

注意:不要使用 Max()Min() 方法

static void Main(string[] args)
{
    double avr = 0;
    double sum = 0;
    double max;
    double min;
    Console.WriteLine("how many numbers?");
    int b = Convert.ToInt32(Console.ReadLine());
    double[] arr = new double[b];
    max = arr[0];
    min = arr[0];
    for (int i = 0; i < b; i++)
    {
        arr[i] = Convert.ToDouble(Console.ReadLine());
        if (arr[i] >= max)
        {
            max = arr[i];
        }

        else if (arr[i] <= min)
        {
            min = arr[i];
        }
        sum += arr[i];
    }

    sum = sum - max - min;
    avr = sum / (b - 2);

    Console.WriteLine("sum = {0},average = {1}, max = {2}, min = {3}", sum, avr, max, min);
    Console.ReadKey();
}

【问题讨论】:

  • 初始化你所有的双打 = 到0d or 0.0
  • max = double.minvalue; min = double.maxvalue;然后将 else if 转换为简单的 if
  • 是的,让else if (arr[i] &lt;= min) 简单地if (arr[i] &lt;= min)

标签: c# arrays


【解决方案1】:

您使用默认值 double 来初始化 minmax - 因此在任何迭代之前都将设置为 0。所以min 会在所有元素都大于零时工作不正常,max - 当所有元素都小于零时。

修复

  • 使用double.MinValue / double.MaxValue 对应的最小值/最大值,因此任何实际值都将满足if 条件 max = double.MinValue;
  • 比使用 arr[0] 更好地拆分读取数组和计算统计信息实际上将包含有效的用户提供的值而不是默认值。

【讨论】:

  • 你能把你的第二个修复(关于分裂)写得更详细吗?
【解决方案2】:

当您初始化 max 和 min 时,您将其设置为 arr[0],这将是 0。这意味着您的 min 已经准备好以非常低的值。

请使用 double.MinValedouble.MaxValue 来初始化您的 max 和 min 变量。

【讨论】:

    【解决方案3】:

    此代码执行您尝试实现的目标。我删除了数组,因为它没有功能。有两个问题(另见代码中的 cmets): 1)else if 语句:一个值可以同时是最小值和最大值,当输入的数字总是高于前面的数字时,永远不会达到 else。 2) 初始最小值应该是可能的最大值。

    static void Main(string[] args)
    {
        double avr = 0;
        double sum = 0;
        double max = 0;
        double min = Double.MaxValue; // *** Initially set to maximum possible number ***
        Console.WriteLine("How many numbers?");
        int b = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i < b; i++)
        {
            double number = Convert.ToDouble(Console.ReadLine());
            if (number >= max)
            {
                max = number;
            }
            if (number <= min) // *** The else is removed here ***
            {
                min = number;
            }
            sum += number;
        }
    
        sum = sum - max - min; // Exclude lowest and hightest value
        avr = sum / (b - 2); // Average excluding lowest and highest value
    
        Console.WriteLine("sum = {0}, average = {1}, max = {2}, min = {3}", sum, avr, max, min);
        Console.ReadKey();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2016-10-06
      • 1970-01-01
      • 2012-02-11
      • 2017-08-18
      • 2017-06-26
      • 2016-09-10
      • 2011-03-27
      • 2021-07-31
      相关资源
      最近更新 更多