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

avec Java Discussion :

Implémentations de listes doublement chainées [Débutant(e)]


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Implémentations de listes doublement chainées
    Salut à tous!
    J'ai un problème avec les listes chainées. Je me demande pourquoi mon programme ne marche pas. En effet, quand j'ajoute 9 et 10 dans ma liste chainée et quand j'affiche ma liste, la seule valeur qui affichée est 10. J'ai l'impression que mon programme n'établit aucun lien entre 9 et 10.


    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    public class ElementListe{
        int valeur;
       static ElementListe suivant;
       static ElementListe precedent;
     
       public ElementListe(int n){
            suivant=null;
    	precedent=null;
    	valeur=n;
       }
     
     
     
     
      static void  suivant(ElementListe elementSuivant){
    	suivant=elementSuivant;
    	  }
     static void  precedent(ElementListe elementPrecedent){
    	precedent=elementPrecedent;
     }   
     
      ElementListe  suivant(){
     
    	return this.suivant;    
      }
    }
     
     
     
     
     
     
     
     
    class Liste{
       static ElementListe tete;
     
       static ElementListe queue;
     
        Liste( ){
     
    	 tete=null;
        	queue=null;	
         }	
     
     
     
         static boolean estVide(Liste liste){
         liste.tete=null;
         liste.queue=null;
         return true;    
    }
     
     
     static void  ajouterElementListeEnQueue(ElementListe element, Liste liste){
     
    if(estVide(liste)){
     
     tete=element;
          queue=element;
          element.suivant=null;
          }
     
         else{
     
    	 liste.queue.suivant(element);
    	  element.precedent(liste.queue);
    	  queue=element;
     
     
    	 }
          }
     
        static void afficheValeurs(Liste liste){
     
    ElementListe elementCourant=tete;
    	  while(elementCourant!=null){	
    	  System.out.println(elementCourant.valeur);
     
     
    }
     
     }
     
     
    public static void main(String[] args){
    	Liste lst=new Liste();
     
    ElementListe elmt=new ElementListe(9);
    ajouterElementListeEnQueue(elmt,lst);
     
    ElementListe elm=new ElementListe(10);	
    ajouterElementListeEnQueue(elm,lst);
     
    afficheValeurs(lst);
        }
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    C'est parce que tu mets du static. À part pour déclarer la méthode main() tu n'as aucune raison d'utiliser static. Vire-les tous et ne t'en sers plus jamais, jusqu'à ce qu'on t'en parle à nouveau. Oublie static, ne le tape plus jamais, et tout ira bien.

    Des variables static sont partagées par toutes les instances : quand tu crées une nouvelle instance elle n'a pas ses propres variables, elle a les mêmes que toutes les autres. Tu ne peux donc pas stocker des valeurs différentes dans tes différents ElementListe. Solution : virer tous les static, et recommencer à partir de là.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    salut à tous!
    Merci thelvin pour l'aide.J'ai compris ce que le mot static entrainait dans mon code.
    j'ai donc modifié le code.Mais ce problème se pose encore. Il n'y a toujours pas de lien entre l'element de valeur 9 et l'element de valeur 10. Quand je fais dans main() System.out.println(elmt.suivant()) pour que j'ai le suivant de l'element de valeur 9, il m'affiche "null". pareil quand je fais System.out.println(elm.precedent()) pour trouver l'element qui precede l'element de valeur 10.


    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    public class ElementListe{
        int valeur;
       ElementListe suivant;
       ElementListe precedent;
     
       public ElementListe(int n){
            suivant=null;
    	precedent=null;
    	valeur=n;
       }
     
     
     
     
      void  suivant(ElementListe elementSuivant){
    	suivant=elementSuivant;
    	  }
     void  precedent(ElementListe elementPrecedent){
    	precedent=elementPrecedent;
     }   
     
      ElementListe  suivant(){
     
    	return this.suivant;    
      }
    }
     
     
     
     
     
     
     
     
    class Liste{
       ElementListe tete;
     
       ElementListe queue;
     
        Liste( ){
     
    	 tete=null;
        	queue=null;	
         }	
     
     
     
         boolean estVide(){
         tete=null;
         queue=null;
         return true;    
    }
     
     
     void  ajouterElementListeEnQueue(ElementListe element){
     
    if(estVide()){
     
     tete=element;
          queue=element;
          element.suivant=null;
          }
     
         else{
     
    	 queue.suivant(element);
    	  element.precedent(liste.queue);
    	  queue=element;
     
     
    	 }
          }
     
         void afficheValeurs(){
     
    ElementListe elementCourant=tete;
    	  while(elementCourant!=null){	
    	  System.out.println(elementCourant.valeur);
     elementCourant=elementCourant.suivant();
     
    }
     
     }
     
     
    public static void main(String[] args){
    	Liste lst=new Liste();
     
    ElementListe elmt=new ElementListe(9);
    lst.ajouterElementListeEnQueue(elmt);
     
    ElementListe elm=new ElementListe(10);	
    lst.ajouterElementListeEnQueue(elm);
     
    //System.out.println(elm.precedent());
    System.out.println(elmt.suivant()); 
    lst.afficheValeurs();
        }
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    ton problème vient de ta méthode estVide() de Liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    boolean estVide(){
         tete=null;
         queue=null;
         return true;    
    }
    cette méthode est à priori faite pour savoir si la liste est vide et tu modifies dedans ta liste de manière à la vider

    comme chaque fois que tu ajoutes un élément, tu appelles estVide(), à chaque fois que tu ajoutes un élément tu remets ta liste à zéro qui contient finalement jamais autre chose que le dernier élément ajouté

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    sinon la partie ajout en queue lorsque la liste est pas vide est douteuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    queue.suivant(element);
    tu ajoutes à la fin de la queue courante le nouvel élément, ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.precedent(liste.queue);
    la variable liste n'existe pas ko
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.precedent(queue);
    l'ancienne queue devient précédent du nouvel élément, ok
    la nouvelle queue est le nouvel élément ok

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Salut à tous!

    Comme l'a vu Joel Drigo, le problème se situe au niveau de la methode estVide(),


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    boolean estVide(){
    if((tete==null)&&(queue==null))return true;
    else return false;
    }
    ou tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    boolean estVide(){
    if(tete==null) return true;
    else return false;
    }

    Contrairement à Joel, je trouve que la partie queue.suivant(element) est juste. En effet: queue.suivant(element) n'est autre que queue.suivant=element par définition de ta méthode suivant( element).

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Javamar Voir le message
    Salut à tous!


    Contrairement à Joel, je trouve que la partie queue.suivant(element) est juste. En effet:q ueue.suivant(element) n'est autre que queue.suivant=element par définition de ta méthode suivant( element).
    j'ai jamais dit que

    n'était pas juste !? m'enfin, ok chez moi ça veut dire...euh...ok...

    Citation Envoyé par joel.drigo Voir le message
    sinon la partie ajout en queue lorsque la liste est pas vide est douteuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    queue.suivant(element);
    tu ajoutes à la fin de la queue courante le nouvel élément, ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.precedent(liste.queue);
    la variable liste n'existe pas ko

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.precedent(queue);
    l'ancienne queue devient précédent du nouvel élément, ok
    la nouvelle queue est le nouvel élément ok
    j'ai juste analysé chaque ligne de la méthode, et indiqué qu'on faisait référence à une variable liste non existante dans la seconde ligne !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Salut Joel,
    C'est moi qui ai mal lu.Je suis désolé.En te rélisant c'est vrai que tu n'as pas mis en doute le fait d'écrire queue.suivant(element).
    bonne soirée

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Mon programme tourne à présent...
    Merci Joel Drigo d'avoir su détecter ce qui ne marchait pas dans mon programme.
    Merci à Thelvin pour l'utilisation de "static". J'ai compris beaucoup de choses.
    Merci à Javamar pour ta participation.

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

Discussions similaires

  1. liste doublement chainée
    Par Ucom-C++ dans le forum C
    Réponses: 11
    Dernier message: 07/06/2007, 13h34
  2. Réponses: 2
    Dernier message: 24/03/2007, 12h48
  3. Problème sur les listes doublement chainée
    Par Traouspont dans le forum C
    Réponses: 5
    Dernier message: 05/01/2007, 12h02
  4. Pb Liste doublement chainée template
    Par ederf dans le forum Langage
    Réponses: 5
    Dernier message: 19/11/2006, 10h35
  5. Liste doublement chainée
    Par sorry60 dans le forum C
    Réponses: 23
    Dernier message: 03/12/2005, 17h12

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