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

Langage Java Discussion :

Utilisation de l'interface Comparable et surcharge de methode


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut Utilisation de l'interface Comparable et surcharge de methode
    Voici mon probleme :

    D'abord voici une fonction qui permet de faire un tri de tableau d'entiers.

    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
     
      public static void bubbleSort(int[] x)
      {
        int n = x.length;
        boolean doMore = true;
        while (doMore)
        {
            n--;
            doMore = false;  // assume this is our last pass over the array
            for (int i=0; i<n; i++) {
                if (x[i] > x[i+1]) {
                    int temp = x[i];  x[i] = x[i+1];  x[i+1] = temp;
                    doMore = true;
                }
            }
        }
      }
    Le probleme est le suivant, je dois changer ma fonction de tri avec la signature suivante :

    public static void bubbleSort(Comparable[] x)

    Car mon but est de pouvoir trier des personnes dont voici la classe :
    (Les personnes seront tries sur leur nom et leur prenom.)

    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
     
     
    class Personne
    {
        private String prenom;
        private String nom;
        private int age;
     
        public int getValue()
        {
          return age;
        }
     
        public String getPrenom()
        {
          return prenom;
        }
     
        public void setPrenom(String prenom)
        {
          this.prenom = prenom;
        }
     
        public String getNom()
        {
          return nom;
        }
     
        public void setNom(String nom)
        {
         this.nom = nom;
        }
     
        public int getAge()
        {
          return age;
        }
     
        public void setAge(int age)
        {
          this.age = age;
        }
    }
    J'avais tout de suite pense a faire une surcharge d'operateur. Mais en java je n'ai pas cette possibilite.

    J'ai l'idee que la classe Personne herite de la classe Comparable pour pouvoir utiliser ma fonction de tri.

    Je cherche une solution pour adapter ma classe Personne et Element afin de ne pas avoir a modifier ma fonction de tri.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Il suffit que ta classe Personne implémente Comparable<Personne>, et que tu définisse la méthode int compareTo(Personne).

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Je te conseille de t'inspirer de l'interface java.util.Comparator et de l'API des fonctions de tri que tu trouveras dans le package java.util.

  4. #4
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut
    Merci pour tous vos commentaires et toutes vos references.

    Voici ma solution :

    Ma fonction de tri modifiee :

    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
    import java.lang.Comparable;
     
    public static void bubbleSort(Comparable[] tableau)
    {
        int n = tableau.length;
        boolean doMore = true;
        while (doMore)
        {
            n--;
            doMore = false;
            for (int i=0; i<n; i++) {
                if (tableau[i].compareTo(tableau[i+1]) > 1)
                {
                    Comparable temp = tableau[i];  tableau[i] = tableau[i+1];  tableau[i+1] = temp;
                    doMore = true;
                }
            }
        }
    }
    Petite question : temp devrait-il etre de type Object plutot que de type Comparable ?

    La classe personne modifiee :

    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
    import java.lang.Comparable;
     
    class Personne implements Comparable
    {
        private String prenom;
        private String nom;
        private int age;
     
        //-----------------------------------------------------
     
        public int getValue()
        {
          return age;
        }
     
        //-----------------------------------------------------
     
        public String getPrenom()
        {
          return prenom;
        }
     
        //-----------------------------------------------------
     
        public void setPrenom(String prenom)
        {
          this.prenom = prenom;
        }
     
        //-----------------------------------------------------
     
        public String getNom()
        {
          return nom;
        }
     
        //-----------------------------------------------------
     
        public void setNom(String nom)
        {
         this.nom = nom;
        }
     
        //-----------------------------------------------------
     
        public int getAge()
        {
          return age;
        }
     
        //-----------------------------------------------------
     
        public void setAge(int age)
        {
          this.age = age;
        }
     
        //-----------------------------------------------------
     
        public int compareTo(Object o)
        {
          Personne p = (Personne)o;
          if(nom.equals(p.nom))
          {
            return prenom.compareTo(p.prenom);
          }
         return nom.compareTo(p.nom);
        }
     
        //-----------------------------------------------------
    }

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Si tu utilise un jdk 1.5+, tu pourrais utiliser les generics ( cf [Java 5.0] Qu'est-ce que les Generics (types paramétrés) ?) .
    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
    public static <T extends Comparable<T>> void bubbleSort(T[] tableau) {
        int n = tableau.length;
        boolean doMore = true;
        while (doMore) {
            n--;
            doMore = false;
            for (int i = 0; i < n; i ++) {
                if (tableau[i].compareTo(tableau[i + 1]) > 1) {
                    T temp = tableau[i];  
                    tableau[i] = tableau[i + 1];  
                    tableau[i + 1] = temp;
                    doMore = true;
                }
            }
        }
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/03/2006, 18h41
  2. [Débutant]interface comparable et methode compareto
    Par mariogarcia dans le forum Langage
    Réponses: 5
    Dernier message: 11/01/2006, 09h49
  3. [EJB] Utiliser seulement les interfaces locales avec les ejb
    Par clement42 dans le forum Java EE
    Réponses: 1
    Dernier message: 06/01/2006, 12h12
  4. Composants à utiliser pour une interface graphique Java
    Par nicolas.pied dans le forum Composants
    Réponses: 4
    Dernier message: 28/11/2005, 20h27
  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