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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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.