Exercice - Utiliser les instructions « else » et « else if »

Effectué

Précédemment, nous avons utilisé plusieurs instructions if pour implémenter les règles de notre jeu. Cependant, lorsque nous nous sommes arrêtés dans l’unité précédente, il y avait une opportunité d’amélioration. Nous pouvons apporter une amélioration à l’expressivité du code et une autre pour corriger un bogue subtil dans notre code.

Améliorer le code et corriger un bogue en ajoutant des instructions else et else if

Ensuite, nous allons utiliser des variantes de l’instruction if pour améliorer notre code et corriger un bogue logique.

Étape 1 - 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 », nous allons utiliser le mot clé else. 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))
{
    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.");
}

Ici, si total >= 15 a la valeur false, le bloc de code situé après le mot clé else sera exécuté. Ces deux options étant diamétralement opposées, ce scénario est un parfait exemple de moment où il faut utiliser le mot clé else.

Étape 2 - Utiliser une imbrication pour supprimer le cumul de bonus pour les doubles et les triples.

Dans l’unité précédente, nous avons créé un bogue de logique subtil dans notre application. Réparons ce bogue en utilisant une imbrication.

L’imbrication nous permet de placer des blocs de code à l’intérieur d’autres blocs de code. Dans ce cas, nous allons imbriquer des instructions if et else (vérification des triples) à l’intérieur d’une autre instruction if (vérification des doubles) pour éviter que les deux se produisent.

Nous imbriquerons la vérification des triples à l’intérieur de la vérification des doubles. Modifiez le code pour qu’il corresponde à celui de la liste de codes suivante :

int roll1 = 6;
int roll2 = 6;
int roll3 = 6;

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.");
}

Pour tester le code sans exécuter l’application plusieurs dizaines de fois, vous pouvez coder en dur de façon provisoire les valeurs des trois variables roll en ajoutant le code suivant devant la ligne où total est déclaré et initialisé.

Pour tester que la vérification des doubles fonctionne :

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

Lorsque vous exécutez le code, vous devez voir ceci :

Dice roll: 6 + 6 + 5 = 17
You rolled doubles!  +2 bonus to total!
You win!

Pour vérifier que les triples fonctionnent, modifiez la valeur de roll3 :

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

Quand vous exécutez le code, vous devriez voir cette sortie :

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

Étape 3 - 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, nous allons remplacer les messages Gagné/Perdu par des récompenses fictives pour chaque score. Nous décernons quatre récompenses. Le joueur ne devrait 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;
    }
}

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!");
}

Notes

Utilisez la technique consistant à coder en dur les variables roll de façon provisoire afin de tester chaque message.

Vous pouvez utiliser les instructions if, else et else if pour créer plusieurs conditions exclusives en tant qu’expressions booléennes. En d’autres termes, 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é. Le else est facultatif, mais doit venir en dernier.

Récapitulatif

  • La combinaison d’instructions if et else permet de tester une condition et d’exécuter un code quand une expression booléenne a la valeur true, et un autre code 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 et else if.
  • Utilisez else if pour créer plusieurs conditions exclusives.
  • else est facultatif, mais il doit toujours venir en dernier.