首页 文章

使用用户输入数组移动平均线

提问于
浏览
0

我需要编写一个程序,通过用户输入的数组计算移动平均值 . 数组的第一个元素是窗口大小,输入以0结尾 . 输出值在小数点后打印两位数 .

示例输入: 3 2 4 7 7 8 11 12 0

对应输出: 4.33 6.00 7.33 8.67 10.33

(4.33平均为2,4,7和6平均为4,7,7等)

到目前为止,这是我的代码:

package movingaverage;

import java.util.Scanner;

public class MovingAverage {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] arr = new int[n];
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += arr[i];
     }
     avg[0] = sum / 5;

    int j = 1;
    for (int i = 5; i < arr.length; i++) {
        sum = sum + arr[i] - arr[i - 5];
        avg[j++] = sum / 5;
    }

  }

}

我认为我有正确的循环,但我不知道如何让数组在0结束 .

2 回答

  • 1

    这是一种可能的解决方案 .

    public class Test
    {
       private static final Scanner SCANNER;
    
       static {
          SCANNER = new Scanner(System.in);
       }
    
       public static final void main(final String... args) {
          final String[] numbers = SCANNER.nextLine().trim().split(" ");
          final int consideredElements = Integer.parseInt(numbers[0]);
          float sum = 0;
          int value = 0;
    
          for (int i = 1; i < numbers.length; i++) {
             sum = 0;
    
             for (int k = 0; k < consideredElements; k++) {
                value = Integer.parseInt(numbers[i + k]);
    
                if (value == 0) {
                   return;
                }
    
                sum += value;
             }
    
             System.out.println(new BigDecimal(sum / consideredElements).setScale(2, RoundingMode.HALF_EVEN));
          }
       }
    }
    
  • -1

    首先,你在你的程序中的几个地方使用5,我认为没有理由 . 可能是你对用户输入的期望导致你把5放在真正应该使用的数字的位置,取决于用户输入?也许你应该使用窗口大小?我猜这里有点儿 .

    接下来,正如@lppEdd指出的那样,您不是从输入中读取数字 - 只是窗口大小 .

    接下来,您声明了大小为 n 的数组,我认为这是您的窗口大小,而不是您的数组大小 . 我相信这个问题的真正解决方案是使用更好,更解释的变量名称 .

    您的代码无法编译,因为您尚未声明您尝试将移动平均值存储到的数组 avg .

    第五,当你想要你的平均值为 double 时,你需要在分割之前转换为 double (这是一个经典的陷阱,已经在Stack Overflow上产生了很多问题) .

    我希望这会让你更进一步 .

相关问题