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

JavaScript Discussion :

Boucle Do While avec Switch


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut Boucle Do While avec Switch
    Bonjour, je suis débutant en js, en ce moment j'essaie de faire un petit jeu, et pour commencer on doit choisir le niveau de difficulté entre 1 et 3.
    Mais le programme reste coincé dans la boucle do while servant à verifier qu'on a bien saisie 1,2 ou 3à l'aide d'un switch.

    Qu'est ce qui cloche?
    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
     
    do{
            niveau=prompt("Choisis ton niveau de difficulté entre 1 et 3");
     
            switch (niveau) 
            {
              case "1":
              difficulte=25;break;
              case "2":
              difficulte=50;break;
              case "3":
              difficulte=100;break;
              default:
              niveau=prompt("Je n'ai pas compris votre choix, saisissez une valeur entre 1 et 3");
     
            }     
          }while(niveau!=="1"||"2"||"3");

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    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
    let niveau = 0;
    let difficulte = 100;
     
    do {
        niveau = Number(prompt("Choisis ton niveau de difficulté entre 1 et 3"));
     
        switch (niveau) {
            case 1:
                difficulte = 25;
                break;
            case 2:
                difficulte = 50;
                break;
            case 3:
                difficulte = 100;
                break;
        }
     
        console.log(`niveau = ${niveau}, difficulte = ${difficulte}`);
     
    } while (niveau < 1 || niveau > 3);

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    En effet ca marche avec cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(niveau<"1"||niveau>"3");
    mais pourquoi dans mon cas ça ne marche pas?

    Il y a trop d'arguments?

    Y a t il une limite dans les conditions d'un while?

    Cdt.

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    parce que les tests conditionnels ne s'écrivent pas comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(niveau!=="1"||"2"||"3");
    mais comme ça (1):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ( niveau !== "1" && niveau !== "2" && niveau !== "3" );
    ou encore (2):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while !( niveau==="1" || niveau==="2" || niveau==="3" );
    ou encore (3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while !(['1','2','3'].includes(niveau))


    ou encore encore (4):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (!/^[1-3]$/g.test(niveau))

    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Merci Psychadelic,

    J'ai compris mon erreur, je devais reprendre à chaque fois le nom de la variable avec la condition.

    Parcontre, dans tes exemples, pourquoi une fois tu utilise le && et pour l'inverse (!) le || ?

    As tu plus d'info sur la methode includes que tu as utilisé, ca l'air interessant, on dirait un tableau.

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par nadfri2019 Voir le message
    Par contre, dans tes exemples, pourquoi une fois tu utilises le && et pour l'inverse (!) le || ?
    Il ne s'agit ici que de l'algèbre de Boole (George Boole, 1815-1864)

    c'est une algèbre qui ne fonctionne qu'avec 2 valeurs :
    - la valeur vraie
    - la valeur faux

    Donc elle colle parfaitement avec l’informatique ou toutes les valeurs sont encodées avec 2 valeurs aussi :
    - la valeur 0
    - la valeur 1.

    En informatique la valeur vrai vaut 1, la valeur faux vaut 0
    Dans les langages dérivés du C (comme JavaScript), ont étend la valeur vraie à tout ce qui est ni 0, ni null, ni inexistant.


    Quand en Français tu formules:
    "le niveau doit être différent de 1 ou 2 ou 3"

    en algèbre de Boole cela revient à poser 3 conditions
    condition A => est-ce que le niveau est égal à 1 ?
    condition B => est-ce que le niveau est égal à 2 ?
    condition C => est-ce que le niveau est égal à 3 ?

    Toi, ce que tu recherches pour obliger à reposer la question (par le while)
    il faut que les valeurs A, B et C aient toutes une valeur fausse

    c'est à dire [ A != vrai et B != vrai et C != vrai ]
    c'est un cas de figure ou l'on peut appliquer la loi de Morgan: ( https://fr.wikipedia.org/wiki/Alg%C3...e_de_De_Morgan )

    il ne faut pas que [A==vrai ou B==vrai ou C==vrai]



    Citation Envoyé par nadfri2019 Voir le message
    As tu plus d'info sur la méthode includes que tu as utilisé, ça l'air intéressant, on dirait un tableau.
    Oui, il s'agit bien d'un tableau JavaScript.

    JavaScript est un langage objet, et à ce titre tous ses éléments sont susceptibles d'avoir des méthodes qui leurs soient associées.
    Ont peut même leur créer des méthodes directement (fonctions prototype)

    dans le cas des tableaux ils possèdent la méthode includes dont l'argument est utilisé pour savoir s'il est présent (vrai ou faux) dans le tableau.

    la référence de cette méthode est par la => https://developer.mozilla.org/fr/doc...Array/includes

    * - * - ** -- /*

    pour info : https://developer.mozilla.org/fr/doc...es#Description

    * - * - ** -- /*

    la dernière proposition (4) est fondé sur l'utilisation des expressions régulières (appelées aussi expression rationnelles), un peu plus compliqué à utiliser, mais extrêmement efficace :
    https://developer.mozilla.org/fr/doc...lar_expression
    https://developer.mozilla.org/fr/doc...9guli%C3%A8res

    la proposition 4 => https://developer.mozilla.org/fr/doc...ux/RegExp/test
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Quelque chose de peut être plus clair et maintenable ?
    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
    let niveau = 0;
    let difficulte = 0;
     
    do {
        niveau = Number(prompt("Choisis ton niveau de difficulté entre 1 et 3"));
     
        switch (true) {
            case (niveau===1):
                difficulte = 25;
                break;
            case (niveau===2):
                difficulte = 50;
                break;
            case (niveau===3):
                difficulte = 100;
                break;
        }
     
     
    } while (difficulte===0)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Citation Envoyé par nadfri2019
    Parcontre, dans tes exemples, pourquoi une fois tu utilise le && et pour l'inverse (!) le || ?
    Il ne faut pas négliger, surtout si tu es débutant, la documentation :

  9. #9
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    Il ne s'agit ici que de l'algèbre de Boole (George Boole, 1815-1864)


    c'est à dire [ A != vrai et B != vrai et C != vrai ]
    c'est un cas de figure ou l'on peut appliquer la loi de Morgan: ( https://fr.wikipedia.org/wiki/Alg%C3...e_de_De_Morgan )
    ]
    Super interessant la 2eme loi de Morgan, je comprend nettement mieux maintenant!

    Je pense que je vais utiliser cette methode includes à l'avenir . Parcontre j'avoue n'avoir rien compris à la methode 4. .

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    expression régulière qui teste si la chaine saisie est un seul caractère du rage [1-3] autrement dit si la saisie vaut 1,2 ou 3
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Citation Envoyé par nadfri2019
    Je pense que je vais utiliser cette methode includes à l'avenir
    Attention cette méthode fonctionne avec l'égalité stricte (===).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    console.log([1, 2, 3].includes("2"));
    // > false
    console.log(["1", "2", "3"].includes("2"));
    // > true

  12. #12
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    On peut mettre une condition dans un case?

    Citation Envoyé par SpaceFrog Voir le message
    Quelque chose de peut être plus clair et maintenable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     switch (true) {
            case (niveau===1):
                difficulte = 25;
                break;
            case (niveau===2):
                difficulte = 50;
                break;
            case (niveau===3):
                difficulte = 100;
                break;
        }

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    Il ne s'agit ici que de l'algèbre de Boole (George Boole, 1815-1864)
    A ne pas confondre avec les films....



  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    C'est pas faux ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Invité
    Invité(e)
    Par défaut
    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
    "use strict";
    const niveau_max = 3;
    const difficultes = [25,50,100]; // (index commence à 0)
    let niveau = 0;
    let difficulte = 0;
     
    while (difficulte===0) 
    {
      niveau = Number(prompt("Choisis ton niveau de difficulté entre 1 et "+niveau_max));
      if(niveau>=1 && niveau<=niveau_max)
      {
        difficulte = difficultes[niveau-1];
      }
    } 
    console.log( difficulte );
    Ainsi, si on veut un 4ème niveau de difficulté, il suffit de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const niveau_max = 4;
    const difficultes = [25,50,100,150]; // (index commence à 0)
    Dernière modification par Invité ; 11/09/2019 à 16h34.

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    On peut mettre une condition dans un case?
    ben oui si tu switch sur true
    les cases sont soit true soit false ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  17. #17
    Membre du Club
    Homme Profil pro
    Reconverti Dev Web
    Inscrit en
    Septembre 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Reconverti Dev Web
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2019
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ben oui si tu switch sur true
    les cases sont soit true soit false ...
    Vous avez des cours où on peut apprendre ces details? Je suis les cours de JS, mais il n'explique pas à fond ces petits details du while, du switch ...

    Cdt.

  18. #18
    Membre confirmé
    Homme Profil pro
    OoW
    Inscrit en
    Juin 2019
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Ukraine

    Informations professionnelles :
    Activité : OoW

    Informations forums :
    Inscription : Juin 2019
    Messages : 134
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par jreaux62
    Ainsi, si on veut un 4ème niveau de difficulté, il suffit de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const niveau_max = 4;
    const difficultes = [25,50,100,150]; // (index commence à 0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const difficultes = [25,50,100,150]; // (index commence à 0)
    const niveau_max = difficultes.length; // on n'a plus à mettre à jour
    me semble plus judicieux

  19. #19
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Il ne s'agit ici que de l'algèbre de Boole (George Boole, 1815-1864)
    Citation Envoyé par jreaux62 Voir le message
    A ne pas confondre avec les films....
    effectivement, mais les prénoms ne sont pas les mêmes, ni l'orthographe des noms

    Pierre Boulle (1912-1994) Ingénieur, soldat, écrivain.
    Notamment auteur de " Le Pont de la rivière Kwaï" (1952), La Planète des singes(1963)...
    dont ont été tirés les films éponymes.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

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

Discussions similaires

  1. [XL-2010] Problème boucle Do While avec MyArray() aux tours suivants
    Par Wynelle dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/06/2015, 09h54
  2. Boucle do while avec intnx
    Par sasseur dans le forum SAS Base
    Réponses: 2
    Dernier message: 02/03/2009, 15h21
  3. Boucle do while avec des conditions multiples
    Par UrSuS AmErIcAnUs dans le forum C
    Réponses: 4
    Dernier message: 19/06/2008, 16h13
  4. Boucle Do While avec timer
    Par DDMALO dans le forum C
    Réponses: 1
    Dernier message: 13/06/2008, 00h27
  5. boucle do while avec pl/sql
    Par new_wave dans le forum PL/SQL
    Réponses: 1
    Dernier message: 19/11/2007, 16h02

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