Slu
quand le tab que je vx classer n est pas remplie (cad qu une partir du tableau est remplie avec null) la fonction Arrays.sort() me fait une erreur ....
que faire ???
thx @+
Slu
quand le tab que je vx classer n est pas remplie (cad qu une partir du tableau est remplie avec null) la fonction Arrays.sort() me fait une erreur ....
que faire ???
thx @+
regarde ici: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#sort(java.lang.Object[],%20java.util.Comparator)
il faut créer ton propre comparator, et l'utiliser pour comparer les éléments de ton tableau.
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 Object[] o = new Object[]{null, new Object(), ...}; Comparator c = new Comparator(){ public int compare(Object o1, Object o2){ if(o1 == o2) return 0; if(o1 == null) return 1; if(o2 == null) return -1; // continue les tests en fonction de ce qui t'intéresse } public boolean equals(Object o){ if(this == o) return true; return false; } } Arrays.sort(o, c);
justement je l ai fais ....
bug a :
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 class Elem implements Comparable{ .... public Elem (String theNom, long theScore, long theDuree){ .... } public int compareTo(Object n){ if (this == null || n == null) return 1; if(Score < ((Elem)n).getScore()) return -1; if (Score == ((Elem)n).getScore()) return 0; return 1; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Arrays.sort(Tab);
Si this vaut null, on peut en déduire qu'auparavant on a fait null->compareTo(n).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public int compareTo(Object n){ if (this == null || n == null) return 1;
Conclusion : l'interface Comparable n'est pas utilisable quand il y a des null dans le tableau. Il faut utiliser Comparator qui permet d'avoir les deux objets comme des paramètres.
Envoyé par pk960
pffff il faut le savoir ca !!!
je vient de tester avec Comparator et ca a l air de marcher !!
merci tlm !
de toute façon, this ne peut jamais valoir null
c'est comme de dire que 1 égal 0![]()
c vrai ... mais c tout de meme un peu bizarre ... on ne peut alors utiliser l interface Comparable QUE lorsque le tableau est remplie ...Envoyé par Pill_S
![]()
utilise une liste si vraiment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Random r = new Random(); List<Comparable> list = new ArrayList<Comparable>(100); for(int i=0; i<20; i++) list.add(r.nextInt()); // merci autoboxing de java 5 ;) Collections.sort(list); ...
ah oui .... est ce que je peux limiter le nombre d elements dans une liste ?
pas directement.
mais en fonction du contenu (list.size()), tu peux facilement définir le moment où la liste est "pleine" et où tu dois arrêter d'ajouter des éléments.
Partager