Übung: Erstellen einer geschachtelten Entscheidungslogik mit „if“, „else if“ und „else“

Abgeschlossen

In der vorherigen Lerneinheit haben Sie mehrere if-Anweisungen verwendet, um die Regeln eines Spiels zu implementieren. Am Ende der Lerneinheit haben Sie jedoch bemerkt, dass ausdrucksstärkere if-Anweisungen erforderlich sind, um einen kleinen Fehler in Ihrem Code zu beheben.

In dieser Übung verwenden Sie if-, else- und else if-Anweisungen, um die Verzweigungsoptionen in Ihrem Code zu verbessern und einen Logikfehler zu beheben.

Verwenden von if- und else-Anweisungen anstelle von zwei separaten if-Anweisungen

Anstatt zwei Überprüfungen durchzuführen, um die Meldung „You win!“ (Sie haben gewonnen) oder „Sorry, you lose“ (Sie haben leider verloren) anzuzeigen, verwenden Sie das Schlüsselwort else.

  1. Stellen Sie sicher, dass Ihr Code von „Program.cs“ mit dem folgenden Beispiel übereinstimmt:

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

    Dies ist der Code, den Sie in der vorherigen Lerneinheit geschrieben haben.

  2. Nehmen Sie sich eine Minute Zeit, um die beiden if-Anweisungen am Ende der Datei zu untersuchen:

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

    Beachten Sie, dass beide if-Anweisungen total mit demselben numerischen Wert vergleichen. Dies ist die perfekte Gelegenheit, eine else-Anweisung zu verwenden.

  3. Aktualisieren Sie die beiden if-Anweisungen wie folgt:

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

    Wenn total >= 15 FALSE ist, wird der auf das Schlüsselwort else folgende Codeblock ausgeführt. Da es sich bei diesen beiden Ergebnissen um verwandte Gegensätze handelt, ist dies ein perfektes Szenario für das Schlüsselwort else.

  4. Die aktualisierte Datei „Program.cs“ sollte den folgenden Code enthalten:

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

Ändern des Code, um den Stapelbonus für Zweier- und Dreierpasche mithilfe einer Schachtelung zu entfernen

In der vorherigen Lerneinheit haben Sie gesehen, dass sich ein kleiner Logikfehler in Ihrer Anwendung befand. Sie können dieses Problem beheben, indem Sie Ihre if-Anweisungen schachteln.

Durch die Schachtelung können wir Codeblöcke innerhalb von Codeblöcken platzieren. In diesem Fall schachteln Sie eine if- und else-Kombination (die Überprüfung auf Zweierpasche) in einer anderen if-Anweisung (die Überprüfung auf Dreierpasche), um zu verhindern, dass beide als Bonus berechnet werden.

  1. Passen Sie den Code so an, dass er mit dem folgenden Codelisting übereinstimmt:

    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. Nehmen Sie sich einen Moment Zeit, um sich die verschachtelten if-Anweisungen genauer anzusehen.

    Das Ziel besteht darin, ein inneres if-else-Konstrukt zu erstellen, bei dem die beiden Ergebnisse verwandte Gegensätze sind, und dann die gegensätzlichen Ergebnisse (if/true und else/false) zu verwenden, um die Bonuspunkte für Zweier- und Dreierpasche zu vergeben. Um dieses Ziel zu erreichen, prüfen Sie in der äußeren if-Anweisung auf Zweierpasche und dann in der inneren if-Anweisung auf Dreierpasche. Mit diesem Muster wird sichergestellt, dass Ihr else-Codeblock die Punkte für Zweierpasche vergeben kann, wenn die innere Überprüfung auf Dreierpasche false zurückgibt.

    Anschließend werden Sie die Ergebnisse Ihrer drei Würfe „hartcodieren“, um Ihre Codelogik zu testen.

  3. Erstellen Sie eine leere Codezeile über der Zeile, in der total deklariert und initialisiert ist.

  4. Geben Sie den folgenden Code ein, um auf Zweierpasche zu prüfen:

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

    Mit der Hartcodierung der drei roll-Variablen können Sie den Code testen, ohne die Anwendung dutzende Male ausführen zu müssen.

  5. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  6. Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.

    Es sollte sich ein Terminalbereich mit einer Eingabeaufforderung öffnen, die anzeigt, dass das Terminal für den Speicherort Ihres TestProject-Ordners geöffnet ist.

  7. Geben Sie an der Eingabeaufforderung des Terminals den Befehl dotnet run ein, und drücken Sie dann die EINGABETASTE.

    Wenn Ihr Code ausgeführt wird, sollten Sie Folgendes sehen:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Aktualisieren Sie Ihre hartcodierten Wurfvariablen wie folgt, um auf Dreierpasche zu testen:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.

  10. Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.

  11. Geben Sie an der Eingabeaufforderung des Terminals den Befehl dotnet run ein, und drücken Sie dann die EINGABETASTE.

    Wenn Ihr Code ausgeführt wird, sollten Sie Folgendes sehen:

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

Verwenden der if-, else- und else if-Anweisung, um einen Preis anstelle einer Nachricht zu Sieg oder Niederlage anzugeben

Ändern Sie das Spiel so, dass es nicht mehr nur um Sieg oder Niederlage geht, sondern für jedes Ergebnis fiktive Preise vergeben werden, damit es noch mehr Spaß macht. Sie können vier Preise anbieten. Der*die Spieler*in sollte jedoch nur einen Preis gewinnen:

  • Wenn die Punktzahl des Spielers mehr als oder gleich 16 ist, gewinnt er ein neues Auto.
  • Wenn die Punktzahl des Spielers mehr als oder gleich 10 ist, gewinnt er einen neuen Laptop.
  • Wenn der Spieler genau 7 erzielt, gewinnt er eine Reise.
  • Andernfalls gewinnt der Spieler ein Kätzchen.
  1. Passen Sie den Code aus den vorherigen Schritten an das folgenden Codelisting an:

    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. Nehmen Sie sich einen Moment Zeit, um sich das aktualisierte if-elseif-else-Konstrukt genauer anzusehen.

    Die if-, else if- und else-Anweisungen ermöglichen es Ihnen, mehrere exklusive Bedingungen als boolesche Ausdrücke zu erstellen. Anders ausgedrückt: Wenn Sie nur ein Ergebnis erzielen möchten, Sie aber mehrere mögliche Bedingungen und Ergebnisse haben, sollten Sie so viele else if-Anweisungen wie möglich verwenden. Wenn keine der if- oder else if-Anweisungen zutrifft, wird der letzte else-Codeblock ausgeführt. else ist optional, muss aber als Letztes verwendet werden, wenn Sie es einbeziehen möchten.

  3. Führen Sie für die roll-Variablen vorübergehend eine Hartcodierung durch, um jede Meldung zu testen.

Zusammenfassung

  • Die Kombination der if- und else-Anweisung ermöglicht es Ihnen, auf eine Bedingung zu testen und dann eines der Ergebnisse auszuführen. Der Codeblock für if wird ausgeführt, wenn der boolesche Ausdruck true ist, und der Codeblock für else wird ausgeführt, wenn der boolesche Ausdruck false lautet.
  • Sie können if-Anweisungen schachteln, um eine mögliche Bedingung einzugrenzen. Sie sollten jedoch in Erwägung ziehen, stattdessen die if-, else if- und else-Anweisungen zu verwenden.
  • Verwenden Sie else if-Anweisungen, um mehrere exklusive Bedingungen zu erstellen.
  • else ist optional, muss bei Verwendung jedoch immer an letzter Stelle stehen.