Dépassement de LinkedList via iterator
Bonjour,
Voila, apres avoir appris à utiliser correctement les ListIterator, je suis confronté un une sorte de dépassement de liste, que je n'arrive pas à expliquer...
Voila le morceau de code concerné :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
//methode qui supprime une face de maniere autonome (sans appeller
// les destructeurs des edges et vertex )
public void removeFace(face f)
{
System.out.println("Begin Removeface");
if(f == null) return;
//on récupere les 3 points de la face
vertex[] v = this.getFaceVertices(f);
System.out.println("face composée des vertex : "+v[0].getId()+" "+v[1].getId()+" "+v[2].getId());
if(v == null) return;
//pour chaque vertex
System.out.println("Debut boucle for i");
for(int i=0 ; i<v.length ; i++)
{
LinkedList v_edges = v[i].getEdgeList();
ListIterator it = v_edges.listIterator();
System.out.println("Vertex "+(i+2)+" relié à "+v_edges.size()+" edges");
//pour chaque arrete
System.out.println("boucle : "+v_edges.size()+" tours");
while(it.hasNext())
{
System.out.println("Tour");
edge e= (edge)(it.next());
System.out.println("Pour edge "+e.getId());
//si l'une des faces est vide et l'autre = face courante
if( ((f.equals((e.getFaces())[0])) && ((e.getFaces())[1]== null))
||
((f.equals((e.getFaces())[1])) && ((e.getFaces())[0]== null))
)
{
//on ote e du maillage
this.dest_edge(e);
}
else if (f.equals((e.getFaces())[0]))
{
// on ote f de la liste des faces de e
e.setFaces(null, (e.getFaces())[1]);
}
else if (f.equals((e.getFaces())[1]))
{
//on ote f de la liste des faces de e
e.setFaces(null, (e.getFaces())[0]);
}
System.out.println("fin edge");
}//fin pour chaque arrete
if(v[i].getEdgeList().size() == 0)
{
//on ote le point du maillage
this.dest_vertex(v[i]);
}
}// end for i (vertex)
//on ote la face du maillage
this.faces.remove(f);
}
} |
A l'execution, voila ce que la console contient :
Citation:
Begin Removeface
face composée des vertex : 2 3 4
Debut boucle for i
Vertex 2 relié à 4 edges
boucle : 4 tours
Tour
Pour edge 2
fin edge
Tour
Pour edge 3
fin edge
Tour
Pour edge 4
fin edge
Tour
Pour edge 6
fin edge
Tour
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at maillage.removeFace(maillage.java:313)
at maillage_main.main(maillage_main.java:26)
Si on regarde de plus pres, on prévoit 4 tours de boucle, et on compte 5 fois le mot "Tour"...
Alors heuuu faille ? ou erreur humaine ? car là apres quelques heures là dedans, je commence à n'y plus rien voir.
Merci.