Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1577 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  tri d'une liste et débogage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tri d'une liste et débogage

n°2218978
sarah991
Posté le 08-02-2014 à 14:49:17  profilanswer
 

bonsoir
j'ai une liste qui contient dans chaque case un mot avec son score voilà un exemple  
 
arbre 0.56887
deee 12.589
cfdss 3.589
dett 6.589155
dfrzz 5.69875
 
je voulai trier les lignes dans l'ordre décroissant  
je voulais que ma liste soit comme ça:  
 
deee 12.589
dett 6.589155
dfrzz 5.69875
cfdss 3.589
arbre 0.56887
 
voilà le code que j'ai essayé mais ça donne rien
 

Code :
  1. for ( i=0;i<taille1;i++)
  2.              {
  3.                  for (j=1;i <taille1-1;j=j--)
  4.                  {
  5.                             c = list4[j].lastIndexOf(" " );
  6.                         if (Float.valueOf(list4[j-1].substring(c))>(Float.valueOf(list4[j].substring(c))))
  7.                             {
  8.                                  a= list4[j-1];
  9.                                 list4[j-1]= list4[j];
  10.                                  list4[j]=a;
  11.                             }
  12.                     //    j=j-2;
  13.                  }
  14.              }


quand je fait un breakpoint pour cette ligne

Code :
  1. c = list4[j].lastIndexOf(" " );


elle reste toujours rouge lors de débogage je sais pas pourquoi donc le tri ne peut pas s'effectuer  
pourriez vous me dire les causes?
Merci d'avance.

mood
Publicité
Posté le 08-02-2014 à 14:49:17  profilanswer
 

n°2218992
honrisse
Posté le 08-02-2014 à 19:41:16  profilanswer
 

sarah991 a écrit :

bonsoir
j'ai une liste qui contient dans chaque case un mot avec son score voilà un exemple  
 
arbre 0.56887
deee 12.589
cfdss 3.589
dett 6.589155
dfrzz 5.69875
 
je voulai trier les lignes dans l'ordre décroissant  
je voulais que ma liste soit comme ça:  
 
deee 12.589
dett 6.589155
dfrzz 5.69875
cfdss 3.589
arbre 0.56887
 
voilà le code que j'ai essayé mais ça donne rien
 

Code :
  1. for ( i=0;i<taille1;i++)
  2.              {
  3.                  for (j=1;i <taille1-1;j=j--)
  4.                  {
  5.                             c = list4[j].lastIndexOf(" " );
  6.                         if (Float.valueOf(list4[j-1].substring(c))>(Float.valueOf(list4[j].substring(c))))
  7.                             {
  8.                                  a= list4[j-1];
  9.                                 list4[j-1]= list4[j];
  10.                                  list4[j]=a;
  11.                             }
  12.                     //    j=j-2;
  13.                  }
  14.              }


quand je fait un breakpoint pour cette ligne

Code :
  1. c = list4[j].lastIndexOf(" " );


elle reste toujours rouge lors de débogage je sais pas pourquoi donc le tri ne peut pas s'effectuer  
pourriez vous me dire les causes?
Merci d'avance.


 
Bonsoir,
Plusieurs problèmes :


Code :
  1. String[] l = new String[] { "arbre 0.56887", "deee 12.589",
  2.    "cfdss 3.589", "dett 6.589155", "dfrzz 5.69875" };
  3.  boolean swap = true;
  4.  do {
  5.   swap = false;
  6.   for (int i = 0; i < l.length - 1; i++) {
  7.    int c1 = l[i].lastIndexOf(" " ) + 1;
  8.    int c2 = l[i + 1].lastIndexOf(" " ) + 1;
  9.    try {
  10.     if (Float.valueOf(l[i].substring(c1)) < (Float
  11.       .valueOf(l[i + 1].substring(c2)))) {
  12.      swap = true;
  13.      String a = l[i];
  14.      l[i] = l[i + 1];
  15.      l[i + 1] = a;
  16.     }
  17.    } catch (NumberFormatException e) {
  18.     e.printStackTrace();
  19.    }
  20.   }
  21.  } while (swap);
  22.  for (String s : l) {
  23.   System.out.println(s);
  24.  }

n°2218993
sarah991
Posté le 08-02-2014 à 20:11:25  profilanswer
 

Merci beaucoup pour ton aide
quand je teste ce code il me single l'erreur :NullPointerException
dans la ligne suivante
int c2 = l[i+1].lastIndexOf(" " ) ;

 

en fait dans mon cas j'ai plusieurs listes donc quand il arrive au dernier case de la première liste il se bloque par cette erreur peut être que c'est à cause i+1 ?

Message cité 1 fois
Message édité par sarah991 le 08-02-2014 à 20:16:42
n°2218997
honrisse
Posté le 08-02-2014 à 21:16:06  profilanswer
 

sarah991 a écrit :

Merci beaucoup pour ton aide
quand je teste ce code il me single l'erreur :NullPointerException
dans la ligne suivante
int c2 = l[i+1].lastIndexOf(" " ) ;
 
