在一个基本的Java程序中,我定义了一个类的两个方法,该方法应该从一组四个双精度值中返回最大和最小数。从for循环中获取value参数,然后将其与站立的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常量。
首先,我将重复您的两种方法:
//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
用>
,它应该工作。
因此,您正在搜索较小的值,如果给定值小于当前已知的最小值,则将其替换。您可以从一开始就以Double.MAX_VALUE
最知名的最小值开始(然后在每个回合中使它变得更好)。类似地,您可以Double.MIN_VALUE
在第一轮中使用最知名的最大值。
一个更小,更紧凑的方法是使用Math.min(double, double)
(和max)。您的方法本身会做一些无用的工作,不需要min = value
在方法内部分配asmin
并value
在离开此方法范围时将其删除。您可以简单地做到这一点:
public double calcMin(double value, double min) {
if (min < value) {
return min;
} else {
return value;
}
}
要找到中的最小值,Set
可以使用Collections.min(Set)
。但是请注意,此方法需要搜索整个集合。首先使用良好的排序算法可能会更好。还要注意,aSet
没有每个定义的顺序,aList
是可排序的。
好吧,我想你明白了。干杯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句