结果超出循环条件?

时间:2018-03-17 08:27:44

标签: java

    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

这样的while循环

输出

9.0
9.25
9.4
9.5
9.571428571428571

为什么直到9.571428571428571而不是9.5

2 个答案:

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

Demo

将值添加到平均值的公式取自: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();
}