Exercice - Créer une logique de décision imbriquée avec if, else if et else

Terminé

Dans l’unité précédente, vous avez utilisé plusieurs instructions if pour implémenter les règles d’un jeu. Cependant, à la fin de l’unité, vous avez remarqué que des instructions if plus expressives étaient nécessaires pour corriger un bogue subtil dans votre code.

Dans cet exercice, vous allez utiliser les instructions if, else et else if pour améliorer les options de branchement dans votre code et corriger un bogue logique.

Utiliser des instructions if et else au lieu de deux instructions if distinctes

Au lieu d’effectuer deux vérifications pour afficher le message « Vous avez gagné ! » ou « Désolé, vous avez perdu », vous allez utiliser le mot clé else.

  1. Vérifiez que votre code Program.cs correspond au suivant :

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Il s’agit du code que vous avez écrit dans l’unité précédente.

  2. Prenez quelques instants pour examiner les deux instructions if à la fin du fichier :

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Notez que les deux instructions if comparent total à la même valeur numérique. C’est l’occasion idéale d’utiliser une instruction else.

  3. Mettez à jour les deux instructions if comme suit :

    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

    Ici, si total >= 15 a la valeur false, alors le bloc de code suivant le mot clé else est exécuté. Étant donné que les deux résultats sont des opposés associés, il s’agit d’un scénario parfait pour le mot clé else.

  4. Votre fichier Program.cs mis à jour doit contenir le code suivant :

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles!  +2 bonus to total!");
        total += 2;
    }
    
    if ((roll1 == roll2) && (roll2 == roll3))
    {
        Console.WriteLine("You rolled triples!  +6 bonus to total!");
        total += 6;
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    

Modifier le code afin de supprimer le cumul des points bonus pour les doubles et les triples en utilisant l’imbrication

Dans l’unité précédente, vous avez vu qu’un bogue logique subtil a été introduit dans votre application. Vous pouvez résoudre ce problème en imbriquant vos instructions if.

L’imbrication vous permet de placer des blocs de code à l’intérieur d’autres blocs de code. Dans ce cas, vous imbriquez une combinaison d’instructions if et else (vérification des doubles) dans une autre instruction if (vérification des triples) pour empêcher l’attribution des deux bonus.

  1. Modifiez votre code pour qu’il corresponde à celui de la liste de codes suivante :

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    
    if (total >= 15)
    {
        Console.WriteLine("You win!");
    }
    else 
    {
        Console.WriteLine("Sorry, you lose.");
    }
    
    
  2. Prenez quelques instants pour examiner les instructions if imbriquées.

    L’objectif est de créer une construction if-else interne où les deux résultats sont des opposés associés, puis d’utiliser les résultats opposés (if/true et else/false) afin d’attribuer les points bonus pour les triples et les doubles. Pour y parvenir, vérifiez les doubles dans l’instruction if externe, puis les triples dans l’instruction if interne. Ce modèle garantit que si la vérification interne des triples retourne false, votre bloc de code else peut attribuer les points pour les doubles.

    Vous allez à présent « coder en dur » les résultats de vos trois lancers afin de tester la logique de votre code.

  3. Créez une ligne de code vide au-dessus de la ligne où total est déclaré et initialisé.

  4. Pour tester un lancer de doubles, entrez le code suivant :

    roll1 = 6;
    roll2 = 6;
    roll3 = 5;
    

    Le codage en dur des trois variables roll vous permet de tester le code sans avoir à exécuter l’application des dizaines de fois.

  5. Dans le menu Fichier Visual Studio Code, cliquez sur Enregistrer.

  6. Dans l’affichage EXPLORATEUR, pour ouvrir un terminal à l’emplacement de votre dossier TestProject, cliquez avec le bouton droit sur TestProject, puis sélectionnez Ouvrir dans le terminal intégré.

    Un panneau Terminal doit s’ouvrir et doit inclure une invite de commandes indiquant que le Terminal est ouvert à l’emplacement de votre dossier TestProject.

  7. À l’invite de commandes terminal, pour exécuter votre code, tapez dotnet run , puis appuyez sur Entrée.

    Quand votre code s’exécute, vous devriez voir :

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Pour tester un lancer de triples, mettez à jour vos variables de lancer codées en dur comme suit :

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. Dans le menu Fichier Visual Studio Code, cliquez sur Enregistrer.

  10. Dans l’affichage EXPLORATEUR, pour ouvrir un terminal à l’emplacement de votre dossier TestProject, cliquez avec le bouton droit sur TestProject, puis sélectionnez Ouvrir dans le terminal intégré.

  11. À l’invite de commandes terminal, pour exécuter votre code, tapez dotnet run , puis appuyez sur Entrée.

    Quand votre code s’exécute, vous devriez voir :

    Dice roll: 6 + 6 + 6 = 18
    You rolled triples!  +6 bonus to total!
    You win!
    
    

Utiliser des instructions if, else et else if pour accorder une récompense au lieu d’afficher un message « gagné » ou « perdu »

Afin de rendre le jeu plus amusant, vous pouvez remplacer les messages « gagné » ou « perdu » par des récompenses fictives pour chaque score. Vous pouvez offrir quatre récompenses. Cependant, le joueur ne doit gagner qu’une seule récompense :

  • Si le joueur obtient un score supérieur ou égal à 16, il remporte une voiture.
  • Si le joueur obtient un score supérieur ou égal à 10, il remporte un ordinateur portable.
  • Si le joueur obtient un score égal à 7, il gagne un voyage.
  • Sinon, le joueur gagne un chaton.
  1. Modifiez le code des étapes précédentes pour qu’il corresponde à celui de la liste de codes suivante :

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        if ((roll1 == roll2) && (roll2 == roll3))
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6;
        }
        else
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    
        Console.WriteLine($"Your total including the bonus: {total}");
    }
    
    if (total >= 16)
    {
        Console.WriteLine("You win a new car!");
    }
    else if (total >= 10)
    {
        Console.WriteLine("You win a new laptop!");
    }
    else if (total == 7)
    {
        Console.WriteLine("You win a trip for two!");
    }
    else
    {
        Console.WriteLine("You win a kitten!");
    }
    
    
  2. Prenez quelques instants pour passer en revue la construction if-elseif-else mise à jour.

    Les instructions if, else if et else vous permettent de créer plusieurs conditions exclusives en tant qu’expressions booléennes. Autrement dit, lorsque vous souhaitez qu’un seul résultat se produise, mais que vous avez plusieurs conditions et résultats possibles, utilisez autant d’instructions else if que vous le souhaitez. Si aucune des instructions if et else if ne s’applique, le bloc de code else final est exécuté. L’instruction else est facultative, mais elle doit venir en dernier si vous choisissez de l’inclure.

  3. Utilisez la technique consistant à coder temporairement en dur les variables roll pour tester chaque message.

Récapitulatif

  • La combinaison d’instructions if et else vous permet de tester une condition, puis de produire l’un des deux résultats. Le bloc de code pour if est exécuté quand l’expression booléenne a la valeur true, tandis que le bloc de code pour else est exécuté quand l’expression booléenne a la valeur false.
  • Vous pouvez imbriquer des instructions if pour limiter les conditions possibles. Toutefois, il est préférable d’utiliser les instructions if, else if et else.
  • Utilisez les instructions else if pour créer plusieurs conditions exclusives.
  • L’instruction else est facultative, mais elle doit venir en dernier si elle est incluse.