Salut,
tout d'abord l'erreur se situe au niveau du calcul de la position du dernier espace :
c = list4[j].lastIndexOf(" ");
ici c'est le dernier espace pour list4[j] mais pas pour list4[j-1] qui est possiblement différent.
Tu dois avoir un c1 pour j et un c2 pour j-1.
Ensuite, au sujet de :
Float.valueOf(list4[j-1].substring(c))
c'est la position de l'espace, donc tu cherches à convertir en Float par exemple " 3.5555" : donc ça plante à cause de l'espace. De plus, il vaudrait mieux soit utiliser parseFloat() pour comparer avec < soit utiliser compareTo() si tu utilises valueOf().
Il y a plusieurs erreurs dans ta seconde boucle :
- la condition d'arrêt devrait être sur j
- le dernier item n'est jamais comparé, donc pas trié
En fait, il faudrait que tu boucles comme ça :
for (int j=0;j <taille1-1;j++)
et que tu compares [j] à [j+1]
Mais ça, ça tri dans l'ordre croissant...
Et je parle pas de la première boucle : au lieu de chercher à implémenter un algo de tri (pseudo tri à bulles non optimisé), tu devrais utiliser plutôt la méthode java.util.Arrays.sort(T[] a, Comparator<? super T> c) comme ça :
1 2 3 4 5 6 7 8
| Arrays.sort(list4, new Comparator<String>() {
public int compare(String s1, String s2) {
int c1= s1.lastIndexOf(" ");
int c2= s2.lastIndexOf(" ");
return -Float.valueOf(s1.substring(c1+1)).compareTo(Float.valueOf(s2.substring(c2+1)));
}
}); |
(j'ai pas mis de traitement d'erreur, comme il n'y'en avait pas dans ton code, je suppose que tu es sure de tes données)
Partager