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 :

Probleme interface Comparable


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut Probleme interface Comparable
    Bonjour je dois realiser l exercice suivant :

    Instancier un HashSet, un Vector, et une HashTable, ajouter à chacun de ces objets plusieurs objets Formulaone ayant une propriété pilotename (String). Pour ce qui concerne le Map, choisissezcomme clé de reference à l'objet FormulaOne le nom du pilote.
    Créer une classe Race qui possède une methode display et qui prend en paramètre un Object.Cete méthode devra pouvoir recevoir les 3 collections précédemment créées et en énumerer le nom de tous les pilotes. Ajouter un main qui utilise cette méthode avec les 3 objets.

    Jusque la je pense avoir reussi j ai ecrit le code suivant :

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    
    pour le main :
    
    package exo;
    
    import java.util.*;
    
    public class Main {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            
            HashSet hs = new HashSet();
            Vector vect = new Vector();
            Hashtable ht = new Hashtable();
            
            FormulaOne p1 = new FormulaOne ("Alonzo");
            FormulaOne p2 = new FormulaOne ("Massa");
            FormulaOne p3 = new FormulaOne ("Schumacher");
            FormulaOne p4 = new FormulaOne ("Prost");
            Race r1 = new Race ("Le Mans");
            
            hs.add(p1);
            hs.add(p2);
            
            
            vect.add(p2);
            vect.add(p3);
            
            ht.put(p3.piloteName, p3);
            ht.put(p4.piloteName, p4);
            
            r1.display(hs);
            r1.display(vect);
            r1.display(ht);
            
            
        }
    
    }
    
    
    
    
        }
    
    pour la classe FormulaOne
    
    package exo;
    
    /**
     *
     * @author gwen
     */
    public class FormulaOne {
    
        
        protected String piloteName;
        
        public FormulaOne(String _piloteName){
            
            piloteName=_piloteName;
        }
        
        public void afficher (){
            
            System.out.println(piloteName);
            
        }
        
        
        
    }
    
    et pour la classe race : 
    
    package exo;
    import java.util.*;
    /**
     *
     * @author gwen
     */
    public class Race  {
        
        private String nom;
        
        public Race (String _nom){
            
            nom=_nom;
            
        }
        
        public void display (Object o){
            
            int i = 0;
            Iterator it;
            Object m;
            
            if (o instanceof HashSet){
                
              HashSet hs = (HashSet)o;
              it=hs.iterator();
              while(it.hasNext()){
                  
                 FormulaOne f =(FormulaOne)it.next();
                 f.afficher();
      
                }    
            }else{
                
                if (o instanceof Vector){
                    
                    Vector v = (Vector)o;
                    it=v.iterator();
                    while(it.hasNext()){
                        
                        FormulaOne f = (FormulaOne)it.next();
                        f.afficher();
                        
                    }
                    
                    
                }else{
                    
                    Hashtable ht = (Hashtable)o;
                    Iterator itv = ht.values().iterator();
                   
                    
                    while (itv.hasNext()){
                        
                        FormulaOne res = (FormulaOne)itv.next();
                        res.afficher();
                    }
                    
                }
                
            }       
            
        }
       
    }
    ensuite l'exercice a une 2eme partie et c'est la que je coince :

    Modifier la classe FormulaOne afin qu'elle implemente Comparable en fonction du nom du pilote, remplacer le HashSet par un TreeSet et le Hashtable par un TreeMap et faites en sorte que la méthode display renvoie une liste de pilote ordonnées suivant le nom du pilote quelque soit l objet reçu en paramètre (Vector, TreeSet ou TreeMap)

    Le probleme et que je ne sais ni ce que c'est qu TreeSet et un TreeMap ni comment utiliser l interface Comparable (qui a mon avis doit permettre de comparer 2 String?) et par conséquent je ne sais pas ce qu'il faut que je fasse

    Quelqu'un pourrait m aider svp??

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    comme c'est un sujet très fréquent sur le forum tu devrais trouver pas mal de choses en faisant une petite recherche ...

    Sinon, tu peut te baser sur cette entrée de la FAQ : Comment trier une List (ArrayList, Vector, ...) ou un tableau?, on y explique comment implémenter l'interface Comparable

    autre piste de recherche, un tuto de chez Sun assez complet : Object Ordering

    Voilà bonne lecture ...

  3. #3
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    En ce qui concerne TreeSet et TreeMap, tu trouveras des informations dans ces 2 questions de la FAQ :

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut
    Merci les articles sont tres bien fait je pense pouvoir y arriver! J'ai juste une question : comment je fais pour savoir si une chaine de caractere a se trouve avant ou apres dans l alphabet qu'une chaine b?

    ex: a= dupont
    b=janvier

    dans ce cas a devrai etre "plus petite" que b

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut
    Je pense avoir trouver il faut les comparer avec leur hashCode non?

  6. #6
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut


    Tu dois utiliser la méthode de la classe String : compareTo. Elle te renverra un entier positif si l'argument vient avant dans l'ordre aplphabétique, -1 si il vient après, 0 si les String sont identiques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Test {
        public static void main(String[ ] args)
        {
            String a = "a";
            String b = "b";
            String c = "c";
            String bb = "bb";
            System.out.println(b.compareTo(a));
            System.out.println(b.compareTo(b));
            System.out.println(b.compareTo(c));
            System.out.println(b.compareTo(bb));
        }
    }
    Ce code afiche :
    1
    0
    -1
    -1

  7. #7
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Par défaut
    il ne me reste plus qu un probleme que je ne comprends pas comment résoudre! il s'agit de trier le TreeMap et le TreeSet pour le Vector j'ai reussi! voici le code que j'utilise :

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    
    classe FormulaOne
    
    public class FormulaOne implements Comparable {
    
       public String piloteName;
        
        public FormulaOne(String _piloteName){
            
            piloteName=_piloteName;
        }
        
        public void afficher (){
            
            System.out.println(piloteName);
            
        }
        
        
        public String getpiloteName(){
            
            return piloteName;
            
        }
           
        
     
        public int compareTo(Object o){
            
            String nom1 = ((FormulaOne)o).getpiloteName();
            String nom2 = this.piloteName;
            
            if (nom2.compareTo(nom1)==-1){   // -1 si nom2 est "plus petit" que nom1
                
                return -1;
                
            }else if (nom2.compareTo(nom1)==0){ //0 si les 2 noms sont identiques
                
                        return 0;
                        
                  }else{                       // 1 si nom2 est plus grand que nom1
                
                        return 1;
                
                  }
            
            
          }
               
     }    
            
     class Race
     
    package exo2;
    import java.util.*;
    /**
     *
     * @author gwen
     */
    public class Race {
        
         private String nom;
        
        public Race (String _nom){
            
            nom=_nom;
            
        }
        
        public void display (Object o) {
            
            int i = 0;
            Iterator it;
            Object m;
            
            if (o instanceof TreeSet){
                
              TreeSet hs = (TreeSet)o;
              it=hs.iterator();
              while(it.hasNext()){
                  
                 FormulaOne f =(FormulaOne)it.next();
                 f.afficher();
      
                } 
              System.out.println("----------------------");
            }else{
                
                if (o instanceof Vector){
                    
                    Vector v = (Vector)o;
                    it=v.iterator();
                    
                    while(it.hasNext()){
                        
                        FormulaOne f = (FormulaOne)it.next();
                        
                        f.afficher();
                        
                    }
                    System.out.println("----------------------");
                    
                }else{
                    
                    TreeMap ht = (TreeMap)o;
                    Iterator itv = ht.values().iterator();
                   
                    
                    while (itv.hasNext()){
                        
                        FormulaOne res = (FormulaOne)itv.next();
                        res.afficher();
                    }
                    System.out.println("----------------------");
                    
                }
                
            }       
        }
    
    }
    
    et enfin le main
    
     public static void main(String[] args) {
            // TODO code application logic here
            Set ts = new TreeSet();
            List  vect = new Vector();
            Map tm = new TreeMap(Collator.getInstance(Locale.FRENCH));
            
            FormulaOne p1 = new FormulaOne ("A");
            FormulaOne p2 = new FormulaOne ("B");
            FormulaOne p3 = new FormulaOne ("C");
            FormulaOne p4 = new FormulaOne ("D");
            Race r1 = new Race ("Le Mans");
            
            ts.add(p4);
            ts.add(p2);
            ts.add(p1);
            ts.add(p3);
            
            vect.add(p4);
            vect.add(p1);
            vect.add(p2);
            vect.add(p3);
            
            Collections.sort(vect);
            
            tm.put(p3.piloteName, p2);
            tm.put(p2.piloteName, p3);
            tm.put(p1.piloteName, p1);
            tm.put(p4.piloteName, p4);
            
            
            r1.display(ts);
            r1.display(vect);
            r1.display(tm);
            
        }
    
    }
    Par ailleurs j'ai cru comprendre que pour que les TreeSet et Treemap soit trier par odre alphabétique il faut l'indiquer lors de l instanciation! mais comment faire?

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

Discussions similaires

  1. Interface comparable, qu'est-ce que c'est ?
    Par AsmCode dans le forum Langage
    Réponses: 7
    Dernier message: 15/03/2006, 18h39
  2. Réponses: 8
    Dernier message: 01/03/2006, 18h41
  3. [Débutant]interface comparable et methode compareto
    Par mariogarcia dans le forum Langage
    Réponses: 5
    Dernier message: 11/01/2006, 09h49
  4. Probleme pour comparer
    Par Ludo75 dans le forum C
    Réponses: 3
    Dernier message: 15/12/2005, 10h09
  5. [Language]Pb implementation de l'interface Comparable
    Par mawashee dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 16h49

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