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

Langage Java Discussion :

problème boucle Java


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut problème boucle Java
    Bonjour,

    Je débute et j'essaye de faire un petit jeu, mais je n'arrive pas à ajouter une boucle à mes conditions.

    En fait, je veux forcer l'utilisateur à entrer "1", "2" ou "3", et le faire recommencer tant que ce n'est pas le cas, puis à sortir de ma boucle quand c'est fait.

    J'ai l'impression d'avoir tout essayé, while, do/while.. Je bloque vraiment..


    Je n'y arrive que si je demande des "int", mais si l'utilisateur entre des lettres ça bug... Aussi j'ai presque réussi un autre essai mais je ne sortais pas de ma boucle et cela me sortait le "println" d'une de mes 3 conditions à l'infini....

    Si vous avez un peu de temps pour regarder : (j'ai enlevé mes tentatives de boucles)

    Merci , Damien




    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
    //choix du coup Boxeur1
     
    	System.out.println(nomBoxeur1 + " choisi le coup que tu vas tenter:");
     
    	System.out.println("1 = Direct, 80% (crit 8%) d'infliger 3 points de dégâts");
     
    	System.out.println("2 = Crochet, 60% (crit 6%)d'infliger 6 points de dégâts");
     
    	System.out.println("3 = Uppercut, 40% (crit 4%)d'infliger 9 points de dégâts");
     
    	System.out.println("Entre 1, 2 ou 3");
     
     
    	String coup = " ";
     
    	Scanner clavier = new Scanner (System.in);
     
    	coup = clavier.nextLine(); 
     
     
    	switch (coup)
    {
     
    	case "1":
     
    	System.out.println("Tu balances un direct !");
     
    	break;
     
     
    	case "2":
     
    	System.out.println("Tu balances un crochet !");
     
    	break;
     
     
    	case "3":
     
    	System.out.println("Tu balances un uppercut !");
     
    	break;
     
     
    	default:
     
    	System.out.println("Entre 1, 2 ou 3:");
     
    	coup = clavier.nextLine();
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ton problème est exactement le même que celui présenté dans cette discussion : http://www.developpez.net/forums/d16...va-algorithme/.

    Il n'y aucune différence si le choix est un int ou une String, dans le traitement de boucle ou de choix, sauf éventuellement dans le test : il faut faire un test avec equals() avec des String et un == pour les int.

    Si tu veux faire un test unique par le switch, il te faudra un booléen, ou jouer avec une valeur particulière. Par exemple, ici, j'utilise la valeur chaîne vide) :

    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
    do {
       coup = clavier.nextLine(); 
     switch (coup) {
    	case "1":
    	    System.out.println("Tu balances un direct !");
                break;
    	case "2":
    	    System.out.println("Tu balances un crochet !");
                break;
    	case "3":
                System.out.println("Tu balances un uppercut !");
    	    break;
    	default:
    	    System.out.println("Entre 1, 2 ou 3:");
                coup=""; // si le code est incorrect, on le force à vide
      }
     
    } while( coup.isEmpty() ) // tant que coup est vide on bouble (donc on redemande)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Nikel, ça marche !

    Je ne connaissais pas "isEmpty" ..

    En mettant des ==, !=, equals, des || et des &&, quelquesoit ce que je faisais ça ne fonctionnait pas.

    Merci


    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
     
     
    //choix du coup Boxeur1
    		System.out.println(nomBoxeur1 + " choisi le coup que tu vas tenter:");
    		System.out.println("1 = Direct, 80% (crit 8%) d'infliger 3 points de dégâts");
    		System.out.println("2 = Crochet, 60% (crit 6%)d'infliger 6 points de dégâts");
    		System.out.println("3 = Uppercut,  40% (crit 4%)d'infliger 9 points de dégâts");
    		System.out.println("Entre 1, 2 ou 3");
     
    		String coup = " ";
     
    		do {
     
    			coup = clavier.nextLine();
     
    			 switch (coup) {
    				case "1":
    				    System.out.println("Tu balances un direct !");
    			            break;
    				case "2":
    				    System.out.println("Tu balances un crochet !");
    			            break;
    				case "3":
    			            System.out.println("Tu balances un uppercut !");
    				    break;
    				default:
    				    System.out.println("Entre 1, 2 ou 3:");
    			            coup=""; // si le code est incorrect, on le force à vide
    			  }
     
    			} while(coup.isEmpty());
    					 // tant que coup est vide on bouble (donc on redemande)
     
     
    		System.out.println("ok");

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Le fait que je ne forçais pas "coup" à vide après un échec(1, 2 ou3) devait poser aussi problème. Je remettais coup = clavier.nextLine(); peut-être que cela revient au même ? ou pas ^^

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Daman42 Voir le message
    Le fait que je ne forçais pas "coup" à vide après un échec(1, 2 ou3) devait poser aussi problème. Je remettais coup = clavier.nextLine(); peut-être que cela revient au même ? ou pas ^^
    Le problème avec cette solution, c'est qu'il aurait fallu changer complètement la boucle et les conditions, et ça aurait été beaucoup plus compliqué. En fait, le problème est que tu traites le cas "code incorrect" dans le default du switch, donc dans le bloc qui fait le traitement. Or on doit redemander le code tant qu'il est incorrect, donc ce code, celui qui est dans le case default: doit être dans la boucle, donc ça oblige tout le switch a être dans la boucle. Donc il aurait fallut une condition qui permette à la fois de boucler lorsque c'est faux, et de ne pas le faire quand c'est vrai, sauf la première fois, puisque la première fois, on est dans le cas default parce que le choix est incorrect, et donc il faut au moins boucler une fois dès que le choix est correct, mais ne pas le refaire, sinon on refait l'action correspondant à un choix correct indefiniment. On se retrouve donc à devoir faire une condition différente selon ce qu'on a déjà fait, ou pas encore fait : ça devient une usine à gaz (avec plein de booléens).

    La meilleure solution à mon avis étant de faire ce que j'ai indiqué dans l'autre post. La solution que tu as mise en place ici (à partir de la mienne) à un seul avantage par rapport à la solution de l'autre post : on traite chaque choix à un seul endroit. On peut ajouter donc un nouveau case sans avoir à toucher le reste (sauf le message d'invite). Alors que dans le cas de l'autre post on est obligé de penser à modifier la condition du while si on ajoute un nouveau case dans le switch.

    PS: tu n'es pas obligé d'initialiser coup, c'est toujours ça de gagné.

    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
    String coup;
     
    do {
     
        coup = clavier.nextLine();
     
         switch (coup) {
    	case "1":
    	     System.out.println("Tu balances un direct !");
    	     break;
    	case "2":
    	     System.out.println("Tu balances un crochet !");
    	     break;
    	case "3":
    	     System.out.println("Tu balances un uppercut !");
    	     break;
    	default:
    	     System.out.println("Entre 1, 2 ou 3:");
    	     coup=""; // si le code est incorrect, on le force à vide
    	}
     
    } while(coup.isEmpty());
    System.out.println("ok");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ta rapidité et la clarté de tes réponses, c'est top.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    En fait, je veux forcer l'utilisateur à entrer "1", "2" ou "3", et le faire recommencer tant que ce n'est pas le cas, puis à sortir de ma boucle quand c'est fait.
    J'ai l'impression d'avoir tout essayé, while, do/while.. Je bloque vraiment..
    Je n'y arrive que si je demande des "int", mais si l'utilisateur entre des lettres ça bug..
    Tu essayais probablement de faire . Pour comparer des objets, il ne faut pas utiliser == (qui compare les références), mais la méthode (qui compare le contenu des objets).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine1.equals(chaine2)

Discussions similaires

  1. [XSL] problème boucle
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/04/2006, 17h55
  2. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 19h11
  3. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 12h36
  4. Problème Applet Java et Win XP SP2
    Par octal dans le forum Applets
    Réponses: 4
    Dernier message: 04/02/2006, 10h57
  5. divers problème avec Java et jdbc
    Par chti_juanito dans le forum JDBC
    Réponses: 28
    Dernier message: 31/10/2005, 17h54

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