en fait dans mon cas j'ai plusieurs listes donc quand il arrive au dernier case de la première liste il se bloque par cette erreur peut être que c'est à cause i+1 ?


 
Un dépassement du tableau renvoie normalement l’exception ArrayIndexOutOfBoundsException. NullPointerException, c'est autre chose : http://fr.java.wikia.com/wiki/Java [...] rException.
Pourquoi +1, il faut regarder l'algo du tri à bulles et essayer de bien le comprendre : https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles.
Attention, en Java les tableaux sont indexés de 0 à taille-1 alors que sur Wikipedia le tableau est indexé de 1 à taille.
Si l'on veut trier chaque liste indépendamment, il suffit de reprendre le code et d'appeler la bonne liste à chaque fois, si l'on veut trier l'ensemble des listes, le plus simple est de concaténer chaque liste en une seule liste (https://stackoverflow.com/questions [...] ys-in-java).
Il faut aussi s'assurer que chaque String de la liste soit bien sous la forme : "le mot qui est suivi d'un nombre 0.45461" sans espaces au début ni à la fin, avec un seul espace pour délimiter le dernier mot et le nombre. Pour enlever les espaces au début et à la fin, on peut utiliser la méthode trim (http://docs.oracle.com/javase/7/do [...] trim%28%29)

n°2219000
sarah991
Posté le 08-02-2014 à 21:28:51  profilanswer
 

j'ai fait un point d'arret sur la ligne:  

Code :
  1. int c2 = l[i+1].lastIndexOf(" " ) +1

; où le programme signale l'erreur
je parle de i+1 dans cette ligne
ma 1ere liste contient 7 cases
en incrémentant i à chaque fois par f5, la ligne est vert jusqu'à i=6 quand je fais encore une fois f5, elle devient rouge

Message cité 1 fois
Message édité par sarah991 le 08-02-2014 à 23:22:34
n°2219031
sarah991
Posté le 09-02-2014 à 12:17:56  profilanswer
 

Pas de réponse :(

n°2219041
honrisse
Posté le 09-02-2014 à 13:51:26  profilanswer
 

sarah991 a écrit :

j'ai fait un point d'arret sur la ligne:  

Code :
  1. int c2 = l[i+1].lastIndexOf(" " ) +1

; où le programme signale l'erreur
je parle de i+1 dans cette ligne
ma 1ere liste contient 7 cases
en incrémentant i à chaque fois par f5, la ligne est vert jusqu'à i=6 quand je fais encore une fois f5, elle devient rouge


 

Code :
  1. for (int i = 0; i < list.length - 1; i++) {


 
Il ne devrait pas y avoir de dépassement de tableau : la boucle va de 0 à list.length - 2 (signe strictement inférieur) avec length qui renvoie la taille du tableau.
Il faut que le critère d'arrêt de la boucle for soit bien définie.
Si vous avez un doute utilisez des System.out.println pour afficher la valeur des variables.
 

Code :
  1. String[] list = new String[] { "arbre 0.56887", "deee 12.589",
  2.    "cfdss 3.589", "dett 6.589155", "dfrzz 5.69875" };
  3.  boolean swap = true;
  4.  do {
  5.   swap = false;
  6.   for (int i = 0; i < list.length - 1; i++) {
  7.    System.out.println("i=" + i + " ; i+1=" + (i+1) + " ; list.length=" + list.length);
  8.    int c1 = list[i].lastIndexOf(" " ) + 1;
  9.    int c2 = list[i + 1].lastIndexOf(" " ) + 1;
  10.    try {
  11.     if (Float.valueOf(list[i].substring(c1)) < (Float
  12.       .valueOf(list[i + 1].substring(c2)))) {
  13.      swap = true;
  14.      String a = list[i];
  15.      list[i] = list[i + 1];
  16.      list[i + 1] = a;
  17.     }
  18.    } catch (NumberFormatException e) {
  19.     e.printStackTrace();
  20.    }
  21.   }
  22.  } while (swap);
  23.  for (String s : list) {
  24.   System.out.println(s);
  25.  }


 
Enfin, vu que la dernière fois l'erreur était NullPointerException, peut être que le tableau contient un String null.
Avant de faire le tri, affichez ce qu'il y a dans la liste pour vérifier :  

Code :
  1. for (String s : list) {
  2.   System.out.println(s);
  3.  }

n°2219044
sarah991
Posté le 09-02-2014 à 14:51:26  profilanswer
 

Merci beaucoup honrisse :)
j'ai changer ma liste par une liste dynamique(ArrayList) et ça marche enfin  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  tri d'une liste et débogage

 

Sujets relatifs
JCombobox : comment remettre la liste à 0?Retirer une personne d'une liste de diffusion avant envoi
Problème création liste par VBA[Rés]Incrémentation, redimenssionnement, valeur d'une liste modifiable
Copier une partie d'une liste doublement chaînéeListe de puces sur un blog : personnalisation
Garder en mémoire une liste déroulante[Résolu] Détecter le sens de parcours d'une liste de coordonnées
Afficher une Liste.Problème Scrit qui liste les fichiers
Plus de sujets relatifs à : tri d'une liste et débogage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR