Bonjour,
J'étais très content d'un de mes programmes, mais il n'était pas optimisé. J'ai arrangé ça, mais il y a plusieurs bizarreries. voici le nouveau code.
énumérations des bizarreries.
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
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 package vraiGrandMaitrePendu; import java.util.Random; import java.util.Scanner; class MortPenduLove { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); Random myRandom = new Random(); char Devine; String Solution = "SolutionTemp"; String verifie = "MadameChantilly"; int RandomNumber = 0; int Gagnerez = 0; int Perdrez = 0; char[] tabCharSolution; char [] tabCharDevine; char [] pr = new char [8]; String [] tabMotSolution = {"vraiment", "affreux", "pareil", "mannequin"}; // c'est un pendu, donc il y avait vraiment beaucoup de possibilités (environ 100), j'ai tout raccourci. while(true) { RandomNumber = myRandom.nextInt(tabMotSolution.length) - 1; Solution = tabMotSolution [RandomNumber]; tabCharSolution = Solution.toCharArray(); tabCharDevine = new char [Solution.length()]; for(int i = 0; i < Solution.length(); i++) { tabCharDevine [i] = '*'; } for(int i = 0; i < pr.length; i++) { pr[i] = ' '; } System.out.println("Bienvenue au Pendasio, jeu du pendu!"); System.out.println("Pensez-y : pour vous aider, tous les mots avec accents"); System.out.println("(graves, aigus, circonflexes... cédilles..) ont été supprimés!"); System.out.println("Tous les mots à trouver sont exclusivement en minuscule."); while(!verifie.equals(Solution) && Perdrez < 8) { System.out.println("Choisissez une lettre."); Devine = keyboard.findWithinHorizon(".", 0).charAt(0); for(int i = 0; i < Solution.length(); i++) { if(Devine == tabCharSolution [i]) { tabCharDevine[i] = Devine; Gagnerez = 1; } } if(Gagnerez == 0) { Perdrez++; } switch(Perdrez){ case 1: pr[1] = '|'; break; case 2: pr[2] = '0'; break; case 3: pr[3] = '/'; break; case 4: pr[4] = '|'; break; case 5: pr[5] = '\\'; break; case 6: pr[6] = '|'; break; case 7: pr[7] = '/'; break; case 8: pr[8] = '\\'; } System.out.println(" ____________"); System.out.println("| " + pr[1]); System.out.println("| " + pr[2]); System.out.println("| " + pr[3] + pr[4] + pr[5]); System.out.println("| " + pr[6]); System.out.println("| " + pr[7] + " " + pr[8]); System.out.println("|"); System.out.println("|_______________"); System.out.println(tabCharDevine); Gagnerez = 0; verifie = new String( tabCharDevine ); } System.out.println(); if(Perdrez < 8) { System.out.println("Héehéhé le chocolat, c'est bon pour patatra!"); } else { System.out.println("Désolé... la réponse était : " + Solution + " Mais on recommence?"); } System.out.println(); System.out.println(); Perdrez = 0; for(int i = 0; i < pr.length; i++) { pr[i] = ' '; } } } }
- il souligne la déclaration de la classe MortPenduLove en rouge. c'est la première fois que ça m'arrive.
- quand je force l'execution du code, tout fonctionne jusqu'à que je tape une lettre au clavier.
J'ai plusieurs suspects.Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at vraiGrandMaitrePendu/vraiGrandMaitrePendu.MortPenduLove.main(MortPenduLove.java:95)
voici la modification que j'ai fait pour optimiser le code :
avant, pour afficher le nombre d'erreurs qu'a fait l'utilisateur (que j'ai illustré en construisant un bonhomme qui se construit petit à petit :
|
0
/|\
|
/ \ faites-vous une idée avec l'ancienne version de mon code sous format zip que j'ai joint à ce message.)
je l'avais fait avec une structure switch qui prenait beaucoup de place. Je l'ai réduit en utilisant les tableaux.
Entre deux parties je réinitialise les tableaux pr qui permettent de redessiner le bonhomme en fonction des erreurs,
et j'ai peur qu'il y ait un problème avec la longueur du tableau... (simple supposition insignifiante)
- comme j'aime pouvoir faire des parties à l'infini sans relancer le programme, j'ai mis une boucle while(true) { ... }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for(int i = 0; i < pr.length; i++) { pr[i] = ' '; }
mais du coup comme j'ai importé un Scanner je ne peux pas le fermer à cause de la boucle infinie non?
Si je ne ferme pas le Scanner, j'obtiens une notice keyboard is not closed.
Merci de votre réponse.
Partager