double avg = (double)ListUtil.sum(list)/list.size();
k =10;
while (avg <= k - 0.5) {
list.add(k);
avg = (double) ListUtil.sum(list)/list.size();
System.out.println(avg);
}
我有一个像condition is <= 9.5
输出
9.0
9.25
9.4
9.5
9.571428571428571
为什么直到9.571428571428571
而不是9.5
?
答案 0 :(得分:1)
编辑:我们应该检查在列表中添加值是否会使平均值超出所需状态。
double avg = (double)ListUtil.sum(list)/list.size();
double editedAvg = avg;
k = 10;
while (avg <= k - 0.5) {
avg = (double) avg + ((k - avg)/(double)(list.size() + 1));
if(avg <= k - 0.5) {
editedAvg = avg;
list.add(k);
System.out.println(editedAvg);
}
}
System.out.println("Final avg: " + editedAvg);
将值添加到平均值的公式取自:https://math.stackexchange.com/questions/22348/how-to-add-and-subtract-values-from-an-average
此外,您应该考虑使用可能在IDE中使用的调试器 - 它将允许您逐步完成代码并帮助您找出导致错误输出的步骤。 http://www.vogella.com/tutorials/EclipseDebugging/article.html
为了好玩(但无论你是多么好的程序员,仍然是一种有用的调试技术)https://en.wikipedia.org/wiki/Rubber_duck_debugging
感谢 dasblinkenlight 指出上一个答案的问题以及提供演示源代码。
答案 1 :(得分:0)
你循环一次太多了。尝试最后进行计算,以便while
条件直接在它之后。
double avg = (double)ListUtil.sum(list)/list.size();
k = 10;
while (avg <= k - 0.5) {
list.add(k);
System.out.println(avg);
avg = (double) ListUtil.sum(list)/list.size();
}