IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Dépassement de LinkedList via iterator


Sujet :

Collection et Stream Java

  1. #1
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut 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 : 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.

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Bon he bien meme si personne n'a su mé répondre, je pense avoir peut etre trouvé la réponse, dans le sens où je modifiais pendant le parcours de l'itérateur, la liste en question...

    J'ai quand meme mis quelques longues soirées avant de trouver un semblant de réponse à la question...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. iterator via list<Object[]>
    Par Bigoodheart dans le forum Struts 2
    Réponses: 2
    Dernier message: 26/11/2010, 17h56
  2. Probleme d'iterator - LinkedList
    Par Ange_blond dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 27/05/2007, 16h56
  3. [Kylix] PostgreSql via ODBC
    Par doykati dans le forum EDI
    Réponses: 3
    Dernier message: 08/02/2007, 10h10
  4. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo