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 :

Liste chainées - Objet


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Liste chainées - Objet
    Bonjour ,

    Voici une classe ListeTriee , ils ' agit d' une liste chainée , je n' utilise pas la classe LinkedList:

    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
    public class ListeTriee {
        private int element;
        private ListeTriee suivant;
        
        //Constructeur
        public ListeTriee (int premier , ListeTriee reste){
            element = premier;
            suivant = reste;
            
        }
    
    Methode Ajouter un element A la liste 
    public ListeTriee ajoutListeTriee (int val){
            ListeTriee ref = this;
            ListeTriee pred = null;
           
            //Parcours 
            while (ref !=null && ref.element <= val ){
                pred = ref;//avance pred
                ref =ref.suivant;//avance ref 
            }
            
           
           if (pred == null ){
                return new ListeTriee (val , this);
                
                
            }else {
                
                ListeTriee nouvel = new ListeTriee(val, ref);
                pred.modifieReste(nouvel);
                return this;
        }

    Il y a une chose que je ne comprends pas :

    Lorsque j' entre dans la méthode j ' ai ref = this; .Or ici il s 'agit d objet auquel j' applique la méthode , si je modifie ref je modifie également l' objet ??

    Pourtant lorsque j' entre dans le while je modifie bien ref donc this???

    merci

  2. #2
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    quel est ton problème ??
    tu veux modifier this ou pas ??

  3. #3
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    Les objets de type liste doivent être des objets mutables, tu dois donc pouvoir modifier this, sinon cela n'a pas vraiment d'intêret

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    salut ,
    merci de vos réponses rapide .

    Imaginons dans ma main j' ai ceci :

    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
    public class ListechainetestdesMethodes {
        public static void main (String [] args){
     
        System.out.println ("Test des méthode de la classe ListeTriee " + "\n");
     
     
            ListeTriee liste = null ;
     
     
            for (int i=0 ; i<=12; i= i+2){
     
                if (liste == null ){
                    liste = new ListeTriee (i,null);
                }else{
                    liste.ajoutListeTriee(i);
                }
            } 
         }
    }
    Lorsque j' applique la méthode ajoutListetriee pour i = 8 par exemple , dans la méthode ajoutListeTriee , j ' ai bien :



    quand je rentre dans le while , je modifie bien ref donc this et aussi pred qui sont des objets , je modifie bien donc l objet auquel j ' applique la méthode.


    Ref et this pointe vers le meme objet?pourtant j' ai modifié ref donc je modifie this .
    je suis bien conscient que l objet se modifie mais logiquement on ne devrai avoir que la derniere valeur ajouté??

  5. #5
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    public ListeTriee ajoutListeTriee (int val)
    retourne une listeTriee , or toi tu l'appelle comme si elle modifiait directement ton objet.

    essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste = liste.ajoutListeTriee(i);

  6. #6
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    doublon désolé

  7. #7
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    ou simplement renvoie void à ta fonction

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    salut ,
    je l ai testé dans les 2 cas en faisant

    liste = liste.ajoutListeTriee(i);
    ou
    liste.ajoutListeTriee(i);

    Et cela fonctionne aussi .

    Je reprends l' exemple avec 8 , les valeurs précédentes soit 0, 2, 6 ont deja été ajoutés a la ListeTriee liste.

    Donc si je rentre dans la méthode , le but est d' ici ajouter 8 :

    1 ere etape :

    ref = this ; donc pour l instant 0 2 6
    pred = null;


    Deuxieme étape , entrée dans la boucle while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (ref !=null && ref.element <= val ){
                pred = ref;
                ref =ref.suivant;
     }
    1 er tour :

    pred correspond a la liste 0 2 6
    ref correpond a la liste 2 6

    2 eme tour

    pred correspond a la liste 2 6
    ref correspond a la liste 6

    3 e tour

    pred correspond a la liste 6
    ref = null

    Donc sortie de la boucle , voila c ' est la que je comprends pas :

    J ai donc ref = null , or ce sont des variable de type objets donc je les manipule avec leur références , si j ' ai modifié ref j ai modifié l objet courant .Or la ref = null ; logiquement l' objet courant doit etre egal a null .

    Comment fait il pour récupérer les elements 0 2 6

    Excusez moi pour ma maladresse pour me faire comprendre

  9. #9
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    travaille avec this et non pas ref si tu veux modifier this.
    ref = this ne veux pas dire que si tu modifie ref c'est this qui l'est /!\

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    merci jojo31 et tux ,

    Lorsque tu dis :

    ref = this ne veux pas dire que si tu modifie ref c'est this qui l'est /!\

    Pourtant dans cette égalité ref = this

    ref et this pointe vers le meme objet non?

  11. #11
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    salut ,

    oui mais pour moi si je modifie ref , je modifie this , un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void modifieReste (ListeTriee list){
            ListeTriee ref = this;
            ref.suivant = list;
    }
    la j' ai bien modifié ref mais également this , je viens de le tester.

    merci

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Bonjour ,

    alors je n 'avais pas repéré une chose , lorsque je fais :

    Je pointe vers un autre objet.
    Par contre il y a un truc que je ne pige pas trop :

    Methode Ajouter un element A la liste
    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
    public ListeTriee ajoutListeTriee (int val){
            ListeTriee ref = this;
            ListeTriee pred = null;
     
            //Parcours 
            while (ref !=null && ref.element <= val ){
                pred = ref;//avance pred
                ref =ref.suivant;//avance ref 
            }
     
     
           if (pred == null ){
                return new ListeTriee (val , this);
     
     
            }else {
     
                ListeTriee nouvel = new ListeTriee(val, ref);
                pred.modifieReste(nouvel);
                return this;
        }
    Dans le else , lorsque j ajoute un élément je modifie bien pred mais comment se fait il que je retourne this et que l 'objet se retrouve modifié??

    merci de votre précieuse aide

  13. #13
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    tu as fait un appel comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste = liste.ajoutListeTriee(i);
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste.ajoutListeTriee(i);
    ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    salut ,

    j' ai testé les 2 , elles fonctionnent sauf que si j ajoute un élément au depart de la liste.Je suis obligé de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = liste.ajoutListeTriee(i);
    Mais ce que je ne comprends pas c' est pourquoi lorsque je modifie pred ou ref , j' en modifie l' objet courant.Dans le else :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ListeTriee nouvel = new ListeTriee(val, ref);
     pred.modifieReste(nouvel);
     return this;
    merci

Discussions similaires

  1. récupérer un objet dans une liste chainée
    Par marsuwhite dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2006, 14h05
  2. Mal a la tete avec liste chainée d'objet
    Par Raton dans le forum C++
    Réponses: 23
    Dernier message: 03/08/2005, 22h13
  3. Réponses: 2
    Dernier message: 25/05/2005, 17h25
  4. Réponses: 11
    Dernier message: 02/05/2005, 19h30
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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