【发布时间】:2011-10-28 03:01:38
【问题描述】:
我试图在 SharedPreference 中保持运行平均值。这是我的代码:
//Get the number of captures
int numberOfCaptures = prefs.getInt(CaptureActivity.NUMBER_OF_CAPTURES, 0);
numberOfCaptures++;
//Calculate the average of all of the captures
int runningAverage = prefs.getInt(CaptureActivity.AVERAGE_BLAST_SCORE, 0);
System.out.println("Running Average: " + runningAverage);
int averageBlastScore = (runningAverage + result.getBlastScore())/numberOfCaptures;
System.out.println("Blast Score: " + result.getBlastScore());
System.out.println("Number of Captures: " + numberOfCaptures);
System.out.println("Average Blast Score: " + averageBlastScore);
//Save it, so we can get it again if the user captures another swing
prefs.edit().putInt(CaptureActivity.AVERAGE_BLAST_SCORE, averageBlastScore).commit();
prefs.edit().putInt(CaptureActivity.NUMBER_OF_CAPTURES, numberOfCaptures).commit();
我的运行平均值似乎没有正确添加。
这里是 3 次运行:
10-28 02:53:13.690: I/System.out(1162): Running Average: 0
10-28 02:53:13.690: I/System.out(1162): Blast Score: 96
10-28 02:53:13.690: I/System.out(1162): Number of Captures: 1
10-28 02:53:13.690: I/System.out(1162): Average Blast Score: 96
10-28 02:53:25.550: I/System.out(1162): Running Average: 96
10-28 02:53:25.550: I/System.out(1162): Blast Score: 99
10-28 02:53:25.550: I/System.out(1162): Number of Captures: 2
10-28 02:53:25.550: I/System.out(1162): Average Blast Score: 97
10-28 02:54:04.720: I/System.out(1162): Running Average: 97
10-28 02:54:04.720: I/System.out(1162): Blast Score: 100
10-28 02:54:04.720: I/System.out(1162): Number of Captures: 3
10-28 02:54:04.720: I/System.out(1162): Average Blast Score: 65
到第三轮我应该有:
Running Average: 295
Average Blast Score: 98.3
我不确定自己做错了什么。
【问题讨论】:
-
从数学上讲,运行平均值是什么意思?如果你想要一个移动平均线,那么你需要保留最后的
N数据点,这样你就可以将它们相加并除以N。如果你想要一个指数移动平均线,你可以做你现在正在做的事情,但是除以k,衰减因子。 -
我只想取平均值。我想我可能使用了错误的术语。随着我的应用程序继续运行,我想取数据点的平均值。
-
那么你需要保留最后 N 个值,而不仅仅是之前的平均值。
-
@SheehanAlam 存储分数总和而不是 avg,并在显示之前通过将分数总和除以捕获次数计算 avg
标签: java android math sharedpreferences average