This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
                                
                                    (25个答案)
                                
                        
                3年前关闭。
            
        

我正在制作一个神奇宝贝类型对决计算器(水扑火等等),但遇到了一个非常奇怪的错误。我正在遍历包含该口袋妖怪的所有弱点的ArrayList,并将它们与所有抵抗力进行比较,以查看它们是否被抵消。 Here's GitHub上的存储库。 src / main / Pokemon.java的第140行引发了异常。我已经解释了删除某个项目时索引的变化,但是仍然没有运气。这是令人讨厌的循环:

//Check 2x weakness v 2x Resist
eDiff = 0;
rDiff = 0;
for (int e = 0; e < effective.size()-eDiff; e++) {
    for (int r = 0; r < resist.size()-rDiff; r++) {
        if (effective.get(e-eDiff).equals(resist.get(r-rDiff))) {
            effective.remove(e-eDiff);
            resist.remove(r-rDiff);
            eDiff++;
            rDiff++;
        }
    }
}


有什么想法吗?

最佳答案

例如,当rDiff变为1时,您会看到r-rDiff可以为负,并且get会导致错误。

您应该在其中使用eDiffrDiff修改该循环中断。

我认为类似的方法应该起作用:

for (int e = 0; e < effective.size(); e++) {
    for (int r = 0; r < resist.size(); r++) {
        if (effective.get(e).equals(resist.get(r))) {
            effective.remove(e);
            resist.remove(r);
            e--;
            break;
        }
    }
}

10-06 07:11