0

我的问题是如何在前七个值之后使用 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));
    }
   
}

}

4

2 回答 2

0

如何计算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
于 2021-06-18T15:37:41.263 回答
0

假设您有N(>=K) 个数字,并且想要计算滚动平均值,那么下面是一个简单的过程:

import java.util.*;
class Main
{
    public static void rollingAverage(ArrayList<Integer> list, int K)
    {
        int sum = 0;
        int avg = 0;
        int N = list.size();
        // This part calculates the average of first (i+1) values
        for (int i=0; i<K; i++)
        {
            sum += list.get(i);
            avg = sum / (i+1);
        }
        // This part calculates the rolling average (average of `K` recent values)
        for (int i=K; i<N; i++)
        {
            sum -= list.get(i-K);   // Subtracting `i-k`th value
            sum += list.get(i);     // Adding current number
            avg = sum / K;
            System.out.println( avg );
        }
    }
    public static void main (String [] arg)
    {
        ArrayList<Integer> list = new ArrayList<>
        (Arrays.asList(10,10,10,10,10,10,10,80,150,220));
        rollingAverage( list , 7 ); // O/P : 20 40 70
    }
}

您可以使用上述方法轻松实现滚动平均程序。随意提出任何疑问。

于 2021-06-18T15:35:16.610 回答