Java ArrayList ArrayIndexOutOfBoundsException

标签 java loops for-loop arraylist

我正在制作一个口袋妖怪类型的匹配计算器(水胜火等),我遇到了一个相当奇怪的错误。我正在迭代包含该神奇宝贝的所有弱点的 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;
        }
    }
}

关于Java ArrayList ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061469/

相关文章:

javafx 变量在两个 Controller 之间传输数据(在不同 Controller 中设置和获取数据)- 已更新

Java - 如何使用 for each 循环检查对象列表中某个值的不同出现次数

Java 多线程 |寻找所有的可能性

Javascript暂停循环直到事件发生

java - 从不运行 `if` ,总是 `else`

java - 在java中检查文本中的电子邮件ID

javascript - 在数值循环中附加条件 (JavaScript)

python - 我怎样才能使这个代码片段更漂亮?

c - For循环条件