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 :

boucles while et logique (booléans)


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 19
    Points : 11
    Points
    11
    Par défaut boucles while et logique (booléans)
    Bonjour à tous,

    J'ai un petit souci que je n'arrive pas à résoudre en Java. C'est plus spécifique à la logique mathématique qu'à la syntaxe Java.
    Cela concerne les conditions de sorties d'une boucle while.

    Imaginons qu'on souhaite récupérer une nombre entier entre 0 et 10. On récupère ce nombre au clavier et on recommence tant que l'utilisateur n'a pas mis un nombre entre 0 et 10 :


    On reste dans la boucle tant qu'on n'a pas ce qu'on veut :

    On veut : nb>=0 && nb<=10
    On a pas ce qu'on veut : !(nb>=0 && nb<=10) équivalent à (nb > 10 || nb < 0)
    Ce qui s'écrit :
    do {
    lecture de nb;
    } while (nb > 10 || nb < 0)



    Jusqu'à présent c'est OK pour moi. Imaginons maintenant (et c'est là le problème) qu'on veuille deviner un nombre et que le nombre d'essais doit être inférieur à 3.

    On reste dans la boucle tant qu'on n'a pas ce qu'on veut :

    On veut : nb = nbAdeviner && nbEssai < 3
    On a pas ce qu'on veut : !( nb = nbAdeviner && nbEssai < 3) équivalent à (nb !=nbAdeviner || nbEssai >= 3)
    Ce qui s'écrit :
    do {
    lecture de nb;
    nbEssai++;
    } while (nb !=nbAdeviner || nbEssai >= 3)

    Bien sûr ma condition dans le while est fausse, la bonne réponse est :
    while (nb !=nbAdeviner && nbEssai < 3) et non while (nb !=nbAdeviner || nbEssai >= 3)

    Pourtant je trouve pas d'erreurs dans mon raisonnement

    Merci de m'avoir lu

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Underzeci Voir le message

    On veut : nb = nbAdeviner && nbEssai < 3

    non tu ne veux pas ça, sinon tu dis que tu sort de la boucle uniquement si on trouve avant 3 essai. Toi tu veux sortir de la boucle si on trouve ou si on a dépassé le nombre d'essai. En d'autre termes, dans ton expression, nb = nbAdeviner est une condition de sortie (c'est ce que tu veux obtenir), mais nbEssai < 3 est une condition de continuité de la boucle (tu peux continuer tant qu'on a pas fais 3 essais)
    Ton expression pour sortir de la boucle est nb = nbAdeviner || nbEssai > 3
    ce qui deviens while (nb != nbAdeviner && nbEssai <=3)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    OK merci de la réponse, je crois avoir compris

    En fait j'ai confondu le but du jeu (deviner un nombre en moins de 3 essais , ce qui se traduit bien par on veut : nb == nbDeviner && nbEssai <3) avec la condition de sortie de boucle (c'est à dire on veut sortir si nb == nbDeviner || nbEssais > 3), c'est bien ça ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    c'est bien ça

    une fois sorti de ta boucle tu refait un test pour tester ton résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do{...}while(...);
    if( nb == nbVoulu && nbEssai < 3 ) System.out.println("gagné"); 
    else System.out.println("perdu");
    dans le code du dessus tu est obliger de tester nb et nbEssai car tu sort pas de la boucle avant d'avoir demander une 3eme saisie a l'utilisateur.
    du coup une autre methode pour gérer ton résultat et utiliser les break pour sortir de la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    boolean gagner = false;
    do{
       nbEssai++;
       if( nbEssai >= 3) break;
    // test du nombre d'essai au début pour éviter une saisi inutile le break fait sortir de la boucle.
       scan nb;
       if( nb == nbVoulu ) { gagner = true; break; }
    while(true);
     
     
    if(gagner) System.out.println("gagné");
    else System.out.println("perdu");

    après chacun ses préférence pour les méthodes a utilisé

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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