Exercice - Créer une logique de décision imbriquée avec if, else if et else
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.
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.
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
ifcomparenttotalà la même valeur numérique. C’est l’occasion idéale d’utiliser une instructionelse.Mettez à jour les deux instructions
ifcomme suit :if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Ici, si
total >= 15a la valeur false, alors le bloc de code suivant le mot cléelseest 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.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.
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."); }Prenez quelques instants pour examiner les instructions
ifimbriquées.L’objectif est de créer une construction
if-elseinterne 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’instructionifexterne, puis les triples dans l’instructionifinterne. Ce modèle garantit que si la vérification interne des triples retournefalse, votre bloc de codeelsepeut 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.
Créez une ligne de code vide au-dessus de la ligne où
totalest déclaré et initialisé.Pour tester un lancer de doubles, entrez le code suivant :
roll1 = 6; roll2 = 6; roll3 = 5;Le codage en dur des trois variables
rollvous permet de tester le code sans avoir à exécuter l’application des dizaines de fois.Dans le menu Fichier Visual Studio Code, cliquez sur Enregistrer.
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.
À 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!Pour tester un lancer de triples, mettez à jour vos variables de lancer codées en dur comme suit :
roll1 = 6; roll2 = 6; roll3 = 6;Dans le menu Fichier Visual Studio Code, cliquez sur Enregistrer.
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é.
À 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.
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!"); }Prenez quelques instants pour passer en revue la construction
if-elseif-elsemise à jour.Les instructions
if,else ifetelsevous 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’instructionselse ifque vous le souhaitez. Si aucune des instructionsifetelse ifne s’applique, le bloc de codeelsefinal est exécuté. L’instructionelseest facultative, mais elle doit venir en dernier si vous choisissez de l’inclure.Utilisez la technique consistant à coder temporairement en dur les variables
rollpour tester chaque message.
Récapitulatif
- La combinaison d’instructions
ifetelsevous permet de tester une condition, puis de produire l’un des deux résultats. Le bloc de code pourifest exécuté quand l’expression booléenne a la valeurtrue, tandis que le bloc de code pourelseest exécuté quand l’expression booléenne a la valeurfalse. - Vous pouvez imbriquer des instructions
ifpour limiter les conditions possibles. Toutefois, il est préférable d’utiliser les instructionsif,else ifetelse. - Utilisez les instructions
else ifpour créer plusieurs conditions exclusives. - L’instruction
elseest facultative, mais elle doit venir en dernier si elle est incluse.