2013-10-28 69 views
0

對於某些背景信息,我製作了一個商店系統,而收集的硬幣存儲在一個數組中,然後在購買商品時將其移除。當錯誤指出長度較長時,ArrayList會引發錯誤

問題是,即使硬幣的數量大於價格(即80個硬幣,但僅從ArrayList中減去75),也會拋出此錯誤。

java.lang.ArrayIndexOfBoundsException: length=202; index=-1; 

代碼迴路讓我很難(我有幾個人是這樣,問題似乎總是隻有幾個硬幣離開時):

if(this.name.equals("SHOTGUN BURST") && gamescreen.map.getCoinSize() >= this.price) { 
player.isShotty = true; 
for(int f = 0; f < this.price; f++) { 
     gamescreen.map.coinsCollect.remove(gamescreen.map.getCoinSize() - 1 - f); 
    } 
} 
+0

'gamescreen.map.getCoinSize() - 1 - f'的計算結果爲'-1'。你不能有負指數。 –

+0

如果f = 0? -1是因爲數組以0開頭,所以最大數字不是數組的實際大小。而f是指向我想要刪除的索引(從最後一個開始)。 – A13X

+0

你確定你的getCoinSize()返回正確的值嗎?例如,如果有硬幣收集'(0,1,2,3)',大小必須是4. – Christian

回答

0

數組索引-1(stacktrace說你試圖訪問什麼)總是出界。

進行調試,臨時更改您的代碼如下:

for(int f = 0; f < this.price; f++) { 
    System.out.println("f = %d", f); 
    System.out.println("getCoinSize() = %d", gamescreen.map.getCoinSize()); 
    System.out.println("Array Index = %d", (gamescreen.map.getCoinSize()-1-f); 
    gamescreen.map.coinsCollect.remove(gamescreen.map.getCoinSize()-1-f); 
} 

不要說「由於某種原因,X發生的情況」。使用某種調試方法。輸出語句的替代方法是使用斷點並逐行執行程序。

+1

這是他的問題的答案? – Christian

+0

無論什麼原因,從我原來的硬幣大小減去1是給我一個輸出倒數兩個(即,我有155個硬幣,154 - 1,154 - 2 ... ...以某種方式給我153,151,149 ... )。 – A13X

+0

我明白了。由於我還不能回答我自己的問題,所以我會說它基本上是存儲我的初始硬幣數量,所以for循環沒有考慮到我在搜索indeces時已經刪除的硬幣。但基本上,「一個-1的數組索引總是出界」! – A13X