Quand tu supprime une élément, le reste des éléments de ta liste, qui étaient derrière, bougent pour combler le trou. Si tu retire l'élément en position 4 par exemple, l'élément qui étaient en position 5 bouge en 4. Celui qui était en 6 bouge en 5. Etc.
Ta boucle, elle fait 1 2 3 4 5 ... Donc elle suppose que les éléments ne changent pas de place.
Pour parcourir une liste en supprimant des élément, on peut utiliser un iterator, avec ses méthodes next() et remove(). Si tu utilise java 8, tu peux préférer créer une nouvelle liste avec stream().filter() ou tu peux utiliser la méthode removeIf() qui fait déjà le boulot de supprimer les éléments correspondant à un critère. Au passage, si le but est de garder tous les romans, teste que c'est un roman pas que ce n'est ni un DVD ni un CD. Si demain tu ajoute des cassettes tu ve devoir revoir ton code.
listouvr.removeIf(ouvrage -> !(ouvrage instanceof Roman));
Partager