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
>
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)); } } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
![]()
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.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Partager