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行引发了异常。我已经解释了删除某个项目时索引的变化,但是仍然没有运气。这是令人讨厌的循环:
有什么想法吗?
(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
会导致错误。
您应该在其中使用eDiff
和rDiff
修改该循环中断。
我认为类似的方法应该起作用:
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