【问题标题】:How do you find a maximum or minimum double from a set?你如何从一组中找到最大或最小双倍?
【发布时间】:2016-11-14 00:40:35
【问题描述】:

在一个基本的 java 程序中,我定义了一个类的两个方法,它们应该从一组四个双精度数中返回最大和最小数字。 value 参数从 for 循环中获取,然后与常设的 min 或 max 参数进行比较。但是,输出不正确,我似乎无法找出原因;我知道我在某处犯了逻辑错误。

两种方法-

//calculate the minimum 
public double calcMin(double value, double min)
{
    if (min < value)
   {
       min = value;
   }
   return value;
}

//calculate the maximum
public double calcMax(double value, double max)
{
    if (max < value)
    {
        max = value;
    }
    return max;
}

for 循环-

    for (int i = 0; i < fillups.length; i ++)
    {
        distance[i] = fillups[i].calcDistance();
        milesPerGallon[i] = fillups[i].calcMPG(distance[i]);
        cost[i] = fillups[i].calcTotalCost();
        minimum = fillups[i].calcMin(distance[i], minimum);
        maximum = fillups[i].calcMax(distance[i], maximum);
        minMPG = fillups[i].calcMin(milesPerGallon[i], minMPG);
        maxMPG = fillups[i].calcMax(milesPerGallon[i], maxMPG);
        minPrice = fillups[i].calcMin(price[i], minPrice);
        maxPrice = fillups[i].calcMax(price[i], maxPrice);
        fillups[i].printResults(i, day[i], distance[i], cost[i], milesPerGallon[i]);  
    } 

calcMax 方法似乎有效,但 calcMin 无效。也许有一种方法可以使用 Double.MAX_VALUE 和 Double.MIN_VALUE 常量使它们工作。

【问题讨论】:

标签: java set double max min


【解决方案1】:

首先,我将重复您的两种方法:

//calculate the minimum 
public double calcMin(double value, double min)
{
    if (min < value)
   {
       min = value;
   }
   return value;
}

//calculate the maximum
public double calcMax(double value, double max)
{
    if (max < value)
    {
        max = value;
    }
   return max;
}

您是否看到您对calcMin 使用与calcMax 相同的逻辑?将calcMin 中的&lt; 替换为&gt;,它应该可以工作。

因此,您正在搜索较小的值,如果给定值小于比当前已知的最小值,则替换它。 您可以从Double.MAX_VALUE 开始,以获得最知名的minimum(然后您每轮都做得更好)。类似地,您可以在第一轮中使用Double.MIN_VALUE 作为最知名的ma​​ximum

更小、更紧凑的方法是使用Math.min(double, double)(和max)。 你的方法本身做了一些无用的事情,没有必要在方法内部分配min = value,因为minvalue 在离开此方法的范围时被删除。你可以这样做:

public double calcMin(double value, double min) {
    if (min < value) {
        return min;
    } else {
        return value;
    }
}

要查找Set 中的最小值,您可以使用Collections.min(Set)。但请注意,此方法需要搜索整个集合。首先使用一个好的排序算法可能会更好。另请注意,Set 没有每个定义的顺序,List 是可排序的。

嗯,我想你明白了。干杯。

【讨论】:

  • 我不是很精通Java,但是参数不是按值传递的吗?如果是这样,那么更改 min 将没有副作用(即在函数之外)。也就是说calcMin(v, minimum);不会改变minimum,所以这个函数绝对没有效果。当然,calcMax 也是如此。
  • 没错。变量在离开方法范围时被删除。我写这个是为了修正他的方法。但我也写过这个。
  • 我假设calcMincalcMax 的主要目标是在必要时更改最小值和最大值。由于他们不这样做,您可以直接分配value。但minimummaximum 永远不会改变。
  • 你确定这是 op 想要代码做的事情吗,他写道 calcMax 有效。如果这是正确的,他应该将逻辑移到方法之外,并确保变量minmax 是已知的,并在calc 方法之外保留。但据我所知,他通过minimum = ...calcMin(..., minimum); 确保了这一点
  • 不,抱歉,我看错了。那为什么不简单的 Math.min 和 Math.max 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多