我如何获得移动平均线?

时间:2015-11-18 04:17:33

标签: java

我希望从一系列数字中获得5天移动平均线。

  

一组数字:11,12,13,14,15,16,17

     

5日均线的第一天:(11 + 12 + 13 + 14 + 15)/ 5 = 13

     

5日均线第二天:(12 + 13 + 14 + 15 + 16)/ 5 = 14

     

5日均线的第三天:(13 + 14 + 15 + 16 + 17)/ 5 = 15

{{1}}

能够获得第一个平均值,但是如何实现循环以获得下一组平均值会丢失?

2 个答案:

答案 0 :(得分:1)

请参阅以下测试代码(来自@ajb的方法更优雅,但为了简单起见,我使用了@zapl中的想法):

public static void main(String[] args) {
    int[] arry = { 11, 12, 13, 14, 15, 16, 17 };
    int size = 5;

    for (int i = 0; i + size <= arry.length ; i++)

        int sum = 0;
        for (int j = i; j < i + size; j++) {
            sum += arry[j];
            System.out.println(sum);
        }

        System.out.println();
        int average = sum / 5;
        System.out.println("Sum: " + sum);
        System.out.println("Average: " + average);
    }
}

答案 1 :(得分:0)

公共类MovingAvarage {

public static void main(String[] args) {
    double[] array = {1.2, 3.4, 4.5, 4.5, 4.5};

    double St = 0D;
    for(int i=0; i<array.length; i++) {
        St = movingAvarage(St, array[i]);
    }
    System.out.println(St);

}

private static double movingAvarage(double St, double Yt) {
    double alpha = 0.01, oneMinusAlpha = 0.99;
    if(St <= 0D) {
        St = Yt;
    } else {
        St = alpha*Yt + oneMinusAlpha*St;
    }
    return St;
}

}