2010-08-05 112 views
1

我不知道爲什麼這會產生一個ArrayOutOfBoundsException!我很可能忽略了一些東西,因爲我很累,但如果有人能告訴我什麼是錯的,我會很感激。謝謝。我不知道我爲什麼會遇到越界異常?

// array declaration 
public int CircleLeft[] = new int[mIPAWidth]; 

// this is my loop that generates the error: 
for(px = 0; px <= mIPAWidth - 1; px++){ 
py =(int) m.sqrt(r^2 - (px-mIPAWidthHalf)^2) + mIPAHeightHalf; 
Log.w(getClass().getName(), "mIPAWidth = " + mIPAWidth + ", index is: " + px); 
CircleLeft[px] = py; } 

回答

2

隨着盧瑟·布利塞特的答案...

你修改之間mIPAWidth當數組被實例化,當你開始for循環?我會改變你的for有條件要上這樣的事情:

for(int px = 0; px < CircleLeft.length; px++) 

你知道px類型這樣,你知道你在引用CircleLeft數組的實際長度。它可能無法解決你的錯誤,但它仍然是一個好主意。

+0

感謝您的輸入。我想我可能指的是一個變量,它的值可以在運行時改變,使得訪問已經預定義的數組中的索引可能會引發異常。我現在就改變它! – ComethTheNerd 2010-08-05 22:03:55

1

px是什麼類型?如果它是雙倍的,那麼你可能會遭受與<=的錯誤比較(與double相比幾乎是不正確的)。改爲使用規範循環for(px = 0; px < mIPAWidth ; px++),或者更好,使循環索引爲整數。

另外,mIPAWidth(出於同樣的原因)的類型是什麼?

+0

+1 ...這是另一個很好的理由爲你的for循環計數器聲明一個新的變量。 – iandisme 2010-08-05 21:42:58

+0

我在這個循環的初始階段使用了一個單獨的'n'變量作爲計數器,但我認爲這個問題可能存在於mIPAwidth中也是動態的,因爲它的值會在表面變化時重置,並且此循環是該方法的一部分, configureGeometry ...所以我想如果在數組已經被初始化的時候mIPAWidth被改變了,它會產生我在這裏遇到的outofbounds異常! – ComethTheNerd 2010-08-05 22:02:52

+0

@GG:這是iandisme提出的,不是嗎?你應該檢查他的答案,然後(你可以改變接受的答案IIRC)。 – 2010-08-05 22:11:24

相關問題