2013-10-28 50 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