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

API standards et tierces Java Discussion :

ArrayList -> méthode contains() (pour algo de Dijsktra)


Sujet :

API standards et tierces Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut ArrayList -> méthode contains() (pour algo de Dijsktra)
    Bonjour,

    J'ai un problème avec Dijkstra (calculer le plus court chemin sur un réseau de transport). Ça fait 2 jours que j'essaie de l'implanter mais ça ne marche jamais.

    Ici j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		for(Station st : reseau){
    			pasVu.add(st);
    		}
    		for(Station st : pasVu){
    			System.out.println("   ->€ "+st.getNom());
    		}
    Le programme m'écrit bien en partie :
    ->€ Barbès - Rochechouart
    ->€ Gare du Nord
    ->€ Château d'Eau
    Mais après un peu plus loin dans la fonction j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	for(Station st2 : voisins){
    		System.out.println("  ? "+st2.getNom());
    		if(pasVu.contains(st2)){
    			//st2.distParcouru=st.getMinPoids(st2);
    			//pasVu.remove(st2);
    			//vu.add(st2);
    			System.out.println("     -> "+st2.getNom());
    		}
    et il me répond :
    Château d'Eau ## encore 87
    ? Gare du Nord
    ? Gare de l'Est (Verdun)
    -> Gare de l'Est (Verdun)
    Pour moi ça signifie qu'il ne rentre pas dans la condition if

    st2 décrit toutes les stations liées aux stations déjà vues du réseau. Je suis sur que le réseau comprend bien la station :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	for(Station st : reseau){
    		if(pasVu.contains(st)){
    			System.out.println(st.getNom()+" est dans pasVu");
    		}
    	}
    répond
    Barbès - Rochechouart est dans pasVu
    Gare du Nord est dans pasVu
    Château d'Eau est dans pasVu
    Pour mettre les stations dans le tableau "voisins" je ne crois pas avoir de problèmes de référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		for(Station st2 : st.getPrec()){
    			voisins.add(st2);
    		}
    		for(Station st2 : st.getSucc()){
    			voisins.add(st2);
    		}
    Et lorsque je désigne les précédents/successeurs de chaque ligne ça me semble bien être la même référence que lorsque j'ajoute dans le tableau réseau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		tmp = new Station(ligne, ligneRATP);
    			reseau.add(tmp);
    			if(i!=0){
    				tmpOLD.addSucc(tmp, poidsOLD);
    				tmp.addPrec(tmpOLD, poidsOLD);
    Je ne comprends pas pourquoi la première fois il me dit que Gare du Nord est dans la liste pasVu et pas la deuxième fois.

    Quelqu'un connait un bug de ce genre ? Avez vous besoin de plus d'infos ? Sauriez-vous m'aider ?

    Je comprends toujours pas mais ce que vous m'avez dit de faire fonctionne. merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    La méthode contains des collections se base sur le test equals(...) des objets contenus. A priori je dirais que tu n'a pas implémenté cette méthode dans ta classe Station. Quand equals n'est pas implémentée, c'est l'implémentation de la classe Object qui est appelée, celle ci renvoie true si le test == est vrai.

    Au passage quand tu surcharge equals, il est recommandé de surcharger hashcode aussi

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

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

Discussions similaires

  1. La méthode contains de ArrayList
    Par boubounagh dans le forum Collection et Stream
    Réponses: 21
    Dernier message: 12/01/2012, 15h48
  2. ArrayList et méthode contains
    Par Lenou dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/04/2011, 11h43
  3. Réponses: 4
    Dernier message: 05/06/2005, 14h05
  4. Méthode simple pour gérer les collisions
    Par Hyoga dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/02/2005, 13h43
  5. méthode à utiliser pour annuaire
    Par psyco2604 dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2004, 15h46

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