-6

我在下面运行这个java代码,它应该给我34.5的最大值。相反,它是2.0。诡异的!谁能告诉我这段代码有什么问题?谢谢。

public class VarargsDemo {

public static void main(String args[]){
        printMax(34.5, 3, 5, 6, 2);
        printMax(new double[]{1,2,3});
}

public static void printMax(double...numbers){
    if (numbers.length==0){
        System.out.println("No argument passed");
        return;
    }

    double result=numbers[0];
    for (int i=1; i<numbers.length;i++)
        result=numbers[i];
    System.out.println("the max value is "+result);
}

}

输出:

the max value is 2.0
the max value is 3.0
4

3 回答 3

5
for (int i=1; i<numbers.length;i++)
    result=numbers[i];

这使得result数组的最后一个元素,而不是最大的元素......

你可能想要

for (int i=1; i<numbers.length;i++)
    result = Math.max(numbers[i], result);
于 2013-08-08T19:10:32.370 回答
1

您只是从varargs数组的第二个元素迭代到最后一个元素并打印该元素。

省去自己的麻烦,并使用类似的东西:

double lower = 1.0d;
double higher = 2.0d;
System.out.println(Math.max(lower, higher));

...当然要根据您的varargs方法进行调整-我将把它留给您。

于 2013-08-08T19:13:23.590 回答
1

您可以使用org.apache.commons.lang.math.NumberUtilsdouble max(double[] array)的方法。

它返回数组中的最大值。

于 2013-08-08T19:14:47.650 回答