Bonjour,
Ne fonctionne pas mais affiche "La lettre [1 à 4] = [la lettre que j'ai entrée]"
Version imprimable
Bonjour,
Ne fonctionne pas mais affiche "La lettre [1 à 4] = [la lettre que j'ai entrée]"
Désolé, j'ai modifíé la méthode verifierSiValide() et je t'en ai envoyé une autre:
J'édite celle envoyée par erreur en la remplacant par la bonne (j'espère !!!).
Dan
Bonjour,
Le code fonctionne, mais seulement si j'entre "RBOVJFIN". Il ne veut rien savoir si j'entre par exemple "RBIN", il vérifie si les lettres entrées correspondent à tous les éléments du tableau et non s'il correspondent à certains éléments du tableau
Merci
Il faut que tu me dises ce que tu veux exactement, car on part "dans tous les sens!" alors dis moi au minimum:
-combien de lettres aléatoires doivent-elles être créées 4, 8, 100, ... mais toujours de cette longueur (par exemple 4), autre ?
-combien de lettres l'utilisateur doit-il entrer, un nombre fixe (par exemple 4), un nombre quelconque mais de longueur
maxi la longueur des lettres aléatoire(par exemple 1 à 4), autre ?
-Si tu as bien compri que les nombres aléatoires (par exemple 4) doivent être les indices d'accès (par exemple 0 à 3)
au tableau LES_LETTRES[] qui ne doit contenir que des lettres ( par exemple {"R", "B", "O", "V", "J", "F", "I", "N"} )
si tu veux que la combinaison des lettres aléaoires générées soit 4 des lettres de ce tableau.
Bien entendu, si le tableau contient TOUTES les lettres de l'alphabet, les 4lettres générées seront 4 des lettres de l'alphabet...
-si on doit vérifier que chaque lettre saisie est une des 4 lettres aléatoires quelle que soit sa position dans la saisie.
Parceque tu dis soit que tu entres 4 lettres soit que tu entres RBOVJFIN...
Cordialement,
Dan
Ps,
Le code de la méthode verifierSiValide() ne fonctionne que si le nombre de lettres aléatoires EST 4,
et que si la longueur saisie EST 4...
Bonjour,
1- Le programme choisit premièrement quatre lettres parmi "RBOVJFIN" (Il peut y'avoir des lettres qui se répètent (BBOV) par exemple.
2- L'utilisateur doit entrer quatre lettres parmi "RBOVJFIN" pour tenter de deviner si ce sont elles qui ont été choisies par le programme.
3- La position des quatre lettres entrées n'importe pas (NOVI) par exemple, pourvu qu'elles soit contenues dans "RBOVJFIN".
Merci
Re,
"1- Le programme choisit premièrement quatre lettres parmi "RBOVJFIN" (Il peut y'avoir des lettres qui se répètent (BBOV) par exemple."
Donc à partir de static final String[] TABLEAU_DES_LETTRES = {"R", "B", "O", "V", "J", "F", "I", "N"};
"2- L'utilisateur doit entrer quatre lettres parmi "RBOVJFIN" pour tenter de deviner si ce sont elles qui ont été choisies par le programme."
Oui c'est sont intérêt s'il veut minimiser le nombre de coups joués et tant pis s'il entre par exemple "WXYZ".
"3- La position des quatre lettres entrées n'importe pas (NOVI) par exemple, pourvu qu'elles soit contenues dans "RBOVJFIN"."
OK
@+
Bonjour,
J'ai oublié de préciser que si au moins une lettre parmi les quatre entrées par l'utilisateur ne correspond à aucune lettre dans le tableau (RBVG) par exemple, car le "G" n'est pas dans mon tableau, on lui redemande une autre sans tenir en compte sa combinaison précédente.
Salut,
Je ne sais pas avec quelle classe tu testes la méthode verifierSiValide(), alors je de poste le code complet (Deviner3.java):
Test ce code et dis moi si verifierSiValide(); correspond à ce que tu veux.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 import java.util.Random; import java.util.Scanner; import java.io.IOException; import java.util.regex.Pattern; import java.util.regex.Matcher; public class Deviner3 //REMPLACÉE PAR DevineQuatreLettres { private static Scanner scan; // avec seulement: "RBOVJFIN"; private static final String[] TABLEAU_DES_LETTRES = {"R", "B", "O", "V", "J", "F", "I", "N"}; private static String lettresAuHasard = ""; private static String jouerPartie = ""; private static String reJouerPartie = ""; private static String combinaisonEntree = ""; private static int aleatoire; private static char[] lettresGenerees; // = new char [4]; (longueur inutile) private static char[] lettresJouees; // = new char [4]; (longueur inutile) private static int nombreDeLettres = 0; private static int essai = 0; private static int valide = 0; private static int nonValide = 0; private static boolean recommencer = true; public static void main(String[] args) throws IOException { scan = new Scanner(System.in); // import java.util.Scanner; while(recommencer) { recommencer = false; afficherRegles(); demanderSiExecutionDuJeu(); demanderCombinaison(); faireAutrePartie(); } try { scan.close(); } catch (Exception e) { e.printStackTrace(); } } private static void afficherRegles() { System.out.println("\nLe programme fabrique automatiquement une suite de quatre lettres\n" + "que l'utilisateur tentra de deviner en un maximum de dix coups.\n" + "S'il n'y parvient pas lors de ces dix essais ou s'il quitte le jeu,\n" + "la partie est perdue.\n\n" + "Bonne chance! "); System.out.println("-------------------------------------------------------------------"); } private static void demanderSiExecutionDuJeu() throws IOException { if (!reJouerPartie.equalsIgnoreCase("oui")) // si rejouerPartie n'est pas oui c'est donc non // et on peut demander Voulez-vous jouer une partie ? { System.out.print("\nVoulez-vous jouer une partie ? (non pour quitter),\n" + "<autre> pour jouer: "); jouerPartie = scan.nextLine(); if(!jouerPartie.equals("non")) jouerPartie = "oui"; } if(!jouerPartie.equalsIgnoreCase("non")) // si la saise n'est pas non ou NON c'est oui genererLettres(); // appel la méthode qui génère les 4 lettres aléatoires else { System.out.println("FIN"); System.exit(0); } } private static void genererLettres() { for (int i = 0; i < 4; i++) { /* * * Le but de cette méthode est de créer un tableau de char (char[] lettresGenerees) * qui permettra ce comparer char par char les caractères entrés avec les * caracrères générés et donner certaines indications pour le choix suivant. * * À chacun des 4 tours de la boucle, on génère au hasard un nombre de 0 à 7 * dans l'int aleatoire. Ce nombre est en fait l'indice de la lettre qui lui * correspond dans le tableau (String[] TABLEAU_DES_LETTRES). * * Ensuite la lettre est concaténée dans String lettresAuHasard. * * Enfin, à la sortie de la boucle, le tableau est créée. * */ //aleatoire = new Random().nextInt(25) - 0; //On génère un nombre de 0 à 25 aleatoire = new Random().nextInt(7) - 0; //On génère un nombre de 0 à 7 lettresAuHasard += TABLEAU_DES_LETTRES[aleatoire]; //concaténation } lettresGenerees = lettresAuHasard.toCharArray(); //Ce print sera bien entendu supprimé System.out.println("On doit trouver: " + lettresAuHasard + " << supprimer en fin de tests"); } private static void demanderCombinaison() throws IOException { boolean encore = true; boolean erreur = true; while(encore) { while(erreur) { erreur = false; // sera remis true si erreur essai++; System.out.print("\nEntrez votre combinaison pour l'essai " + essai + "\n<enter> pour stopper: "); combinaisonEntree = scan.nextLine(); combinaisonEntree = combinaisonEntree.toUpperCase(); //le tableau des lettres // ne contenant que des majuscules, les comparaisons de lettres seront faites // de majuscule à majuscule if(combinaisonEntree.length() == 0) //si la longueur entrée c'est terminé { System.out.println("Vous avez perdu par abandon !!!"); System.exit(0); // on ne demande même pas si on veut rejouer } else { verifierSiQuatreLettres(); // on vérifie qu'on a bien 4 lettres if(nombreDeLettres != 4) { System.out.println("Vous devez saisir quatre lettres !!!"); essai--; // on annule l'incrémentation de nombre de coups joués erreur = true; //permet de redemander la saisie } else { lettresJouees = combinaisonEntree.toCharArray(); System.out.println(combinaisonEntree); verifierSiValide(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<< if(valide == 4) break; erreur = true; } } } break; } } private static void verifierSiQuatreLettres() { /* * * Ici nous vérifions que le choix du joueur est bien de QUATRE LETTRES MAJUSCULES. * Le tableau TABLEAU_DES_LETTRES[] contenant les lettres EN MAJUSCULES, * le joueur peut quand même saisir ses quatre lettres comme il veut, en minuscules * ou en majuscules car son choix est converti immédiatement en MAJUSCULES. * */ // "RBOVJFIN" nombreDeLettres = 0; Pattern pattern = Pattern.compile("[A-Z]"); // compte ce qui est A à Z Matcher matcher = pattern.matcher(combinaisonEntree); while(matcher.find()) { nombreDeLettres++; } // Le nombre de lettres sera testé au retour de cette méthode... } private static void verifierSiValide() throws IOException { // "RBOVJFIN" boolean err = false; //int valide = 0, nonValide = 0; // déclarées en variables de classe valide =0; nonValide = 0; for (int i = 0; i < 4; i++) { char test3 = combinaisonEntree.charAt(i); for (int j = 0; j < 4; j++) { char test4 = lettresAuHasard.charAt(j); if (test3 == test4) { err = false; valide++; break; } else //on doit vérifier si cette lettre existe ailleurs err = true; } if(err) nonValide++; } if (nonValide >0) System.out.println("Erreur!"); else System.out.println("\nBravo c'est bon en " + essai + " coup" + (essai>1?"s":"") + " !!!"); System.out.println("valide = " + valide); System.out.println("nonValide = " + nonValide); } private static void faireAutrePartie() { System.out.print("\nVoulez-vous faire une autre partie ? (non pour quitter),\n" + "<autre> pour rejouer: "); reJouerPartie = scan.nextLine(); if (reJouerPartie.equalsIgnoreCase("non")) System.exit(0); else { reJouerPartie = "oui"; //jouerPartie = "oui"; recommencer = true; lettresAuHasard = ""; essai = 0; } } }
Si tu dois l'utilser avec ton propre code il faudra peut-être qu'on adapte ce dernier.
Dan
Édit : j'ai finalement réussi après plusieurs dizaines tentatives à l'adapter, tout fonctionne. Merci beaucoup pour ton aide ;)