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émentation d'une liste chainée


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut Implémentation d'une liste chainée
    bonjour ,

    je reviens vers vous pour un autre blocage (ou de l'incompréhension plutôt)

    Mes Class :
    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
     
    public class FileDAttenteStations {
     
    	ListeStations tete;
    	ListeStations queue;
     
    	public FileDAttenteStations() {
     
    		this.tete = null;
    		this.queue = null;
     
    	}
     
    	public void ajouterEnQueue(Station s) {
     
    		tete=new ListeStations (s,tete);
     
     
    	}
     
    	public Station retirerEnTete() {
     
    		return null;
     
    	}
     
    	public void afficher() {
     
    		if (tete != null)
    			tete.afficher();
    		else
    			System.out.println("File vide.");
     
    	}
     
    	public boolean estVide() {
     
    		return (tete == null);
     
    	}
     
    }
    -------

    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 class TestListeStations {
     
    				public static void main(String[] args) {
     
    			Station a = new Station("Saint-Jacques", "6", null);
    			Station b = new Station("Glacière", "6", null);
     
    			FileDAttenteStations f = new FileDAttenteStations();
     
    			f.ajouterEnQueue(a);
    			f.ajouterEnQueue(b);
     
    			System.out.print("Apres ajout en queue de Saint-Jacques puis Glacière : ");
    			f.afficher();
     
    		}
     
     
     
    }
    ------

    Mon résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Apres ajout en queue de Saint-Jacques puis Glacière :  6 - Glacière 6 - Saint-Jacques
    --------


    Le Problème est que je devrais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Apres ajout en queue de Saint-Jacques puis Glacière :  6 - Saint-Jacques 6 - Glacière

    d'avance merci.

  2. #2
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Salut,

    on peut voir ta classe 'ListeStation' ?

    Tchao!

    Ps : t'aimes bien la ligne 6 toi no ?
    F*ck it ! Do it !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    bien sur ! (un oublie)

    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
     
    public class ListeStations {
     
    	Station station;
    	ListeStations suivant;
     
    	public ListeStations(Station station, ListeStations suivant) {
     
    		//initialisation des champs
    		this.station=station;
    		this.suivant=suivant;
     
    	}
     
    	public void afficher() {
     
     
    		ListeStations suite = this;
    		while (suite != null) {
     
    			System.out.print(" " +suite.station.chaineLigneNom());
    			suite = suite.suivant ;
     
    		}
     
    	}
     
    }


    et voila

  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 : 54
    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
    Salut,

    en fait tu chaines en insérant au début et pas à la fin ( la tête devient le nouvel élément inséré, )

    alors que tu affiches de la tête vers la fin, de suivant en suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void ajouterEnQueue(Station s) {
     
    		tete=new ListeStations (s,tete);
     
     
    	}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ListeStations(Station station, ListeStations suivant) {
     
    		//initialisation des champs
    		this.station=station;
    		this.suivant=suivant;
     
    	}
    dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f.ajouterEnQueue(a);
    f.ajouterEnQueue(b);
    soit le déroulement
    f.ajouterEnQueue(Saint-Jacques);

    donc tete = (this.station=Saint-Jacques,this.suivant=null)

    f.ajouterEnQueue(Glacière);

    tete = (this.station=Glacière,(this.station=Saint-Jacques,this.suivant=null))

    on voit bien que Saint Jacques est bien le suivante de Glacière

    à défaut de déboguer, toujours tenter une exécution avec un papier et un crayon et on voit assez rapidement ce qu'il se passe
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  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 : 54
    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
    Re,

    j'ai déjà abordé le sujet des listes chainées y'a pas très longtemps dans le forum.

    tu y trouveras peut être des infos intéressante

    voici la discussion : Discussion sur les listes chainées
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Merci de tes conseils ;

    j'ai pu débloquer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void ajouterEnQueue(Station s) {
     
    		ListeStations bis = new ListeStations (s,null);
    		if (tete == null){
    			tete = bis;
    		}
    		else
    		{
    			queue.suivant = bis;
    		}
    			queue =bis;
    		}

    Maintenant je dois retirer le début de la liste :

    la aussi je bloque , pourtant ce code me semble bon ... ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    	public Station retirerEnTete() throws Exception {
     
    if (tete==null){
    	throw new Exception("liste vide");
    }
    ListeStations res = tete;
    tete = tete.suivant;
    return res;
    	}

    Mon nouveau main de test est

    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
     
    Station a = new Station("Saint-Jacques", "6", null);
    		Station b = new Station("Glacière", "6", null);
     
    		FileDAttenteStations f = new FileDAttenteStations();
     
    		f.ajouterEnQueue(a);
    		f.ajouterEnQueue(b);
     
    		System.out.print("Apres ajout en queue de Saint-Jacques puis Glacière : ");
    		f.afficher();
     
    		Station r1 = f.retirerEnTete();
     
    		System.out.print("Apres un premier retrait en tete : ");
    		f.afficher();
     
    		if (r1 != null)
    			System.out.println("Station retiree : " + r1.nom);
    		else
    			System.out.println("Erreur, aucune station retiree!");

    Encore merci,

  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 : 54
    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
    dans l'ajout tu modifie queue, et tete pour le premier ajout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void ajouterEnQueue(Station s) {
     
         ListeStations bis = new ListeStations (s,null);
         if (tete == null){
             tete = bis;
         }
         else {
    	 queue.suivant = bis;
         }
         queue=bis;
     
    }
    donc ta methode retirerEnTete doit aussi modifier tete et queue

    sinon tu vas avoir tete==null(donc liste vide), mais queue qui contient le dernier élément ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Station retirerEnTete() throws Exception {
        if (tete==null){
            throw new Exception("liste vide");
        }
        ListeStations res = tete;
        tete = tete.suivant;
            if ( tete==null ) {
             queue=null;
        }
        return res;
    }
    dans ton code principal tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (r1 != null)
        System.out.println("Station retiree : " + r1.nom);
    else
        System.out.println("Erreur, aucune station retiree!")
    or il est impossible que r1 soit null :

    r1 c'est res du return res de retirerEnTete()
    or tu initialises res avec tete
    donc pour que res soit null, tete doit être null
    or si tete est null quand tu appelles cette méthode tu soulèves une exception, donc impossible que cette méthode retourne null.

    tu pourrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Station retirerEnTete() throws Exception {
        ListeStations res=tete;
        if (res!=null){
            tete = res.suivant;
            if ( tete==null ) {
                queue=null;
            }
        }
        return res;
    }


    sinon tu bloques exactement sur quoi ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    j'ai fait le tour des manuels et des sites, la plupart me propose à peux pres la même chose que toi, mais mon compilateur me bloque sur

    return res ;

    qui pour lui est un ListeStation alors qu'il faut renvoyé un Station,

    or apparament nul part il est ecrit qu'il faut le convertir et je suis pas sur que ce soit la solution.

  9. #9
    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 : 54
    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
    ah oui au temps pour moi, j'avais pas fait attention

    il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public Station retirerEnTete() {
        ListeStations res=tete;
        if (res!=null){
            tete = res.suivant;
            if ( tete==null ) {
                queue=null;
            }
            return res.station;
        }
        else {
            return null;
        }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,


    impeccable, merci !

    je laisse le sujet ouvert pour le reste de mon TD , si j'ai d'autre "blocage",
    L'idée étant maintenant de faire un parcourt en largeur,

    il est bien de savoir que l'on peut compté sur des personnes comme toi.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Bonsoir (ou bonjour)

    j'ai fait mes premiers tests sur mon parcour en largueur ,

    mais mon incrémentation sur "compteurVisite" ne se fait pas , j'ai l'impression que ma boucle While ne se fait pas ... une idée ?

    voici la nouvelle Class Réseau

    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
     
    public class Reseau {
     
    	Station[] station;
     
    	public Reseau(Station[] station) {
    		this.station = station;
     
    	}
     
    	public void afficher() {
    		for (int i = 0; i < station.length; i++)
    			station[i].afficher();
     
    	}
     
    	public void parcourir(int i) {
    	// initialisation du reseau
    		for (int k = 0; k < station.length; k++)
    			station[k].ordreDeVisite = 0;
     
    			int compteurVisite = 1;
     
    		FileDAttenteStations file = new FileDAttenteStations();
    		file.ajouterEnQueue(station[i]);
     
    	// parcours en largeur
    	while(!file.estVide())
    		{
    			Station	stationcourante= file.retirerEnTete();
     
    			if(stationcourante.ordreDeVisite==0){
     
    				stationcourante.ordreDeVisite= compteurVisite;
    				compteurVisite++;
     
    				file.ajouterEnQueue(stationcourante);
    			}
     
    			}
     
     
    	}
     
     
    }
    Mon Main de test :

    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
     
    public class TestListeStations {
    	//testexo8
    			public static void main(String[] args) {
     
    				Station[] station = new Station[6];
     
    				station[0] = new Station("Pasteur", "6", null);
    				station[1] = new Station("Montparnasse - Bienvenüe", "6", null);
    				station[2] = new Station("Montparnasse - Bienvenüe", "12", null);
    				station[3] = new Station("Falguière", "12", null);
    				station[4] = new Station("Pasteur", "12", null);
    				station[5] = new Station("Odéon", "10", null);
     
    				station[0].ajouterVoisine(station[1]);
    				station[1].ajouterVoisine(station[0]);
     
    				station[1].ajouterVoisine(station[2]);
    				station[2].ajouterVoisine(station[1]);
     
    				station[2].ajouterVoisine(station[2]);
    				station[3].ajouterVoisine(station[3]);
     
    				station[3].ajouterVoisine(station[4]);
    				station[4].ajouterVoisine(station[3]);
     
    				station[4].ajouterVoisine(station[0]);
    				station[0].ajouterVoisine(station[4]);
     
    				Reseau reseau = new Reseau(station);
     
    				reseau.parcourir(0);
    				reseau.afficher();
     
    			}
    pour le reste des Class , je l'ai ai déja fourni , je n'ai rien modifier


    d'avance merci,

  12. #12
    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 : 54
    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
    Salut,

    je ne comprends pas bien que dois faire la méthode parcourir

    mais analysons au maximum :

    donc pour commencer tu créer un tableau de Station.
    et tu les lies 2 à 2 pour dire qu'elles sont voisines. Pourquoi ne pas utiliser directement la structure de tableau (le lien se fait directement entre 2 stations d'index distant de 1 ( tel que valeur absolue de indexStation1-indexStation2 égale à 1) mais bon admettons

    après tu appelles parcourir(0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void parcourir(int i) {
    	// initialisation du reseau
    		for (int k = 0; k < station.length; k++)
    			station[k].ordreDeVisite = 0;
    			int compteurVisite = 1;
     
    		FileDAttenteStations file = new FileDAttenteStations();
    donc tu créées une liste chainée vide, et tu ajoutés 1 élemént dans cette liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		file.ajouterEnQueue(station[i]);
    ta liste ne contient qu'une seule station

    première itération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	while(!file.estVide())
    c'est le cas (on a 1 élément dedans)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Station	stationcourante= file.retirerEnTete();
    ta liste devient vide, et tu obtiens la station ajoutée avant, donc station[i]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    			if(stationcourante.ordreDeVisite==0){
    c'est le cas, puisqu'on a initialiser ordreDeVisite de toutes les stations avec cette valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				stationcourante.ordreDeVisite= compteurVisite;
    donc station[i].ordreDeVisite vaut 1
    donc compteurVisite vaut 2 (je vois pas donc comment il ne pourrait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				file.ajouterEnQueue(stationcourante);
    tu remets station[i] dans ta liste chainée, qui donc n'est plus vide (elle a 1 élément)

    deuxième itération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	while(!file.estVide())
    c'est le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Station	stationcourante= file.retirerEnTete();
    ta liste redevient vide, et tu obtiens la station ajoutée avant, donc toujours station[i]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    			if(stationcourante.ordreDeVisite==0){
    c'est faux, puisqu'on y a mis 1 lors de l'itération précédente, orderDeVisite vaut donc 1, différent de 0, CQFD
    donc on fait pas le code du if

    donc la liste reste vide à la fin de l'itération

    troisième itération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	while(!file.estVide())
    la liste étant vide, on sort de la boucle et c'est fini

    on obtient donc un tableau de station avec ordreDeVisite à 0, sauf station[i] qui vaut 1

    donc ton parcourir(int i) fait la même chose que cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void parcourir2(int i) {
    for (int k = 0; k < station.length; k++) {
        if ( k== i ) {
            station[k].ordreDeVisite = 1;
        }
        else {
            station[k].ordreDeVisite=0;
        }
    }
    je suppose que c'est pas le but

    mais je peux difficilement savoir ou est le problème, sans savoir qu'est censé faire parcourir(int i)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    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 : 54
    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
    pourquoi tu ne représentes pas chaque ligne par 2 listes chainées (une pour un sens une pour l'autre) (appelons la Ligne plutot que FileDattenteStations)

    Reseau serait une classe qui contiendrait toutes les instances de Ligne

    ensuite si j'avais à faire une méthode parcourir, je ferai une méthode dans Reseau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Station[] parcourir(Station depart, Station arrivee) {
        ...
    }
    mais je ne sais pas si c'est vraiment le but de ta méthode ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Bonsoir ,

    Merci pour tes explications ,

    cela me comfirme bien que ma boucle ne fonctionne pas,

    l'idée n'étant pas de changer public void parcourir ( cela perturberai je pense la suite de de mon TD),

    dont voici l'énoncé pour cette partie :

    Le début de la fonction a déjà été écrit pour vous, et vous devez écrire le coeur du parcours en largeur :

    Tant que la file n'est pas vide (vous pourrez utiliser la fonction estVide() de FileDAttenteStations) ---> cela me semble correct.

    On retire une station de la file, que l'on appelle stationCourante
    Si stationCourante n'a jamais été visitée (i.e. si son ordreDeVisite vaut zéro)
    ---> ok
    On met son ordreDeVisite à la valeur de compteurVisite
    ---> ok
    On incrémente compteurVisite
    ---> ok


    On ajoute en queue de la file d'attente toutes les stations voisines de stationCourante
    ---> je pense que le probleme vient de la...

    d'appés tes explications , j'incrémente la file avec la même station, alors qu'il faut que je rajoute à la fin de ma boucle les stations voisines,

    j'ai bien essayer ceci mais ça ne compile pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file.ajouterEnQueue(stationcourante.voisines);
    voici le résultat attendu :
    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
     
    Station : Pasteur
    Ligne : 6
    Ordre de visite : 1
    Stations voisines : 12 - Pasteur, 6 - Montparnasse - Bienvenüe
    Station : Montparnasse - Bienvenüe
    Ligne : 6
    Ordre de visite : 3
    Stations voisines : 12 - Montparnasse - Bienvenüe, 6 - Pasteur
    Station : Montparnasse - Bienvenüe
    Ligne : 12
    Ordre de visite : 5
    Stations voisines : 12 - Montparnasse - Bienvenüe, 6 - Montparnasse - Bienvenüe
    Station : Falguière
    Ligne : 12
    Ordre de visite : 4
    Stations voisines : 12 - Pasteur, 12 - Falguière
    Station : Pasteur
    Ligne : 12
    Ordre de visite : 2
    Stations voisines : 6 - Pasteur, 12 - Falguière
    Station : Odéon
    Ligne : 10
    Ordre de visite : jamais visite.
    Stations voisines : aucune
    bon tout s'affiche sauf les "ordre de visite" qui sont "jamais visite" sauf pasteur qui est à 1.

    c'est ce que tu as conclu en annalisant mon programme.


    Pour ce qui est de faire 2 listes chainées pour indiqué le sens , c'est une bonne idée, mais je viens de relire l'énoncé du TD et on aborde cela plus tard donc ne grillon pas les étapes .

  15. #15
    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 : 54
    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 bendébutantenprog Voir le message
    Bonsoir ,

    On ajoute en queue de la file d'attente toutes les stations voisines de stationCourante
    ---> je pense que le probleme vient de la...
    donc je suppose que tu as modifié ta ligne 37 en conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file.ajouterEnQueue(stationcourante);
    en quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Station stationVoisine:stationCourante.getStationVoisines()){
    file.ajouterEnQueue(stationVoisine);
    }
    et donc ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    bonsoir,

    j'ai effectivement changer ma ligne 37

    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file.ajouterEnQueue(stationcourante.voisines);
    je retourne encore une fois sur un probleme de compilation entre "file" qui est une liste et "stationcourante.voisines" qui est une station,

    pour rapel la class station :
    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
     
     
     
    public class Station {
     
    	String nom; //nom de la station
    	String ligne; //ligne du métro
    	ListeStations voisines; //station suivante
     
    	int ordreDeVisite; //ordre sur la ligne
     
    	public Station(String nom, String ligne, ListeStations voisines) {
     
    		//initialisation des champs
    		this.nom=nom;
    		this.ligne=ligne;
    		this.voisines=voisines;
    		ordreDeVisite = 0;
    	}
     
    	public String chaineLigneNom() {
     
    	//affichage de la chaine de caractére
    		return ligne+" - "+nom  ;
    	}
     
    	public void afficher() {
     
    		System.out.println("Station : "+nom);
    		System.out.println("Ligne : "+ligne);
    			if (ordreDeVisite == 0) {
    			System.out.println("ordre de visite : jamais visite. ");
    		}
    			else
    			{
    				System.out.println("ordre de visite : "+ ordreDeVisite);
    		}	 
    		if (voisines == null) {
     
    			System.out.println("Stations voisines : aucune ");
    		}
    			else
    			{
    				System.out.print("Stations voisines : " );
    				voisines.afficher();
    				System.out.println(" ");
    		}	
    	}
     
    	public void ajouterVoisine(Station s) {
     
    	 voisines= new ListeStations (s, voisines);
     
     
    		}
    }

  17. #17
    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 : 54
    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
    oui justement

    alors c'est pas exactement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Station stationVoisine:stationCourante.getStationVoisines()){
    file.ajouterEnQueue(stationVoisine);
    }
    mais un truc dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ListeStation stationsvoisines=stationcourant.voisines;
    while(stationsvoisines!=null){
    file.ajouterEnQueue(stationsvosines.station);
    stationsvoisines=stationsvoisines.suivant;
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    je n'ai pas eu de temps hier pour me penché dessus ,

    je vois bien ce qui faut faire et je comprend bien ce que tu m'explique,

    tu veux que je créer un Liste "voisines"
    mais ne dois-je pas prend celle de la class Station?

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 9
    Points
    9
    Par défaut
    bon , j'ai simplement fait



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file.ajouterEnQueue(stationcourante.voisines.station);
    et ça a implémenter la station suivante , le tous c'est que elle sa voisine et la premier station donc arrêt de la boucle. mais c'est un début

  20. #20
    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 : 54
    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
    je n'ai pas dit que tu devais créer une nouvelle liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ListeStation stationsvoisines=stationcourant.voisines;
    while(stationsvoisines!=null){
    file.ajouterEnQueue(stationsvosines.station);
    stationsvoisines=stationsvoisines.suivant;
    }
    c'est bien le voisines (le même que toi) de la classe Station que j’utilise, sauf que je boucle sur toutes la liste voisines pour récupérer toutes les stations.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Implémentation d'une liste chaînée
    Par Yux dans le forum C
    Réponses: 22
    Dernier message: 02/03/2006, 20h31
  2. Réponses: 4
    Dernier message: 25/12/2005, 18h46
  3. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  4. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04
  5. manipulation d'une liste chainé
    Par sorari dans le forum C++
    Réponses: 1
    Dernier message: 16/03/2005, 12h32

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