我有一个void方法,它接受一个整数,以便它可以将存储在类对象中的值更新为平均值。这里的自负是,每当我调用此方法时,它必须更新存储在方法中的总和,然后重新平均它。问题是我运行的前两个JUnit测试检查一个和两个调用工作正常,但第三个错误计算。我确信这是因为它只是取第三个值并将其加到之前的平均值而不是总和,但我不确定如何调和它并且完全难以理解。有没有更合适的方法来执行此操作而不是将参数传递给ArrayList?因为我很新,所以我可能会遗漏一些明显的东西。
public void getAverage(int value) {
ArrayList<Integer> valueList = new valueList<Integer>();
valueList.add(value);
int sum = this.mean; //instance variable that must hold average
for (int val : valueList) {
sum += val;
this.mean = sum;
this.numValues++; //instance variable for how many entries
}
sum = this.mean / this.numValues;
this.mean = sum;
}
答案 0 :(得分:2)
这是因为您的valueList
是一个局部变量,并且是在每次方法调用时新创建的,因此它只能保存1个值,哪个是value
,而不是之前的所有方法调用值。
要修复此问题,请将valueList
作为实例变量移至该类。
答案 1 :(得分:0)
您为每个方法调用创建一个新的ArrayList
。放入类中,以便在方法返回时不会被删除。
答案 2 :(得分:0)
将列表移动到应有的位置后,只要在Java 8中使用流添加新值,就可以将平均值设为double:
mean = valueList.stream().mapToInt(Integer::intValue).summaryStatistics().getAverage();