我需要一些关于我的computeLowestMonth方法无法正常工作的两个方面的指导,它每次都给我一个0.00美元的价值。我的for循环错了吗?
其次,我需要更好地了解如何找到该特定月份中存储的最低值和最高值然后将其打印出来。
static double computeLowestMonth(double[] monthlySales){
double lowest = 0;
for(int i=1; i < monthlySales.length; i++)
{
if (monthlySales[i] < lowest)
lowest = monthlySales[i];
}
System.out.print("Lowest Sales: \t");
System.out.println(f.format(lowest));
return lowest;
}
static void displaySaleInfo(){
}
public static void main(String[] args){
getSales();
totalSales();
computeHighestMonth(monthlySales);
computeLowestMonth(monthlySales);
computeAverageSales(monthlySales);
}//end main
}//end class
答案 0 :(得分:2)
你从
开始 double lowest = 0;
这意味着在以下循环中,月度销售额将与$ 0.00的值进行比较,这将导致NOTHING低于0.00美元。
你需要从
开始 double lowest = Double.POSITIVE_INFINITY;
它应该有效。 还有一个问题是你在index = 1时开始你的循环,它应该是0,如上面的Benjamin M所述。
答案 1 :(得分:1)
你有几个问题。
你的循环总是跳过第一个元素,因为你的循环应该以索引0
开头,而不是1
(数组&#39;索引从零开始)。
您希望将lowest
变量初始化为大于任何预期值的值,否则,0
的初始值可能最终小于您的所有数组&# 39; s元素。
所以你可以这样做:
static double computeLowestMonth(double[] monthlySales){
double lowest = 1000000; // pick some high enough number.
for(int i=0; i < monthlySales.length; i++)
{
if (monthlySales[i] < lowest)
lowest = monthlySales[i];
}
System.out.print("Lowest Sales: \t");
System.out.println(f.format(lowest));
return lowest;
}
另一个想法是,实际利用你的错误&#34;开始循环索引1
,并将lowest
变量初始化为第一个数组元素。像这样:
static double computeLowestMonth(double[] monthlySales){
double lowest = monthlySales[0];
for(int i=1; i < monthlySales.length; i++)
{
if (monthlySales[i] < lowest)
lowest = monthlySales[i];
}
System.out.print("Lowest Sales: \t");
System.out.println(f.format(lowest));
return lowest;
}
或者,在Java 8中,您可以完全避免循环,只需执行此操作:
Arrays.stream(monthlySales).min().getAsDouble();
答案 2 :(得分:0)
你在computeLowestMonth中遇到的主要问题是你在0处开始最小值,然后期望值更低,除非它们是负数,否则它们将不会成功。虽然这很麻烦,但你可以这样做:
double lowest = Double.MAX_VALUE;
这将以最高值开始,每个较低的值将变为最低值。你还做了一些其他奇怪的事情,比如没有捕获返回值,并将静态引用发送到方法中,但这将解决你的问题,它总是打印0。