Comparateur avec TreeSet java
Fermé
ahmadou_20
-
Modifié par ahmadou_20 le 1/09/2014 à 17:37
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 sept. 2014 à 21:09
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 sept. 2014 à 21:09
A voir également:
- Comparateur avec TreeSet java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Comparateur amazon - Accueil - Commerce
- Java décompiler - Télécharger - Langages
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 1/09/2014 à 21:34
Modifié par KX le 1/09/2014 à 21:34
Bonsoir,
Plusieurs choses :
1)
Le "float ratio" n'est jamais utilisé, tu devrais l'enlever.
2)
Le type de compareTest devrait être "Test" (avec un T majuscule), pas "test".
Je te conseilles de mettre une annotation @Override pour voir ce genre d'erreur :
3)
Attention, "category" est un String et doit être testé avec la méthode equals !
4) Une fois ces erreurs corrigés ton code marche très bien... alors où est vraiment ton problème ?
5) Je te conseilles d'utiliser plutôt une structure de code comme ceci, plus simple à lire et qui évite de comparer plusieurs fois la même chose (une fois dans le test du if et une autre fois dans le compare)
6) Comme tout objet peut potentiellement être null il faut faire très attention en les manipulant. Ici par exemple rien ne t'empêcherait d'avoir "category==null" ce qui va faire un NullPointerException sur le compareTo. Pour cela je te conseilles une petite méthode de comparaison "universelle" pour traiter le cas null, il faut juste préciser si null est censé être plus petit ou plus grand qu'une valeur non nulle.
Ainsi au lieu d'avoir
La confiance n'exclut pas le contrôle
Plusieurs choses :
1)
public Test(float number, int weight, float ratio, String category)
Le "float ratio" n'est jamais utilisé, tu devrais l'enlever.
2)
public int compareTo(test compareTest)
Le type de compareTest devrait être "Test" (avec un T majuscule), pas "test".
Je te conseilles de mettre une annotation @Override pour voir ce genre d'erreur :
@Override public int compareTo(Test compareTest)
3)
if (this.category != compareTest.category)
Attention, "category" est un String et doit être testé avec la méthode equals !
4) Une fois ces erreurs corrigés ton code marche très bien... alors où est vraiment ton problème ?
5) Je te conseilles d'utiliser plutôt une structure de code comme ceci, plus simple à lire et qui évite de comparer plusieurs fois la même chose (une fois dans le test du if et une autre fois dans le compare)
@Override public int compareTo(Test compareTest) { int comp; comp = Float.compare(number, compareTest.number); if (comp != 0) return comp; comp = Integer.compare(weight, compareTest.weight); if (comp != 0) return comp; comp = category.compareTo(compareTest.category); if (comp != 0) return comp; return 0; }
6) Comme tout objet peut potentiellement être null il faut faire très attention en les manipulant. Ici par exemple rien ne t'empêcherait d'avoir "category==null" ce qui va faire un NullPointerException sur le compareTo. Pour cela je te conseilles une petite méthode de comparaison "universelle" pour traiter le cas null, il faut juste préciser si null est censé être plus petit ou plus grand qu'une valeur non nulle.
public static <E extends Comparable<E>> int compareWithNull(E e1, E e2, boolean nullIsLess) { if (e1==e2) return 0; if (e1==null) return nullIsLess ? -1 : +1; if (e2==null) return nullIsLess ? +1 : -1; return e1.compareTo(e2); }
Ainsi au lieu d'avoir
comp = category.compareTo(compareTest.category);on aurait
comp = compareWithNull(category, compareTest.category, true);
La confiance n'exclut pas le contrôle