在本地参数中查找最大值

时间:2014-05-26 12:18:53

标签: java

我在一个类中有20个本地参数,我想知道获得所有参数中的最大值和总和的有效方法。提前谢谢!

我的代码就像

    public class EntityOfTheQuery{
    double value1;
    double value2;
    ...
    double value3;

    // this is the function I need 
    public void maxValue(){
    }
  }

4 个答案:

答案 0 :(得分:1)

public double maxValue(){
    double[] a = {value1,value2,...,value20};
    List b = Arrays.asList(ArrayUtils.toObject(a));
    return Collections.max(b);
}

你可以做到。

答案 1 :(得分:0)

取一个20号而不是20个不同的vars 的数组。

double[] value = new double[20];
public double maxValue(){
      Arrays.sort(value);
      return value[value.length-1];
    }

答案 2 :(得分:0)

这可以通过反射来完成。以下代码将类的每个属性转换为double并将其与其他属性进行比较。

public class MyClass {
    double value1;
    double value2;
    double value3;

    double getMax() throws IllegalArgumentException, IllegalAccessException {
        double max = Double.MIN_VALUE;

        for (Field field : this.getClass().getDeclaredFields()) {
            if(max < (double)field.get(this)) {
                max = (double)field.getDouble(this);
            }
        }

        return max;
    }
}

注意:您必须确保每个属性都可以转换为double值。

答案 3 :(得分:0)

如果非常频繁地调用maxValue方法,我建议在setter中构建逻辑,即将所有字段定义为private / protected,然后定义变量maxValue。你的setter逻辑看起来像这样。

setValue1(double value1){
    if( getValue1() == maxValue() && value1 < maxValue()){
    //.. Check each of value1 .. 20 for the max Value and Assign if
    }else if(value1 > maxValue()){
    maxValue = value1;
    }
}

即使使用数组也会更有效,因为只有当您设置的值小于当前最大值并且maxValue与当前值相同时,才需要扫描整个数组/字段(使用数组时的另一个优化是存储maxValue的索引,然后仅在减小字段值时扫描整个数组,并且它是当前的maxValue字段。