У меня есть два ArrayList, каждый из которых содержит блоки определенного размера: blockList, eraserList. Блоки - это объекты с двумя полями: начало и конец. Мне нужно вычесть один набор блоков из другого набора блоков.
Я должен пройти по списку eraserList и «стереть» блоки из blockList, где они перекрываются. Таким образом, мой код выглядит так:
void eraseBlocks (Arrylist<Blocks> blockList, ArrayList<Blocks> eraserList) {
ListIterator<Blocks> it = blockList.listIterator();
for (Blocks eraser: eraserList) {
while (it.hasNext()) {
Blocks block= it.next();
if ((eraser.start <= block.start) && (eraser.end >= block.end))
blockList.remove(block);
else if ((eraser.start <= block.start) && (eraser.end < block.end)){
block.set(start, eraser.end);
else if () {
...
//more code for where the eraser partially erases the beginning, end, or splits the block
//if statements call the .add(), .set(), and remove() methods on the blockList.
...
}
}
}
Я не понимаю, почему я получаю исключение для одновременной модификации. Я никогда не изменяю eraserList.
Я пытаюсь изменить объект блока, который назначен в «Блок блок = it.next ();» заявление. Я также изменяю blockList, удаляя или добавляя блоки в список. Я думал, что весь смысл ListIterator в том, что он позволяет вам изменять, добавлять или вычитать список, по которому вы проходите.
Трассировка отказов указывает на ластик Blocks = it.next (); как линия, рисующая исключение, но я не знаю, что это говорит мне.
Может кто-нибудь помочь мне понять, что я делаю не так?
Спасибо!