2012-11-30 65 views
2

我正在嘗試做一個家庭作業。我必須使用動態編程來顯示下一個要移動的人是否處於勝利/失敗狀態。我並不需要幫助解決實際問題,我需要幫助來解決索引越界異常問題,這讓我很困惑。我只會在這裏粘貼部分代碼,因爲我只需要查看for循環。我也不希望班上的任何人看到我的所有代碼並複製它。如果您需要更多數據,請告訴我。因此,這裏是代碼:索引超出作業異常

if(primeArray[x] == true){ 
    for(int i = 1; i <= x; i++){ 
     if(primeArray[i]== true){ 
      newRowNumber = x - i; 
     } 
     if(dynaProgram[newRowNumber][columnNumber] < minimum){ 
      minimum = dynaProgram[newRowNumber][columnNumber]; 
     } 
    } 
} 
//COMPOSITE CASE FOR X! 
else{ 
    for(int k = 1; k <= x; k++){ 
     if((primeArray[k] == false)){ 
      newRowNumber = x - k; 
     } 
     if(dynaProgram[newRowNumber][columnNumber] < minimum){ 
      minimum = dynaProgram[newRowNumber][columnNumber]; 
     } 
    } 

出於某種原因,if(primeArray[i] == true運行正常,但我發現索引越界異常的if(primeArray[k] == false。這兩者之間的唯一區別是在for循環中使用變量k over i(for循環相同)我沒有在我的代碼中的任何其他地方使用任何變量。我不知道爲什麼這發生一個而不是另一個。在這兩種情況下,x保持相同的數字。

我也在第二個minimum = dynaProgram[newRowNumber][columnNumber]上得到一個索引超出範圍異常,而第一個沒有遇到錯誤。我知道這可能是一個愚蠢的錯誤,但我無法弄清楚。如果我將'k'for循環更改爲k < xif(primeArray[k] == false一行中的超出範圍外的索引消失,但它不正確。 (然而,第二個minimum = dynaProgram[newRowNumber][columnNumber]上的錯誤並未消失。)

所有此代碼都位於嵌套for循環中,該循環遍歷表中的行和列以填充它們。如果刪除上面的代碼並只是把dynaProgram[rowNumber][columnNumber] = 1我沒有問題,所以我不認爲這是問題。

+3

我建議你,調試代碼並阻止異常 – developer

+0

是的,嘗試在Eclipse下使用Debugger運行代碼。 –

+0

我的第一個猜測是,未顯示的外部循環將x從1到x <= primearray.length,而不是從0到x schippi

回答

0

訪問長度5(例如)

int[] fred = new int[5]; 

的陣列當第一元件將是fred[0],最後將fred[4]

所以做類似時:

if(primeArray[i]== true){ 

確保i小於數組長度。使用等於數組長度的值i將引發異常。

+0

哇,是的。我犯了一個愚蠢的錯誤。所以它第一次不是問題的原因,但是第二次是因爲不同的循環在if ... else語句中。它不檢查if(primeArray [i] = true)是否爲i = x,因爲如果i = x,我是一個合數,所以它運行的是else部分。如果x在素數中,我會在相反的循環中得到一個錯誤。這是一個漫長的一天。剛做了3個小時的練習putman考試。我想我會休息一下,哈哈。謝謝。 – Dan

+0

對不起,你還沒有15的聲望呢。我剛加入,所以我不能評價你的評論。>< – Dan