IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème de code avec une boucle Do while


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Par défaut 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 java : 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
    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');
    	} 
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    Salut,

    Ta condition dans ta boucle do/while numero 2 n'est pas correcte.

    Ta condition actuelle est : "Tant que les deux arrays sont identiques OU que le nombre de tour n'est pas maximal recommence"
    elle doit etre : "Tant que les deux arrays sont differents ET que le nombre de tour n'est pas maximal recommence"

    Soit d'un point de vue code :

    Cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } while (! Arrays.equals(combiOrdi, combiJoueur) && nbTour < NB_TOUR );
    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } while ( combiOrdi.equals(combiJoueur) || nbTour < NB_TOUR ); // WHILE n°2
    Tu remarqueras que la methode pour comparer les contenus d'un array est Arrays.equals(arr1, arr2).

    Je te conseil egalement de decomposer ton code en methodes.

    Bonne chance

  3. #3
    Membre averti
    Homme Profil pro
    amateur
    Inscrit en
    Juillet 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 14
    Par défaut
    Bonjour Yonito,

    Merci beaucoup pour ta réponse! Je vais faire les changements et suivre tes conseils pour faire des méthodes.

    Bonne fin de journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une boucle do while
    Par azertym dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/02/2012, 14h37
  2. [AC-2007] Probléme avec une boucle DO While
    Par theBinette dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2010, 17h10
  3. Réponses: 3
    Dernier message: 12/03/2009, 18h08
  4. génération de code avec une boucle
    Par fandeDB dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/11/2007, 11h26
  5. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo