Le soucis c'est que J'ai toujours une lettre en trop.
Welcome to DrJava. Working directory is /Users/papa/Desktop/lemotausort
> run AuSort
Mot saisi: [C, O, N, T, I, N, U, E, , , , , , ]
Il y a 8 lettre(s) différente(s) dans le mot CONTINUE
>
Version imprimable
Le soucis c'est que J'ai toujours une lettre en trop.
Welcome to DrJava. Working directory is /Users/papa/Desktop/lemotausort
> run AuSort
Mot saisi: [C, O, N, T, I, N, U, E, , , , , , ]
Il y a 8 lettre(s) différente(s) dans le mot CONTINUE
>
Normal, rien a été changé au code à part un affichage...
Et dans cet affichage, on voit les différentes lettres du mot, et on voit qu'il y a des espaces à la fin du mot !!! Comme on traite les espaces, forcément, ils comptent pour une lettre de plus.
Je rappelle que j'ai écrit :
Comment fait-on pour ne pas compter les espaces ? Et bien, on fait le comptage des lettres si c n'est pas une espace. Donc if ( c!=' ' ) {.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 public class AuSort{ public static void main(String[] args){ for (int num=0; num<1; num=num+1){ char[] unmot = MOOC.motAuSort(); char[] lettres = new char[unmot.length]; // un tableau pour stocker les lettres qu'on rencontre dans le mot int nb=0; // au début on a stocké 0 lettre dans le tableau for (int numlet=0; numlet<unmot.length; numlet=numlet+1) { char c=unmot[numlet]; // la lettre à la position numlet if ( c!=' ' ) { // on ne compte pas les espaces // on cherche si c est dans lettre boolean lettretrouvee=false; // au début on ne l'a pas trouvé, forcément, puisqu'on ne la pas encore cherchée for(int i=0; i<nb; i++) { if ( lettres[i]==c ) { // la lettre est déjà présente, puisqu'on en trouve une égale dans le tableau lettretrouvee = true; // on stocke le fait qu'on l'a trouvée break; // ça, ça n'est pas indispensable, mais comme on a trouvé la lettre, pas la peine de continue à chercher, on peut s'arrêter donc ici. } } // si la lettre n'est pas dans le tableau lettres, on la met dans le prochain emplacement libre, et on passe à l'emplacement libre suivant if ( !lettretrouvee ) { lettres[nb]=c; // on la met dans le prochain emplacement libre nb=nb+1; // on passe à l'emplacement libre suivant } } } // a la fin, le nombre de lettres stockées dans le tableau lettres est le nombre de lettres différentes du mot System.out.println("Il y a "+nb +" lettre(s) différente(s) dans le mot "+new String(unmot)); } } }
Je réussi à faire fonctionné de temps en temps le programme, et comme ultime vérification je l’ai passé au vérificateur du MOOC et voici le message qu’il me met.
Correcteur automatique de l'exercice (Ressource externe)
Echec
Erreur: Nombre de lettre incorrect: peut-être l'espace considéré compté comme une lettre Erreur: nombre de lettres incorrect au test 1 expected:<8> but was:<9>
Programme modifié. ( j'ai mis import java.util.Arrays;
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 import java.util.Arrays; public class AuSort{ public static void main(String[] args){ for (int num=0; num<1; num=num+1){ char[] unmot = MOOC.motAuSort(); char[] lettres = new char[unmot.length]; // un tableau pour stocker les lettres qu'on rencontre dans le mot int nb=0; // au début on a stocké 0 lettre dans le tableau for (int numlet=0; numlet<unmot.length; numlet=numlet+1) { char c=unmot[numlet]; // la lettre à la position numlet // on cherche si c est dans lettre boolean lettretrouvee=false; // au début on ne l'a pas trouvé, forcément, puisqu'on ne la pas encore cherchée for(int i=0; i<nb; i=i+1) { if ( lettres[i]==c ) { // la lettre est déjà présente, puisqu'on en trouve une égale dans le tableau lettretrouvee = true; // on stocke le fait qu'on l'a trouvée break; // ça, ça n'est pas indispensable, mais comme on a trouvé la lettre, pas la peine de continue à chercher, on peut s'arrêter donc ici. } } // si la lettre n'est pas dans le tableau lettres, on la met dans le prochain emplacement libre, et on passe à l'emplacement libre suivant if ( !lettretrouvee ) { lettres[nb]=c; // on la met dans le prochain emplacement libre nb=nb+1; // on passe à l'emplacement libre suivant } } // a la fin, le nombre de lettres stockées dans le tableau lettres est le nombre de lettres différentes du mot System.out.println("Il y a " + nb + " lettres différentes dans le mot "+new String(unmot)+"."); } } }
Super
Merci beaucoup pour votre précieuse aide et votre patience, qui m'ont permis de mieux comprendre les erreurs de mon programme et de valider cet exercice.
Je vous remercie de tout coeur et vous souhaite une bonne continuation.
Christian
:D
Inutile. C'était juste pour pouvoir faire System.out.println("Mot saisi: "+Arrays.toString(unmot)); pour savoir quelles lettres il y avait dans le mot. Ce n'est pas la peine de laisser ça, donc l'import non plus.
Il doit y avoir un autre caractère à ne pas compter, ou un autre truc, mais comme je ne peux pas deviner les mots générés par ton truc et les caractères qu'il y a dans ces mots, qu'est-ce que tu veux que je te réponde ? A part que tu peux toi-même regarder les caractères qui sont comptés en trop et modifier le code pour que ça ne les compte pas. Après tout, tu as tout ce qu'il te faut maintenant pour le faire tout seul.
[edit] bah, maintenant tu dis que ça fonctionne... dionc c'est bone alors.