我正在制作一个口袋妖怪类型的匹配计算器(水胜火等),我遇到了一个相当奇怪的错误。我正在迭代包含该神奇宝贝的所有弱点的 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;
}
}
}
关于Java ArrayList ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061469/