我有一个计算ArrayList平均值的类,我想知道我是否正确设置了它?我仍然是Java的新手,所以我最终想要的是将ArrayList作为参数,并使用以下命令在main方法中返回:
StatCalc stats = new StatCalc(someArrayList);
System.out.printf("Mean of someArrayList is: %.3f\n", stats.getAverage());
这是StatCalc类
public class StatCalc {
//declare inst variables & method
private double average = 0;
private double meanCalc(ArrayList<Double> myList) {
double sum = 0;
if (!myList.isEmpty()) {
for (Double element : myList) {
sum += element;
}
}
return sum / myList.size();
}
//Constructor
public StatCalc(ArrayList<Double> myList) {
double average = meanCalc(myList);
this.average = average;
}
//getter
public double getAverage() {
return average;
}
}
我只是想知道这是它的假设&#39;要在Java中完成,就像之前我在构造函数中使用了meanCalc方法一样,但是我认为这是不好的做法?
答案 0 :(得分:2)
在构造函数中,您将average
声明为构造函数范围。
只需从double
double average = meanCalc(myList);
即可
这将分配您的实例字段,而不是构造函数中具有相同名称的变量。
反过来,getAverage()
方法将在分配后返回实例字段average
,而不是默认值为未分配,即0.0
。
简而言之:
//Constructor
public StatCalc(ArrayList<Double> myList) {
average = meanCalc(myList);
}
最后的注释
如果您提供的功能仅取决于给定的参数,则可以不创建类的实例。
您可以使用静态方法返回double
并将List<Double>
作为参数。
答案 1 :(得分:0)
仅供参考,在java 8+下,您的所有代码只能替换为一行:
List<Double> list = new ArrayList<>();
[...]
OptionalDouble average = list.stream().mapToDouble(Double::doubleValue).average();