Übung: Erstellen einer geschachtelten Entscheidungslogik mit „if“, „else if“ und „else“
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.
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.
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-Anweisungentotalmit demselben numerischen Wert vergleichen. Dies ist die perfekte Gelegenheit, eineelse-Anweisung zu verwenden.Aktualisieren Sie die beiden
if-Anweisungen wie folgt:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Wenn
total >= 15FALSE ist, wird der auf das Schlüsselwortelsefolgende Codeblock ausgeführt. Da es sich bei diesen beiden Ergebnissen um verwandte Gegensätze handelt, ist dies ein perfektes Szenario für das Schlüsselwortelse.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.
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."); }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ßerenif-Anweisung auf Zweierpasche und dann in der innerenif-Anweisung auf Dreierpasche. Mit diesem Muster wird sichergestellt, dass Ihrfalse-Codeblock die Punkte für Zweierpasche vergeben kann, wenn die innere Überprüfung auf Dreierpascheelsezurückgibt.Anschließend werden Sie die Ergebnisse Ihrer drei Würfe „hartcodieren“, um Ihre Codelogik zu testen.
Erstellen Sie eine leere Codezeile über der Zeile, in der
totaldeklariert und initialisiert ist.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.Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Klicken Sie in der EXPLORER-Ansicht auf "TestProject", um ein Terminal am Speicherort des TestProject-Ordners zu öffnen, klicken Sie mit der rechten Maustaste auf "TestProject", und wählen Sie dann " In integriertem Terminal öffnen" aus.
Es sollte sich ein Terminalbereich mit einer Eingabeaufforderung öffnen, die anzeigt, dass das Terminal für den Speicherort Ihres TestProject-Ordners geöffnet ist.
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!Aktualisieren Sie Ihre hartcodierten Wurfvariablen wie folgt, um auf Dreierpasche zu testen:
roll1 = 6; roll2 = 6; roll3 = 6;Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Klicken Sie in der EXPLORER-Ansicht auf "TestProject", um ein Terminal am Speicherort des TestProject-Ordners zu öffnen, klicken Sie mit der rechten Maustaste auf "TestProject", und wählen Sie dann " In integriertem Terminal öffnen" aus.
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.
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!"); }Nehmen Sie sich einen Moment Zeit, um sich das aktualisierte
if-elseif-else-Konstrukt genauer anzusehen.Die
if-,else if- undelse-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 vieleelse if-Anweisungen wie möglich verwenden. Wenn keine derif- oderelse if-Anweisungen zutrifft, wird der letzteelse-Codeblock ausgeführt.elseist optional, muss aber als Letztes verwendet werden, wenn Sie es einbeziehen möchten.Führen Sie für die
roll-Variablen vorübergehend eine Hartcodierung durch, um jede Meldung zu testen.
Zusammenfassung
- Die Kombination der
if- undelse-Anweisung ermöglicht es Ihnen, auf eine Bedingung zu testen und dann eines der Ergebnisse auszuführen. Der Codeblock fürifwird ausgeführt, wenn der boolesche Ausdrucktrueist, und der Codeblock fürelsewird ausgeführt, wenn der boolesche Ausdruckfalselautet. - Sie können
if-Anweisungen schachteln, um eine mögliche Bedingung einzugrenzen. Sie sollten jedoch in Erwägung ziehen, stattdessen dieif-,else if- undelse-Anweisungen zu verwenden. - Verwenden Sie
else if-Anweisungen, um mehrere exklusive Bedingungen zu erstellen. -
elseist optional, muss bei Verwendung jedoch immer an letzter Stelle stehen.