我在一个类中有20个本地参数,我想知道获得所有参数中的最大值和总和的有效方法。提前谢谢!
我的代码就像
public class EntityOfTheQuery{
double value1;
double value2;
...
double value3;
// this is the function I need
public void maxValue(){
}
}
答案 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字段。