所以,我有一个循环的方法并自动返回这些数字:
6527.6 6755.6 7009.9 7384.7 7775.9 8170.7 8382.6 8598.8 8867.6 9208.2 9531.8 9821.7 10041.6 10007.2 9847.0 10036.3 10263.5 10449.7 10699.7
我想将第一个数字平均为第二个数字,将第二个数字平均为第三个数字,依此类推。我该怎样做才能做到这一点?将所有这些双打添加到数组中?或者有没有办法获得一个运行总计来做到这一点?
我遇到的问题是,我似乎只能获得所有这些双打,或者没有这些双打,而不是特定的双打。
因此输出结果将是(6527.6 + 6755.6)/ 2,(6755.6 + 7009.9)/ 2,等等。只打印它们,没有别的。
编辑:解析器中的代码:http://pastebin.com/V6yvntcP
答案 0 :(得分:1)
您所描述的内容称为移动平均值。 这里有一些正式的解释:
http://en.wikipedia.org/wiki/Moving_average
[...]简单移动平均线(SMA)是前n个数据的未加权平均值[...]
您想计算 n = 2 的移动平均线。
以下是执行此操作的简单代码:
public static void main(String[] args) {
List<Double> list = Arrays.asList(6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7);
for (int i = 1; i < list.size(); i++) {
double avg = (list.get(i) + list.get(i - 1)) / 2;
System.out.println("avg(" + (i - 1) + "," + i + ") = " + avg);
}
}
没有List或数组的第二种方法:
Double prev = null;
// inside loop:
double curr = getMethodResult(...);
if (prev != null) {
double avg = (curr + prev) / 2;
}
prev = curr;
// end of loop
答案 1 :(得分:0)
创建double数组,然后执行一些遍历和交换。看看:
double[] array = { 6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7 };
double avg = 0;
double sum = 0.0;
double temp = 6527.6;
for (int i = 0; i < array.length - 1; i++) {
sum = temp + array[i + 1];
avg = sum / 2;
System.out.println("(" + temp + "+" + array[i + 1] + ")/2" + "= "
+ avg);
temp = avg;
}