2016-05-15 90 views
0

對不起,如果問題很混亂,我是編程新手,我不知道如何制定它,甚至谷歌也不明白我的次數。如何總結給定元素左側的N個數組元素?

我想解決某種Fibonnaci序列,但不是總結最後2個數字,它應該總結最後的N個數字。

public double[] sequenceSum(double[] sequence) { 
//some fancy method here 
} 

其中sequence.length實際上是你應該總結的數字。 所以如果電話是: seqeunceSum(1,2,3,4);

...序列應該繼續{1,2,3,4,10,18,35,67 ...}。

如果調用是: seqeunceSum(1,0,1,0,1); ...序列應該繼續{1,0,1,0,1,3,5,10,19,38 ....}。

的順序也有其侷限性,當然,否則這將會是無限的,但我只需要與幫助如何總結數組元素的N多,向左

非常感謝,

編輯:

謝謝,我把幾個觀點在這裏和我解決它。

是的,序列有限制,抱歉沒有包括在參數中,我在以前的建議判斷問最小和具體問題。

這裏是我的代碼:

public double[] sequenceSum(double[] sequence, int n) { 
     double[] xArray = Arrays.copyOf(sequence, n); 
     for(int i = sequence.length; i<n; i++){ 
     double sum = 0; 
     for (int j=(i-sequence.length); j < i; j++) { 
      sum += xArray[j]; 
      } 
     xArray[i] = sum; 
     } 
     return xArray; 
    } 
} 

謝謝大家,

+3

你嘗試過什麼嗎?這看起來不僅僅是可行的。 'array.length'和遞歸應該可以幫到你。 –

+0

我總共有2個月的Java經驗,Java是我的第一語言:) 我已經搜索過這些庫,但現在它太複雜了。很多方法我不明白 – Kokolo

+0

我會看到什麼遞歸馬上做。謝謝。實際上,我想自己解決它,我只想知道在API中看什麼 – Kokolo

回答

1

最好的做法是保持,可以在自己的/獨立的功能可以重複使用相同的功能,所以你可以使用這個任何地方其他你的程序。 (此外,它使你的代碼更結構化和可讀性)

所以添加的功能,以您的代碼:

public double sumAll(double[] numbers) { 
    double result = 0; 
    for(int i = 0 ; i < numbers.length; i++){ 
     result += numbers[i]; 
    } 

    return result; 
} 

而且比你可以調用它像你sequenceSum函數中:

double sum = sumAll(sequence); 
// Your code to create the next sequence elements... 

另一個提示:如果您只是將此函數用於Fibbonaci序列並且類似的整數問題使用數據類型int,因爲浮點數(在本例中爲double)將浮點「噪聲」相加。 (你可以找到關於這個問題的信息here

+0

謝謝,這與答案非常接近,它讓我很高興。 – Kokolo

+0

我設置了錯誤的返回類型... :-) –

1

首先,你應該總結整數,而不是雙打。如有必要,您可以將整數轉換爲雙精度。

其次,您需要包含停止條件。我建議全長。這將使方法簽名:

public int[] sequenceSum(int[] sequence, int length) 

而不是給你的代碼,我只是給你你需要編寫的代碼的步驟:

  1. 創建長度長的INT輸出數組。

  2. 獲取序列長度。

  3. 將序列數組複製到輸出數組。

  4. 將索引0到索引序列長度-1的序列值相加,然後將總和加到輸出數組中。

  5. 重複步驟4,在開始索引中加1並在結束索引中加1,直到輸出數組已滿。