gpt4 book ai didi

java - 比较列表时出现 Iteration Illegalstate 异常

转载 作者:行者123 更新时间:2023-11-30 07:41:23 25 4
gpt4 key购买 nike

我试图通过使用迭代器在数组列表中获取相似的项目。我一直遇到这个错误:

Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(ArrayList.java:872)
at com.fryslan.updater.wrappers.MethodDataItem.getIntListSimilarities(MethodDataItem.java:97)
at com.fryslan.updater.wrappers.MethodDataItem.matchAbstractNodes(MethodDataItem.java:67)
at com.fryslan.updater.wrappers.MethodDataItem.equals(MethodDataItem.java:182)
at com.fryslan.updater.Updater.<init>(Updater.java:57)
at com.fryslan.updater.Updater.main(Updater.java:99)

我使用的代码是这样的:

 private ArrayList<Integer> getIntListSimilarities(ArrayList<Integer> base, ArrayList<Integer> target) {

ArrayList<Integer> matching = new ArrayList<>();
Iterator baseIterator = base.listIterator();
Iterator targetIterator = target.listIterator();

while (baseIterator.hasNext()) {
while (targetIterator.hasNext()) {

int bv = (int) baseIterator.next();
int tv = (int) targetIterator.next();

if (bv == tv) {
matching.add(bv);
baseIterator.remove();
targetIterator.remove();
baseIterator = base.listIterator();
targetIterator = target.listIterator();
}
}
}

return matching;
}

最佳答案

你的代码有很多问题。例如,如果输入是 [1] 和 [1,2],它将抛出 NoSuchElementException。 :

baseIterator.remove(); // remove the element from ArrayList<Integer> base
...
baseIterator = base.listIterator(); // new Iterator from the base that had its element removed
...
while (targetIterator.hasNext()); // looking at the 2nd Integer in [1,2]
...
int bv = (int) baseIterator.next(); // NoSuchElementException

此外,如果 base,您的代码可能会进入无限循环元素多于 target (在查看 true 的最后一个元素时,第一个循环始终是 false,第二个循环始终是 base)。

在这里,IllegalStateException可能是因为您正在调用 remove在一个空的 ArrayList ,但是我无法重现该问题。


如果你不能用这个提示修复你的代码,我会添加一个解决方案。

提示:将您的两个循环合并为一个循环,评估 2 个条件 hasNext同时在一个while循环。

关于java - 比较列表时出现 Iteration Illegalstate 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56089265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com