Problème de code avec une boucle Do while
Bonjour à tous,
je débute dans mon apprentissage Java, et je suis actuellement sur un exercice qui consiste à deviner une combinaison de chiffres générée par l'ordinateur. Mon problème est le suivant; lorsque je trouve la combinaison je devrais pouvoir passer à la suite du programme mais je reste bloqué à l'intérieur de ma boucle "n°2" (pour en sortir il faut que je dépasse le nombre d'essais autorisés). J'ai essayé de trouver la solution en cherchant à droite à gauche, mais je cale. Si une âme charitable peut m'aider à comprendre d'ou vient le problème, ce serait super!
import java.util.Scanner;
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
| public class EssaiCode {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
final int NB_CHIFFRE = 4;
final int NB_TOUR = 2;
int nbTour = 0;
char reponse = ' ';
int max = 10;
int [] combiOrdi = new int [NB_CHIFFRE];
int [] combiJoueur = new int [NB_CHIFFRE];
do { // DO n°1
// Accueil jeu +/-:
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 " + NB_TOUR + " essais maximum");
System.out.println("Chaque saisie de chiffre devra être validée avec la touche ENTER");
System.out.println("----------------------------------");
// je génère une combinaison aleatoire:
for (int i = 0; i < NB_CHIFFRE; i++) {
combiOrdi [i] = (int) (Math.random() * max);
System.out.print(combiOrdi [i]);
}
do { // DO n°2
// je rentre les 4 chiffres de ma combinaison:
for (int i = 0; i < NB_CHIFFRE; i++) {
combiJoueur [i] = sc.nextInt();
}
/*TEST
System.out.println(combiJoueur[0]);
System.out.println(combiJoueur[1]);
System.out.println(combiJoueur[2]);
System.out.println(combiJoueur[3]);
*/
// je compare les 2 combinaisons:
int i = 0;
for (i = 0; i < combiJoueur.length; 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++;
// J'indique le nombre d'essais réalisé
System.out.println("essais n°" + nbTour + " sur " + NB_TOUR+ " essais possibles.");
//--> Je reste dans ma boucle tant les combi sont différentes et le max de tour non atteint
} while ( combiOrdi.equals(combiJoueur) || nbTour < NB_TOUR ); // WHILE n°2
// TEST
System.out.println("sorti de la boucle 2");
do {// DO n°3
if (! combiOrdi.equals(combiJoueur) && nbTour > NB_TOUR) {
System.out.println("Perdu");
} else if ( combiOrdi.equals(combiJoueur)) {
System.out.println("Gagné");
}
System.out.println("Voulez-vous recommencer? (O/N): ");
reponse = sc.next().charAt(0);// j'ai pas mis nextLine() sinon j'avais une exception
if (reponse != 'O' && reponse != 'N') {
System.out.println("Le caractère entrée et invalide");
}
} while (reponse != 'O' && reponse != 'N'); // WHILE n°3
if (reponse == 'N') {
System.out.println("Au revoir");
}
} while (reponse == 'O');
}
} |