此问题已经在这里有了答案:
我正在为学校编程一个分类系统,该系统必须将一些人分成两辆车,但是我被卡住了,我不知道如何继续。
[当我删除第二个时,它正在工作。但是我在那里需要它,所以我不知道该怎么办。
我已经尝试过迭代器,但是我在Kotlin中是新手,但是没有用。
for (firstPeople in firstCar){
when {
k.contains(firstPeople.toString()) -> secondCar.add(j)
// println(secondCar)
k.contains(firstPeople.toString()) -> firstCar.add(j)
// println(firstCar)
else -> when {
firstCar.size > secondCar.size -> secondCar.add(j)
firstCar.size < secondCar.size -> firstCar.add(j)
else -> firstCar.add(j)
}
}
}
错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at MainKt.main(Main.kt:65)
at MainKt.main(Main.kt)
非常感谢您的回答。
看起来像您正在使用ArrayList
。并且您正在通过迭代器进行迭代时在其中插入项目:(firstCar.add(j)
。这是its JavaDoc所说的内容:
由此类的
iterator
和listIterator
方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时间对列表进行结构修改,则可以通过迭代器自己的remove
或[C0 ]方法,迭代器将抛出add
。因此,面对并发修改,迭代器会快速干净地失败,而不会在未来的不确定时间内冒任意,不确定的行为的风险。
这意味着您只能使用迭代器方法修改集合,而不能直接修改。
尝试避免列表修改,或使用迭代器的ConcurrentModificationException
方法,或在写集合上使用副本。