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 @+
Version imprimable
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 @+
personne ne connait la soluce ? :(
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:
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:
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:
1
2 Arrays.sort(Tab);
Si this vaut null, on peut en déduire qu'auparavant on a fait null->compareTo(n).Code:
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.
Citation:
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 ... :?Citation:
Envoyé par Pill_S
utilise une liste si vraiment ;)
Code:
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.
ok merci ! :wink: :wink:Citation:
Envoyé par Pill_S