2015-11-30 433 views
0

嘗試多次改變for循環條件,當我將零作爲參數傳遞時仍然獲取ArrayIndexOutOfBounds。每隔一個數字都可以正常工作,我試圖通過自動將它設置爲零來解釋爲零,我是否在錯誤地執行該部分?除零之外,所有東西都編譯並運行正常。遍歷For循環,ArrayIndexOutOfBounds

private static int iterativeCalculation(int userEntry) 
    { 

     int iterativeArray[] = new int[userEntry + 1]; 
     iterativeArray[0] = 0; 
     iterativeArray[1] = 1; 

     for (int i = 2; i <= userEntry; i++) 
     { 
      iterativeArray[i] = (3 * iterativeArray[i - 1]) - (2 * iterativeArray[i - 2]); 
      iterativeEfficiencyCounter++; 
     } 
      return iterativeArray[userEntry]; 

    } 

public static void main(String[] args) { 

     System.out.println(iterativeCalculation(0)); 
} 

試圖通過代碼調試我的方式,仍然不明白髮生了什麼問題。將不勝感激任何幫助!謝謝!

+1

你應該在'userEntry'上設置一些邊界條件 –

回答

3

當您通過零作爲參數,userEntry + 1 = 1

但在這裏:

iterativeArray[1] = 1; 

您正在嘗試設置元素的值。請記住,數組的length比其實際大小小1。所以刪除這條線將解決它。或者使用userEntry + 2來改變你的循環。

編輯:

如果你真的想修復第一和第二個元素,然後用這個來代替:

int iterativeArray[] = new int[userEntry + 2]; 
iterativeArray[0] = 0; 
iterativeArray[1] = 1; 

這將創造足夠的基本大小的數組。

記住,length[...]輸入創建陣列有可能比你想實際長度一個。因爲實際數組從0開始計數。

在你的情況中,你將長度設置爲1(最小值)。這將創建一個數組,它只能存儲一個元素;即iterativeArray[0] = //something。以上任何情況都是OutOfBounds

+0

但它不能解決它。由於等式的原因,我必須將用戶輸入0或1作爲基本情況。刪除該行仍然給我一個OutOfBoundsException。這個想法是第一個元素總是爲0,第二個元素總是爲1. – bnr32jason

+0

如果你真的想修復第一個和第二個元素(或者實際上是'zeroth'和'first'),那麼使用int iterativeArray [] = new int [userEntry + 2];'代替。這將創建一個足夠的基本大小的數組。 –

+0

謝謝,那是它。 – bnr32jason

0

您正在設置iterativeArray[1] = 1;,無論數組中是否實際存在2個或更多項目。這將會超出一個因素。

+0

感謝你的迴應。你能詳細說一點嗎?這個想法是,數組中的第一個入口總是爲零,而第二個入口總是由於等式而成爲一個,所以我正在考慮這些。我應該如何更改該代碼? – bnr32jason

+0

輸入爲零時,您將創建一個僅包含一個元素的大小爲1的數組:'iterativeArray [0]'。因此,無論大小如何,您都無法訪問您在函數中執行的'iterativeArray [1]'。 –

0

我想你應該逐步調試器中的代碼,以最好地理解問題所在。如果您單步執行代碼,您將會看到確切發生問題的位置。這是一個基本的技術和工具。