J'ai deux ArrayLists, chacun contenant des blocs de certaine taille: blockList, eraserList. Les blocs sont des objets avec deux champs: début et fin. J'ai besoin de soustraire un ensemble de blocs de l'autre ensemble de blocs.Problèmes avec ListIterator et l'exception de modification simultanée
Je dois parcourir le eraserList et "effacer" les blocs de la blockList où ils se chevauchent. Ainsi, mon code ressemble à:
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.
...
}
}
}
Je ne comprends pas pourquoi j'obtiens une exception de modification simultanée. Je ne modifie jamais le eraserList. J'essaye de modifier l'objet de bloc qui est assigné dans le "bloc de bloc = it.next();" déclaration. Je modifie également le blockList en supprimant ou en ajoutant des blocs à la liste. Je pensais que l'intérêt de ListIterator était qu'il vous permettait de modifier, d'ajouter ou de soustraire une liste que vous parcourez. La trace d'échec pointe vers l'effaceur de blocs = it.next(); comme la ligne dessinant l'exception, mais je ne sais pas ce que cela me dit. Est-ce que quelqu'un peut m'aider à comprendre ce que je fais mal?
Merci!
Vous modifiez blockList si ... la seule modification que vous êtes autorisé à faire avec un itérateur est l'appel it.remove(), qui supprime l'élément actuel de la liste. Toute action sur la liste entraînera l'exception de modification simultanée. – pents90