如何从双数据类型值集中获取最大值?

时间:2014-08-01 11:40:07

标签: java arrays loops double max

我从五个不同的函数中获取五个double数据类型值。没有将这些值添加到数组中,有任何有效的java代码可以从这五个值集中获取最大值。

double d1=r1.function1();
double d2=r1.function2();
double d3=r1.function3();
double d4=r1.function4();
double d5=r1.function5();

double[] d=new  double[5];
for(int i=0:i<5;i++){
    d[i]="d"+i;
}
double x=max(d);

public static double max(double[] t) {
    double maximum = t[0];   // start with the first value
    for (int i=1; i<t.length; i++) {
        if (t[i] > maximum) {
            maximum = t[i];   // new maximum
        }
    }
    return maximum;
}

如果没有这么多努力,有没有有效的方法从上面的双重类型数据集中获取最大值?而且当向循环添加值时,d[i]="d"+i;部分中也会出现一些错误。请为我提供更好的解决方案。

8 个答案:

答案 0 :(得分:3)

您可以使用ArrayList<Double>而不是

    ArrayList<Double> alist=new ArrayList<Double>();
    //Add double values to this list

您可以使用Collections.max(alist)获取最大值,Collections.min(alist)获取最小值。

答案 1 :(得分:1)

您可以使用varargs而不是数组。

public double max(double... values) {
    int max = -Double.MAX_VALUE;
    for(double value : values) {
        if(value > max) {
            max = value;
        }
    }
    return max;
}

然后您将方法称为double max = max(d1, d2, d3, d4, d5);

编辑:

你的行

for(int i=0:i<5;i++){
    d[i]="d"+i;
}

不能正常工作,因为"d"+i会因字符串连接而创建String,并且不会是具有该名称的double变量。 你无法像这样填充你的数组。 你必须这样做:

d[0] = d1;
d[1] = d2;
d[2] = d3;
d[3] = d4;
d[4] = d5;

答案 2 :(得分:1)

Collections.max(Arrays.asList(d));

如果不是将d作为数组而更有效。把它作为列表开始。

答案 3 :(得分:0)

你不必自己把它们放在数组中,让Java使用varargs完成这部分工作:

public static double max(Double... numbers){
    double max = numbers[0];

    for(int i = 0; i < numbers.length; i++){
        if(numbers[i] > max){
            max = numbers[i];
        }
    }

    return max;
}

答案 4 :(得分:0)

您可以将d1,d2,d3,d4,d5添加到TreeSet

Set<Double> set=new TreeSet<>(); // while you adding set will be sorted
// add values to set
List<Double> setAsList=new ArrayList(set); // convert set to list
System.out.println(setAsList.get(setAsList.size()-1)); // last value is the max

答案 5 :(得分:0)

List <Double> d = new ArrayList<>();
 d. add (d1);
d. add (d2);
d. add (d3);
d. add (d4);
d. add (d5);
Double max=Collections. max (d);

答案 6 :(得分:0)

在Java 8中,

java.util.Arrays.parallelSort(d).get(d.size-1)

获取(merge sorted)数组中的最大值。

答案 7 :(得分:0)

在Java 8中:

Arrays.stream(darray).max().getAsDouble()

完整方法(在我们的例子中,如果数组为空则返回零;根据需要更改默认值)。

public static double max(final @Nullable double... values)
{
    return ((values != null) && (values.length > 0)) ? Arrays.stream(values).max().getAsDouble() : 0;
}

可以使用数组或varargs参数调用此方法:

double[] darray = new double[]{43.7, 65.2, 99.1, 87.6};
double max1 = max(darray);
double max2 = max(1.2, 3.4, 5.6);