2014-10-09 76 views
0

所以,我有一個方法是通過循環和自動返回這些數字:對一個方法的多個結果進行平均?

6527.6 6755.6 7009.9 7384.7 7775.9 8170.7 8382.6 8598.8 8867.6 9208.2 9531.8 9821.7 10041.6 10007.2 9847.0 10036.3 10263.5 10449.7 10699.7 

我想第一個數字平均到第二個數,第二至第三個數字,依此類推。我應該怎樣去做這件事?將所有這些雙打添加到數組?或者有什麼辦法可以得到一個跑步總數?

我遇到的問題是,我似乎只能得到全部或全部這些雙打,而不是特定的。

所以輸出結果就是(6527.6 + 6755.6)/ 2,(6755.6 + 7009.9)/ 2等等。只是印刷他們,沒有別的。

編輯:代碼從這裏解析器:http://pastebin.com/V6yvntcP

+0

你是什麼意思的「平均第一個數字到第二個數字」等?你從哪裏得到(計算/數據結構)的數字? – LionC 2014-10-09 10:04:51

+3

向我們展示您嘗試過的代碼。 – 2014-10-09 10:05:18

+0

也創建一個新的文本段落,您準確指出所需的輸出應該是什麼。 – 2014-10-09 10:07:38

回答

1

你所描述被稱爲均線。 一些正規的解釋是在這裏:

http://en.wikipedia.org/wiki/Moving_average

[...]簡單移動平均線(SMA)是前n個數據的加權平均值[...]

你想計算移動平均值n = 2

下面是簡單的代碼,這樣做:

public static void main(String[] args) { 
    List<Double> list = Arrays.asList(6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7); 

    for (int i = 1; i < list.size(); i++) { 
     double avg = (list.get(i) + list.get(i - 1))/2; 
     System.out.println("avg(" + (i - 1) + "," + i + ") = " + avg); 
    } 
} 

其次沒有清單或陣列的方法:

Double prev = null; 

// inside loop: 

double curr = getMethodResult(...); 

if (prev != null) { 
    double avg = (curr + prev)/2; 
} 

prev = curr; 

// end of loop 
+0

第二種解決方案的問題是,我從中獲取數據的方法是不斷吐出數字,所以首先分出6527.6,然後是下一個,然後是下一個。它的一種類似於它一遍又一遍地替換變量。 我會更新我的主要職位與分配數字的解析器方法的代碼 – nextDouble 2014-10-09 10:45:45

0

創建和雙陣列,只是做了一些穿越和交換及其實現。檢查出來:

double[] array = { 6527.6, 6755.6, 7009.9, 7384.7, 7775.9, 8170.7 }; 
     double avg = 0; 
     double sum = 0.0; 
     double temp = 6527.6; 
     for (int i = 0; i < array.length - 1; i++) { 
      sum = temp + array[i + 1]; 
      avg = sum/2; 
      System.out.println("(" + temp + "+" + array[i + 1] + ")/2" + "= " 
        + avg); 
      temp = avg; 

     }