Problème d'utilisation avec les getter et les setter
Bonjour à tous,
Toujours en phase d'apprentissage, je sollicite votre aide car je bloque sur un problème que je n'arrive pas à solutionner avec les exemples que j'ai pu trouvé sur internet.
Dans un premier temps j'ai codé un petit jeu de combinaison qui fonctionnait correctement, ou j'ai mis le concept d'héritage en place. Afin d'améliorer mon code, j'ai ensuite basculé mes attributs qui étaient public en private afin d'obtenir une meilleure encapsulation. J'ai donc mis en place des getter et des setter afin d'accéder aux attributs à partir d'une autre classe, mais quand je lance le jeu, je me retrouve avec une java.lang.arrayindexoutofboundexception:0. En fait, je n'arrive pas à reproduire les exemples d'utilisation des getter et setter que j'ai vu, sur mon propre code :(
Voici mon code (désolé pour les spécialistes, je pense que certains vont saigner des yeux), merci d'avance:
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 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
| package com.games;
import java.util.Arrays;
import java.util.Scanner;
public class MoreLessGame {
Scanner saisi = new Scanner(System.in);
private int nb_chiffre;
private int max_tour;
private int nbTour = 0;
private char reponse = ' ';
private int max = 10;
private int [] combiOrdi = new int [nb_chiffre];
private int [] combiJoueur = new int [nb_chiffre];
public MoreLessGame (int nb_chiffre, int max_tour) {
this.nb_chiffre = nb_chiffre;
this.max_tour = max_tour;
}
public int getMax(int max) {
this.max = max;
return max;
}
public void setMax(int max) {
if (max < 0 && max >= 10){
System.err.println("Exception");
} else {
this.max = max;
}
}
public int getNb_chiffre() {
return nb_chiffre;
}
public void setNb_chiffre(int nb_chiffre) {
this.nb_chiffre = nb_chiffre;
}
public int getMax_tour() {
return max_tour;
}
public void setMax_tour(int max_tour) {
this.max_tour = max_tour;
}
public int getNbTour() {
return nbTour;
}
public void setNbTour(int nbTour) {
this.nbTour = nbTour;
}
public char getReponse() {
return reponse;
}
public void setReponse(char reponse) {
this.reponse = reponse;
}
public int[] getCombiOrdi() {
return combiOrdi;
}
public void setCombiOrdi(int[] combiOrdi) {
this.combiOrdi = combiOrdi;
}
public int[] getCombiJoueur() {
return combiJoueur;
}
public void setCombiJoueur(int[] combiJoueur) {
this.combiJoueur = combiJoueur;
}
public int getMax() {
return max;
}
/**
* Accueil du jeu plus ou moins en mode Defense
*/
protected void displayDefense () {
System.out.println("Bienvenu dans le jeu du plus ou moins");
System.out.println("Pour jouer, l'ordinateur va devoir trouver une combinaison que vous avez proposé, de " + nb_chiffre + " chiffres compris entre 0 et 9 "
+ "avec " + max_tour + " essais maximum");
System.out.println("Chaque saisie de chiffre devra être validée avec la touche ENTER");
System.out.println("----------------------------------");
nbTour = 0;
}
/**
* Accueil du jeu plus ou moins en mode Challenger
*/
protected void displayChallenger () {
System.out.println("Bienvenu dans le jeu du plus ou moins");
System.out.println("Pour jouer, vous allez devoir trouver une combinaison de " + nb_chiffre + " chiffres compris entre 0 et 9 "
+ "avec " + max_tour + " essais maximum");
System.out.println("Chaque saisie de chiffre devra être validée avec la touche ENTER");
System.out.println("----------------------------------");
nbTour = 0;
}
/**
* Méthode pour saisir la combinaison du joueur
* @return
*/
protected int[] saisiCombiJoueur (int [] combiJoueur ){
System.out.println("Veuillez entrer votre combinaison secrete: ");
for (int i = 0; i < nb_chiffre; i++) {
combiJoueur[i] = saisi.nextInt();
}
//System.out.println(Arrays.toString(combiJoueur));
return combiJoueur;
}
/**
* Méthode pour générer une combinaison
* @param combiOrdi
* @param max
* @return
*/
protected int[] creerCombiOrdi ( int[] combiOrdi, int max){
for (int i = 0; i < nb_chiffre; i++) {
combiOrdi[i] = (int) (Math.random() * max);
System.out.print(combiOrdi[i]); // pour le mode developper
}
System.out.println();
return combiOrdi;
}
/**
* Méthode pour comparer mes 2 combinaisons et indiquer +/-
* @param combiJoueur
* @param combiOrdi
*/
protected void compareCombi ( int[] combiJoueur, int[] combiOrdi){
for (int i = 0; i < nb_chiffre; i++) {
if (combiJoueur[i] < combiOrdi[i]) {
System.out.print("-");
} else if (combiJoueur[i] > combiOrdi[i]) {
System.out.print("+");
} else {
System.out.print("=");
}
}
System.out.println();
nbTour++;
System.out.println("essais n°" + nbTour + " sur " + max_tour + " essais possibles.");
}
/**
* Méthode qui me permet de générer des chiffres aléatoires pour les propositions de l'ordinateur
* @param combiJoueur
* @param combiOrdi
* @param max
*/
protected void comparBisDefense ( int[] combiJoueur, int[] combiOrdi, int max){
for (int i = 0; i < nb_chiffre; i++) {
if (combiOrdi[i] < combiJoueur[i]) {
combiOrdi[i] = (int) (combiOrdi[i] + (Math.random() * (max - combiOrdi[i])));
}
if (combiOrdi[i] > combiJoueur[i]) {
combiOrdi[i] = (int) ((Math.random() * (combiOrdi[i])));
}
}
System.out.println(Arrays.toString(combiOrdi));
}
/**
* Méthode pour afficher si on a gagné ou perdu
*/
protected void resultDisplay () {
if (!Arrays.equals(combiOrdi, combiJoueur)) {
System.out.println("Désolé, vous avez perdu, la bonne combinaison était " + Arrays.toString(combiJoueur));
} else if (Arrays.equals(combiOrdi, combiJoueur)) {
System.out.println("Bravo vous avez gagné en " + nbTour + " coups");
}
}
/**
* Proposition pour recommencer le jeu
*/
protected void restartGame () {
System.out.println("Voulez vous recommencer? (O/N)");
reponse = saisi.next().charAt(0);
}
}
__________________________________________________________________________________________________
package com.games;
import java.util.Arrays;
public class MoreLessGameModeDefense extends MoreLessGame {
public MoreLessGameModeDefense(int nb_chiffre, int max_tour) {
super(nb_chiffre, max_tour);
}
public void modeDefense () {
do {
displayDefense();
saisiCombiJoueur(getCombiJoueur());
creerCombiOrdi(getCombiOrdi(), getMax());
while (!Arrays.equals(getCombiOrdi(), getCombiJoueur()) && getNbTour() < getMax_tour()) {
compareCombi(getCombiJoueur(), getCombiOrdi());
System.out.println();
comparBisDefense(getCombiJoueur(), getCombiOrdi(), getMax());
resultDisplay();
}
restartGame();
while (getReponse() != 'N' && getReponse() != 'O') {
System.out.println("Le caractère entrée est invalide");
setReponse(saisi.next().charAt(0));
}
if (getReponse() == 'N') {
System.out.println("Merci d'avoir joué, à bientôt!");
}
} while (getReponse() == 'O');
}
}
__________________________________________________________________________________________________________________________
package com.games;
public class MainGames {
public static void main(String[] args) {
MoreLessGameModeDefense essai = new MoreLessGameModeDefense(2, 5);
essai.modeDefense();
}
} |
problème de l'exception résolue
Bonjour,
J'ai résolue le problème de l'exception (j'ai initialisé la variable nb_chiffre), et le code fonctionne. Du coup serait-il possible d'avoir votre avis sur ma façon d'utiliser les getters et les setters dans la méthode ModeDefense?
Merci,