在Java中,使用我设置的计时器,我每秒收到一个数字。什么是获得计时器中所有数字的平均值的好方法。
我不希望平均每秒,我想要一个总平均值,比如10秒。
答案 0 :(得分:1)
我建议使用以下算法,只需要两个变量(标记为粗体):
每次收到新元素时,
这个方法避免迭代你的集合中的所有元素,在大量元素的情况下,我保证你的安全。
public class AvgCalculator {
private double avg = 0.0f;
private int cnt = 0;
/**
* Calculates a new average based on the current one and
* a specified new value. After calling this method avg
* holds the new average value;
*
* @return the new average
*/
public double calcNewAvg(final int newValue) {
return avg = ((avg * cnt) + newValue) / ++cnt;
}
/**
* Resets the average and count to zero
*/
public void resetAvg() {
avg = 0.0f;
cnt = 0;
}
public double getAvg() {
return avg;
}
}
使用方法:
final AvgCalculator avgCalc = new AvgCalculator();
avgCalc.calcNewAvg(1);
avgCalc.calcNewAvg(3);
avgCalc.calcNewAvg(1);
avgCalc.calcNewAvg(3);
System.out.println(avgCalc.getAvg); // should print 2 (1+3+1+3 = 8 8/4 = 2)
avgCalc.resetAvg();
System.out.println(calcNewAvg(5)); // should print 5 (5/1 = 5)
System.out.println(calcNewAvg(15)); // should print 10 (5+15 = 20 20/2 = 10)
输出:
2.0
5.0
10.0
答案 1 :(得分:0)
使用链接列表并在输入时将输入的数字添加到LinkedList中。然后只需使用for循环来获取LinkedList的总和,并将其除以LinkedList.size()