使用Sentinel值计算平均值

时间:2015-06-11 02:49:26

标签: java

所以我的哨兵值为-1,当我输入该值时,它会让我退出程序。

我遇到的问题是,当我计算平均值并且我不想要它时,包含了值。

发生了什么的例子:( 8+ 5 + 3 + -1 / 4)
我想发生什么:(8 + 5 + 3 / 3)

do {
    grade = Integer.parseInt(JOptionPane.showInputDialog("Enter a grade:"));
    sum = sum + grade;
    count = count + 1;

} while (grade != SENTINEL);
avg = sum/count;

JOptionPane.showMessageDialog(null,String.format("%.1f",avg));

2 个答案:

答案 0 :(得分:1)

您可以稍微改变一下逻辑:

do {
    grade = Integer.parseInt(JOptionPane.showInputDialog("Enter a grade:"));
    if (grade == SENTINEL) {
        break;                  // exit the loop upon hitting the SENTINEL value
    }

    sum = sum + grade;          // only increase the sum for positive values
    count = count + 1;
} while (true);

avg = sum/count;
JOptionPane.showMessageDialog(null,String.format("%.1f",avg));

答案 1 :(得分:0)

解决问题的一种简单方法是在if语句中将输入后的2行包装起来。更恰当的方法是在Tim指示时打破循环,以避免两次执行值比较。

do{....
    if(grade != SENTINEL)
    {
        sum = sum + grade;
        count = count + 1;
    }
}while...