首页 > 解决方案 > java - 如何计算java中前七个值之后的7个最新值的移动平均值?

问题描述

我的问题是如何在前七个值之后使用 ArrayList 计算 7 个最新值的移动平均值?

这是我的前七个值的代码,我不明白的是如何在前七个值之后获得最近 7 个值的平均值,如果有人能帮助我,我将不胜感激。

import java.util.ArrayList;

导入java.io.*;

导入 java.util.Scanner;

公共类移动平均{

public static void main(String[]args) throws FileNotFoundException{
    int sum = 0;
    Scanner s = new Scanner(new File("values.txt"));

    ArrayList<Integer> values = new ArrayList<>();
    ArrayList<Integer> averages = new ArrayList<>();
    
    System.out.println("\tValue"+"\t\tRolling Average");
    System.out.println();
    while(s.hasNext())
    {
        values.add(s.nextInt());
    }
     
    for(int i = 0; i<7;i++)
    {
        sum = sum + values.get(i);
        averages.add(sum/(i+1));

        System.out.println("\t"+values.get(i)+"\t\t"+averages.get(i));
    }
   
}

}

标签: javaarraylistrolling-average

解决方案


如何计算java中前七个值之后的7个最新值的平均值?

这可以保证您有足够的条目。然后它简单地平均适当的子列表,按计算打印出来。

List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
        11, 12, 13, 14);
if (list.size() < 14) {
    System.out.println("Insufficient values provided");
} else {
    int count = 1;
    double sum = 0;
    for (int val : list.subList(7, 14)) {
        sum += val;
        System.out.printf("%d  running average = %.2f%n", val,
                sum / count++);
    }
}

对于这个特定的数据,打印

8  running average = 8.00
9  running average = 8.50
10  running average = 9.00
11  running average = 9.50
12  running average = 10.00
13  running average = 10.50
14  running average = 11.00

推荐阅读