我是否使用方法,构造函数和吸气对吗?

时间:2015-11-17 14:03:30

标签: java constructor getter

我有一个计算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方法一样,但是我认为这是不好的做法?

2 个答案:

答案 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();