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 :

Comparateur en Java


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 54
    Points : 47
    Points
    47
    Par défaut Comparateur en Java
    Bonjour,

    J ai cree une classe Test pour laquelle j ai defini un comparatuer :

    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
     
     
    public class Test implements Comparable<Test > {
     
     
      private Float         number;
     
      private Integer       weight;
     
      private String        category;
     
      public Test() {
     
      }
     
     public Test(float number, int weight, float ratio, String category) {
     
        this.number= number;
        this.weight = weight;
        this.category = category;
     
      }
     
    public String toString() {
     
        String result = "";
     
        result = result.concat(" -- Number-->> " + number)
                       .concat(" -- Weight -->> " + weight)
                       .concat(" -- Category -->> " + category);
     
        return result;
      }
    public int compareTo(test compareTest) {
     
        if(this.number!= compareTest.number) {
          return this.number.compareTo(compareTest.number);
        }
        else if(this.weight!= compareTest.weight) {
          return this.weight.compareTo(compareTest.weight);
        }
        else if(this.category != compareTest.category) {
          return this.category.compareTo(compareTest.category);
        }
        else {
          return 0;
        }
      }
     
      public static Comparator<Test> comparator = new Comparator<Test>() {
     
                                                                public int compare(Test test1,
                                                                                   Test test2) {
     
                                                                  return test1.compareTo(test2);
                                                                }
     
                                                              };
     
    }

    En gros, j aimerais stocker dans un TreeSet differents objets Test tries par ordre ascendant suivant number, weight (si number est le meme pour deux objets) ou category (si number et weight sont les memes pour deux objets).

    Le probleme c est que etant donne ce code,

    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
     
     
    TreeSet<Test> tree= new TreeSet<Test>(Test.comparator);
     
        Test t1 = new Test(2f, 12,"1");
        Test t2 = new Test(3f, 11, "2");
        Test t3= new Test(4f, 10, "3");
     
        tree.add(t1);
        tree.add(t2);
        tree.add(t3);
     
    for(Test test : tree) {
          System.out.println(test.toString());
        }
    je m attendrais a tree contenant [t1, t2, t3] alors que je n obtiens dans tree que t1.
    Je comprends pas pourquoi bien que les trois objets sont tous differents et donc ne s excluent pas dans le TreeSet.

    Auriez vous des idees ?
    La logique du comparateur est elle correcte ?

    Merci de votre aide !!!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par ahmadou_20 Voir le message
    Auriez vous des idees ?
    Montrer un vrai code qui compile et qui affiche des trucs, me semblerait une bonne première étape. Vraiment première. Genre avant de poser la question, il aurait déjà fallu faire ça.

    En l'état :
    - Il y a confusion entre Test, test, CancellationOption et le constructeur. On va pas deviner ce que cette confusion donne, appliquée à ton code qui compile vraiment et que tu n'as pas montré.
    - Tu dis que tu n'obtiens que t1, mais je vois mal comment tu pourrais savoir ça. Il n'y a aucun affichage du contenu de tree, ni de quoi que ce soit d'ailleurs.

    Citation Envoyé par ahmadou_20 Voir le message
    La logique du comparateur est elle correcte ?
    Oui, bien qu'il soit inutile.
    Tes objets implémentent déjà Comparable, et donc un TreeSet peut les trier sans devoir lui fournir un Comparator.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    Oui desole il n ya pas de Cancellation option.

    Il y que Test.

    J ai corrige le code ci dessus.

    mais le probleme subsiste.

    desole pour le malentendu !!!!

    Citation Envoyé par thelvin Voir le message
    Tes objets implémentent déjà Comparable, et donc un TreeSet peut les trier sans devoir lui fournir un Comparator.
    Oui mais je veux aussi definir l ordre selon lequel je compare les champs de ma classe Test.

    c est l interet de mon comparateur je pense.

  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,

    Citation Envoyé par ahmadou_20 Voir le message
    mais le probleme subsiste.
    Lequel ? Si c'est le fait que le TreeSet ne contient que l'élément t1, comme tu l'indiques dans ton premier message, je ne sais pas comment tu obtiendrais ce résultat : la classe Test présentée ne compile pas, la classe test n'existant pas (les noms de classe, entre autres, c'est sensible à la casse). Ensuite, quand bien même elle compilerait, le second extrait de code ne compilerait pas non plus : le constructeur a 4 arguments et tu n'en passe que 3. En corrigeant ces erreurs, le TreeSet contiendra bien les 3 éléments.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par ahmadou_20 Voir le message
    Oui mais je veux aussi definir l ordre selon lequel je compare les champs de ma classe Test.

    c est l interet de mon comparateur je pense.
    Non. Ton Comparator ne définit rien du tout, il ne fait qu'appeler la méthode compareTo() de tes objets. Ça ne sert à rien, TreeSet le fera tout seul si tu ne lui donnes pas de Comparator.
    Il n'a aucun intérêt.

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

Discussions similaires

  1. Comparateur d'objets java
    Par Yasiño dans le forum Général Java
    Réponses: 1
    Dernier message: 28/11/2013, 23h52
  2. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 20h17
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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