2017-03-05 62 views
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

012結束

回答

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)); 
     } 
    } 
} 
+0

工作,但我需要它爲用戶輸入的數組工作。 – Lukas

+0

查看更新的答案。這接受由空格分隔的數字列表。 – LppEdd

+0

所以對於這行'final int [] numbers = Arrays.stream(SCANNER.nextLine()。trim().split(「」))。mapToInt(Integer :: parseInt).toArray();'有無論如何改變,所以我不使用數組類?這個任務是針對初學者的Java類的,我們還沒有涉及這個話題。 – Lukas

-1

首先,你在程序中的幾個地方使用了5,我沒有看到任何理由。難道你對用戶輸入的期望會導致你把5放在你真正應該使用的數字上,取決於用戶的輸入嗎?也許你應該使用窗口大小呢?我在這裏猜測一下。

接下來,正如@lppEdd指出的那樣,您沒有從您的輸入中讀取數字 - 只有窗口大小。

接下來,你可以聲明你的尺寸n的陣列,我相信是你的窗口大小,而不是你的數組大小。我相信這個問題的真正解決方案是使用更好,更具說明性的變量名稱。

由於您尚未聲明您嘗試存儲移動平均線的數組avg,因此您的代碼無法編譯。

第五,當你希望你的平均爲double,你需要轉換爲double分割之前(這是一個已經在堆棧溢出產生的許多問題的經典陷阱)。

我希望這可以讓您進一步瞭解幾個步驟。

+1

您看到的第一件事是他正在使用nextInt(),它只返回一個整數值,而不是數組。基本上他會使用一個填充零的數組。 – LppEdd

+0

只是好奇,爲什麼downvote? –

+0

這不是我的=) – LppEdd