tri d'une liste et débogage

tri d'une liste et débogage - Java - Programmation

Marsh Posté le 08-02-2014 à 14:49:17    

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.

Reply

Marsh Posté le 08-02-2014 à 14:49:17   

Reply

Marsh Posté le 08-02-2014 à 19:41:16    

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.  }

Reply

Marsh Posté le 08-02-2014 à 20:11:25    

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
Reply

Marsh Posté le 08-02-2014 à 21:16:06    

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)

Reply

Marsh Posté le 08-02-2014 à 21:28:51    

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
Reply

Marsh Posté le 09-02-2014 à 12:17:56    

Pas de réponse :(

Reply

Marsh Posté le 09-02-2014 à 13:51:26    

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.  }

Reply

Marsh Posté le 09-02-2014 à 14:51:26    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed