Bonjour j'ai une classe java qui contient un champ long. Elle implemente l'interface Comparable et ma methode compareTo compare les champs long por trier mes objets. Mais l'appelle à Arrays.sort(mon tableau d'objet); ne marche pas? pourquoi?
Version imprimable
Bonjour j'ai une classe java qui contient un champ long. Elle implemente l'interface Comparable et ma methode compareTo compare les champs long por trier mes objets. Mais l'appelle à Arrays.sort(mon tableau d'objet); ne marche pas? pourquoi?
Tu renvoies bien la bonne valeur dans ton compareTo() ? (Lis la JavaDoc si tu as un doûte)
Toine
mon extrait de code cé ca:
Code:
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 public class Strip extends JPanel implements Comparable{ private Component canvas; public String monVol; public long POBTnum; public long EDATnum; /** Creates a new instance of Strip */ public Strip(Component c,String s,int i) { /*bla bla bla*/ } (....) public int compareTo(Object o) { Strip other = (Strip) o; if(POBTnum<other.POBTnum) return 1; if(POBTnum>other.POBTnum) return -1; return 0; } }
et je l'utilise comme ca:
Code:
1
2
3
4
5
6
7 maZone.lesStrips.add(strip);//ma zone.lesStrips est une ArrayList contenant des objet Strip Strip[] mesStrips = new Strip[maZone.lesStrips.size()]; maZone.lesStrips.toArray(mesStrips); Arrays.sort(mesStrips);
Mais ca marche pas :(
si ton objet est "plus petit" que celui qu'on te passe en paramètre, tu dois renvoyer une valeur négative par exemple.Code:a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
Toine
Quand tu dis que ca marche pas, ca veut dire quoi exactement ?:
- pas trié comme tu veux
pas trié du tout
erreur générée à l'execution
Ben mets déjà un System.out.println dans ta methode compareTo pour voir si elle est bien appelée.
EDIT: en effet, il semble que tu ai inversé le 1 et le -1
je sais mais ca marche pas quand meme
C'est normal que ça ne marche pas, ton code est incorrect.
Toine
salut
En quoi mon code est incorrect ?
Est ce que je peux avoir plusieurs methode compareTo dans ma classe???
Citation:
Envoyé par duj
OK ca marche
est ce que je peux avoir plusieurs methode de comparateTo dans une meme classe
non
pourquoi faire?
bin non, l'interface Comparable ne requiert qu'une seule méthode, qui a le prototype public void compareTo(Object)...Citation:
Envoyé par feti2004
:wink:
Si tu as besoin de trier différement selon certain cas, tu peux utiliser la méthode Arrays.sort(Object[], Comparator)
Toine
Citation:
Envoyé par onlytoine
Justement comment tu utilises cela? tu as un exemple simple?
tu passes ton tableau à l'objet et tu lui passes aussi un Comparator qui permettra le tri :
C'est plus clair ?Code:
1
2
3
4
5
6
7
8 Arrays.sort( monTableau, new Comparator() { public int compare(Object o1, Object o2) { // ....... } } );
Toine
Cé on ne peut plus clair :wink:Citation:
Envoyé par onlytoine
Je te remercie ca ma sauvé :P
Ok, c'est parfait alors ! :wink:
Bonne continuation !
Toine