Java 处理IntList.remove()会引发ArrayIndexOutOfBounds:10异常

Java 处理IntList.remove()会引发ArrayIndexOutOfBounds:10异常,java,processing,Java,Processing,我正在尝试制作一个正在处理的小型射击游戏,当我单击鼠标按钮时,我会创建一些沿屏幕移动的子弹,当它们离开屏幕时,它们应该会消失,我使用一个IntList,其中我保留了如下值:(X1,Y1,X2,Y2,…),我的问题是,当我在下面的代码中尝试删除项目符号的索引时,我会随机得到一个ArrayIndexOutOfBounds:10异常,即使在删除之前我检查了IntList的大小。有什么帮助吗 for(i = 1; i < shots.size(); i += 2){ shots

我正在尝试制作一个正在处理的小型射击游戏,当我单击鼠标按钮时,我会创建一些沿屏幕移动的子弹,当它们离开屏幕时,它们应该会消失,我使用一个
IntList
,其中我保留了如下值:
(X1,Y1,X2,Y2,…)
,我的问题是,当我在下面的代码中尝试删除项目符号的索引时,我会随机得到一个
ArrayIndexOutOfBounds:10
异常,即使在删除之前我检查了IntList的大小。有什么帮助吗

    for(i = 1; i < shots.size(); i += 2){
      shots.sub(i, bullet_speed);
      if(shots.get(i) + bullet_height <= border_size){
        shots.remove(i); //Problematic point
        println("Removed Y-pos, array's size: "+shots.size());
        shots.remove(i - 1);
        println("Removed X-pos, array's size: "+shots.size());
        i -= 2;
        continue;
      }
      rect(shots.get(i - 1), shots.get(i), bullet_width, bullet_height);
    }
for(i=1;i
for(i = 1; i < shots.size(); i += 2){
for(i=1;i
致:

(i=0;i{

列表的索引从0开始,而不是1。由于每次增加2,它超出了
i
在for循环和您的
if语句中,因为它只检查值+1,而不检查值+2。

这实际上很有趣,因为我认为IntList是动态的,正如处理文档中所说的ArrayList,如描述下所示,,正如@Eran建议的那样,我移动到ArrayList进行测试,然后在Java文档中,我发现我的初始声明
shots=new IntList();
我认为是可变的,实际上是一个声明,初始容量为10,如前所述,这就是为什么我得到
ArrayIndexOutOfBounds:10
异常,现在我用声明
shots=new IntList(20)解决了这个问题;

shots.sub()做什么?它会改变列表吗?@eran shots.sub()递减bullet的Y位置什么是IntList?它是您创建的类还是某个库类?如果您将其装箱,请包含其代码。@eran据我所知,它是一个处理类。我建议您将调试打印移到引发异常的行之前,然后查看
I
shots.size()
在这一点上。我的救世主!这件事让我疯狂了两天。还有一个问题:你知道10 in
ArrayIndexOutOfBounds:10
代表什么吗?因为我也得到过
ArrayIndexOutOfBounds:-2
一次。很高兴我能帮忙。10代表导致错误的索引。在你的例子中,列表的大小是10,它尝试执行
.remove(10);
(数组和列表使用从0到length-1的索引,因此对于大小为10的列表,它的索引为0到9(包括),10会导致错误。-2还会导致ArrayIndexOutOfBoundsException,因为它也在0到9(包括)(负值将始终导致ArrayIndexOufOfBoundsException,因为索引从0开始)。我不确定这是否能解决问题,因为如果从I=0开始,
shots.remove(I-1)
将在i==0时为您提供ArrayIndexOutOfBoundsException。好的,我以为我解决了问题,但我再次遇到异常…用println()检查了代码,要删除的索引<小于IntList的大小,可能是其他原因吗?有没有办法跳过异常?@Eran我更改了代码以避免出现异常,但问题是另一个,请参阅问题中的“我的编辑”。
for(i = 0; i < shots.size(); i += 2){