Übung: Erstellen einer Entscheidungslogik mit if-Anweisungen
- 19 Minuten
Die meisten Anwendungen enthalten eine große Anzahl von Ausführungspfaden. Beispielsweise kann eine Anwendung abhängig davon, welche Menüoption ein*e Benutzer*in auswählt, unterschiedliche Ausführungspfade implementieren. Entwickler*innen bezeichnen den Code, der verschiedene Ausführungspfade implementiert, als Codebranches.
Die am häufigsten verwendete Anweisung für Codebranches ist if. Die if-Anweisung basiert auf einem booleschen Ausdruck, der in Klammern eingeschlossen ist. Wenn der Ausdruck TRUE ist, wird der Code nach der if-Anweisung ausgeführt. Andernfalls ignoriert die .NET-Runtime den Code und führt ihn nicht aus.
In dieser Übung lernen Sie das Schreiben von if-Anweisungen, indem Sie ein Spiel entwickeln. Zuerst definieren Sie die Regeln des Spiels und implementieren sie dann im Code.
Mit der Random.Next()-Methode simulieren Sie den Wurf von drei sechsseitigen Würfeln. Sie werten die gewürfelten Werte aus, um die Punktzahl zu berechnen. Wenn diese über einem willkürlich festgelegten Gesamtwert liegt, wird dem*der Spieler*in die Meldung angezeigt, dass er*sie gewonnen hat. Wenn die Punktzahl unter dem Grenzwert liegt, wird dem*der Benutzer*in eine entsprechende Meldung angezeigt.
- Wenn die Augenzahl auf zwei Würfeln identisch ist, erhalten Sie zwei Bonuspunkte für einen Zweierpasch.
- Wenn die Augenzahl auf allen drei Würfeln identisch ist, erhalten Sie sechs Bonuspunkte für einen Dreierpasch.
- Wenn die Summe der Augenzahlen der drei Würfel und aller Bonuspunkte mindestens 15 ist, gewinnen Sie das Spiel. Andernfalls verlieren Sie.
Sie entwickeln die Regeln weiter, sobald Sie mehr über die if-Anweisung wissen.
Wichtig
In dieser Übung wird die System.Random-Klasse umfassend genutzt. Sie können das Microsoft Learn-Modul mit dem Titel „Aufrufen von Methoden aus der .NET-Klassenbibliothek mithilfe von C#“ lesen, wenn Sie eine Auffrischung der Funktionsweise von Random.Next() benötigen.
Vorbereiten Ihrer Programmierumgebung
Dieses Modul enthält Übungen zum Erstellen und Ausführen von Beispielcode. Es wird empfohlen, diese Aktivitäten mit Visual Studio Code als Entwicklungsumgebung durchzuführen. Die Verwendung von Visual Studio Code für diese Aktivitäten vereinfacht das Schreiben und Ausführen von Code in einer Entwicklerumgebung, die von Expert*innen weltweit verwendet wird.
Öffnen Sie Visual Studio Code.
Sie können das Windows-Startmenü (oder eine entsprechende Ressource für ein anderes Betriebssystem) verwenden, um Visual Studio Code zu öffnen.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Navigieren Sie im Dialogfeld Ordner öffnen zum Windows-Ordner „Desktop“.
Wenn Sie Codeprojekte in der Regel in einem anderen Ordner speichern, können Sie stattdessen auch diesen verwenden. Für dieses Training ist es wichtig, einen Ort zu haben, den Sie leicht finden und sich gut merken können.
Klicken Sie im Dialogfeld Ordner öffnen auf Ordner auswählen.
Wenn ein Sicherheitsdialogfeld angezeigt wird, in dem Sie gefragt werden, ob Sie den Autor*innen vertrauen, wählen Sie Ja aus.
Klicken Sie im Visual Studio Code-Menü Terminal die Option Neues Terminal aus.
Beachten Sie, dass eine Eingabeaufforderung im Panel „Terminal“ den Ordnerpfad für den aktuellen Ordner anzeigt. Beispiel:
C:\Users\someuser\Desktop>Hinweis
Wenn Sie auf Ihrem eigenen PC und nicht in einer Sandbox oder gehosteten Umgebung arbeiten und andere Microsoft Learn-Module in dieser C#-Reihe abgeschlossen haben, haben Sie möglicherweise bereits einen Projektordner für Codebeispiele erstellt. In diesem Fall können Sie den nächsten Schritt überspringen, der zum Erstellen einer Konsolen-App im Ordner „TestProject“ verwendet wird.
Geben Sie an der Terminal-Eingabeaufforderung zum Erstellen einer neuen Konsolenanwendung in einem angegebenen Ordner die folgende Eingabeaufforderung ein:
dotnet new console -o ./CsharpProjects/TestProjectDieser .NET-CLI-Befehl verwendet eine .NET-Programmvorlage, um ein neues C#-Konsolenanwendungsprojekt am angegebenen Ordnerspeicherort zu erstellen. Der Befehl erstellt die Ordner „CsharpProjects“ und „TestProject“ für Sie und verwendet „TestProject“ als Namen für Ihre
.csproj-Datei.Wenn eine Meldung angezeigt wird, die Besagt, dass die Dateien bereits vorhanden sind, fahren Sie mit den nächsten Schritten fort. Sie werden die vorhandenen Projektdateien wiederverwenden.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "CsharpProjects ".
Sie sollten den Ordner "TestProject " und zwei Dateien sehen, eine C#-Programmdatei mit dem Namen Program.cs und eine C#-Projektdatei namens TestProject.csproj.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Wählen Sie im Dialogfeld "Ordner öffnen " den Ordner "CsharpProjects " und dann " Ordner auswählen" aus.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "TestProject", und wählen Sie dann Program.cs aus.
Löschen Sie die vorhandenen Codezeilen.
Sie verwenden dieses C#-Konsolenprojekt zum Erstellen und Ausführen von Codebeispielen im Rahmen dieses Moduls.
Schließen Sie das Panel „Terminal“.
Schreiben von Code zur Erzeugung von drei Zufallszahlen mit anschließender Ausgabe
Stellen Sie sicher, dass eine leere „Program.cs“-Datei in Visual Studio Code geöffnet ist.
Geben Sie Folgendes ein, um den anfänglichen Code für diese Übung zu erstellen:
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}");Nehmen Sie sich einen Augenblick Zeit, um den von Ihnen eingegebenen Code zu überprüfen.
Zunächst erstellen Sie eine neue Instanz der
System.Random-Klasse und speichern einen Verweis auf das Objekt in einer Variablen namensdice. Anschließend rufen Sie dieRandom.Next()-Methode für dasdice-Objekt dreimal auf. Dabei geben Sie sowohl den unteren (1) als auch den oberen Grenzwert (6) an, um die möglichen Werte einzuschränken (der obere Grenzwert ist exklusiv). Die drei Zufallszahlen speichern Sie dann jeweils in den Variablenroll1,roll2undroll3.Als Nächstes addieren Sie die drei Würfelergebnisse und speichern den Wert in einer ganzzahligen Variablen namens
total.Schließlich verwenden Sie die
WriteLine()-Methode, um die drei Werte mithilfe der Zeichenfolgeninterpolation anzuzeigen.Wenn Sie den Code ausführen, sollte die folgende Meldung (allerdings mit unterschiedlichen Zahlen) angezeigt werden.
Dice roll: 4 + 5 + 2 = 11Diese erste Aufgabe war eine Vorbereitungsaufgabe. Nun können Sie dem Code die Entscheidungslogik hinzufügen, um das Spiel interessanter zu gestalten.
Hinzufügen einer If-Anweisung zur Anzeige unterschiedlicher Nachrichten basierend auf dem Wert der total-Variable
Suchen Sie im Visual Studio Code-Editor den Cursor unten in der Codedatei, und erstellen Sie dann eine leere Codezeile.
Um Ihr erstes Spielfeature zu erstellen, geben Sie die folgenden
if-Anweisungen ein.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Diese beiden
if-Anweisungen werden verwendet, um Szenarios für das Gewinnen und Verlieren verarbeiten zu können. Nehmen Sie sich einen Moment Zeit, um die ersteif-Anweisung zu untersuchen.Beachten Sie, dass die
if-Anweisung aus drei Teilen besteht:- dem
if-Schlüsselwort - einem booleschen Ausdruck zwischen Klammern
() - einem Codeblock, der durch geschweifte Klammern
{ }definiert wird
Zur Laufzeit wird der boolesche Ausdruck
total > 14ausgewertet. Wenn der Wert vontotalgrößer als14und damit „true“ ist, wird der Ausführungspfad des Codes im Codeblock fortgesetzt. Anders ausgedrückt: Der Code in den geschweiften Klammern wird ausgeführt.Wenn der Wert von
totaljedoch nicht größer als14und damit der boolesche Ausdruck falsch („false“) ist, wird der Ausführungspfad nach dem Codeblock fortgesetzt. Anders ausgedrückt: Der Code in den geschweiften Klammern wird nicht ausgeführt.Die zweite
if-Anweisung steuert, welche Meldung ausgegeben wird, wenn der Spieler verliert. In der nächsten Lerneinheit verwenden Sie eine Variation derif-Anweisung, um die beiden Anweisungen verkürzt in einer einzigen Anweisung zusammenzufassen. So verdeutlichen Sie Ihre Absicht.- dem
Was ist ein boolescher Ausdruck?
Ein boolescher Ausdruck ist Code, der einen booleschen Wert (also true oder false) zurückgibt. Die einfachsten booleschen Ausdrücke sind die Werte true und false. Alternativ kann ein boolescher Ausdruck das Ergebnis einer Methode sein, die den Wert true oder false zurückgibt. Im folgenden einfachen Codebeispiel wird die string.Contains()-Methode verwendet, um auszuwerten, ob eine Zeichenfolge eine andere Zeichenfolge enthält.
string message = "The quick brown fox jumps over the lazy dog.";
bool result = message.Contains("dog");
Console.WriteLine(result);
if (message.Contains("fox"))
{
Console.WriteLine("What does the fox say?");
}
message.Contains("fox") gibt den Wert true oder false zurück, der als boolescher Ausdruck betrachtet und deshalb in einer if-Anweisung verwendet werden kann.
Weitere einfache boolesche Ausdrücke lassen sich durch die Verwendung von Operatoren erstellen, mit denen zwei Werte verglichen werden. Sie können folgende Operatoren verwenden:
-
==: den Gleichheitsoperator -
>: den Größer-als-Operator, mit dem überprüft wird, ob der Wert auf der linken Seite größer ist als der Wert auf der rechten Seite -
<: den Kleiner-als-Operator, mit dem überprüft wird, ob der Wert auf der linken Seite kleiner ist als der Wert auf der rechten Seite -
>=: den Größer-als-oder-gleich-Operator -
<=: den Kleiner-als-oder-gleich-Operator - Durchführen weiterer Operationen
Hinweis
Auf Microsoft Learn gibt es eine ganze C#-Schulungsreihe zu booleschen Ausdrücken. Es gibt viele Operatoren, mit denen Sie einen booleschen Ausdruck erstellen können. In diesem Modul werden nur einige grundlegende Operatoren behandelt. Weitere Informationen zu booleschen Ausdrücken finden Sie im Microsoft Learn-Modul „Auswerten boolescher Ausdrücke, um Entscheidungen in C# zu treffen“.
In diesem Beispiel haben Sie den booleschen Ausdruck total > 14 ausgewertet. Sie hätten auch den booleschen Ausdruck total >= 15 verwenden können, da beide Ausdrücke im vorliegenden Fall identisch sind. Da Sie als Spielregel festgelegt haben, dass ein*e Spieler*in gewinnt, wenn die Summe der drei Würfel und aller Bonuspunkte mindestens 15 beträgt, sollten Sie den >= 15-Ausdruck implementieren. Diese Änderung nehmen Sie im nächsten Schritt der Übung vor.
Was ist ein Codeblock?
Ein Codeblock enthält ein oder mehrere Codezeilen und wird durch eine öffnende und eine schließende geschweifte Klammer { } definiert. Er stellt eine abgeschlossene Codeeinheit dar, die in Ihrem Softwaresystem genau einen Zweck erfüllt. In diesem Fall werden zur Laufzeit alle Codezeilen im Codeblock ausgeführt, wenn die Auswertung des booleschen Ausdrucks „true“ ergibt. Ergibt die Auswertung hingegen FALSE, werden alle Codezeilen im Codeblock ignoriert.
Sie sollten auch wissen, dass Codeblöcke andere Codeblöcke enthalten können. In der Tat ist es üblich, dass ein Codeblock in einem anderen Codeblock in Ihren Anwendungen „geschachtelt“ wird. Später in diesem Modul schachteln Sie eigene Codeblöcke, wenn Sie eine if-Anweisung innerhalb des Codeblocks einer anderen erstellen.
Hinweis
Auf Microsoft Learn gibt es eine ganze C#-Schulungsreihe zu Codeblöcken. Codeblöcke sind für das Verständnis der Codestrukturierung von zentraler Bedeutung, da sie den Gültigkeitsbereich von Variablen definieren. Weitere Informationen zu Codeblöcken finden Sie im Modul „Verwenden von Codeblöcken in C# zum Festlegen des Gültigkeitsbereichs von Variablen und zum Definieren von Logik“.
Hinzufügen einer weiteren „if“-Anweisung, um einen Bonus für einen Zweierpasch zu implementieren
Als Nächstes können Sie die folgende Regel implementieren: Wenn die Augenzahl auf zwei Würfeln identisch ist, erhalten Sie zwei Bonuspunkte für einen Zweierpasch. Passen Sie den Code aus dem vorherigen Schritt so an, dass er mit dem folgenden Codelisting übereinstimmt:
Suchen Sie im Visual Studio Code-Editor den Cursor in der leeren Codezeile oberhalb der ersten
if-Anweisung.Um das „Zweierpasch“-Spielfeature zu erstellen, geben Sie die folgende
if-Anweisung ein.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }Hier kombinieren Sie drei boolesche Ausdrücke, um einen größeren booleschen Ausdruck in genau einer Codezeile zu erstellen. Dies wird manchmal als zusammengesetzte Bedingung bezeichnet. Zwischen den beiden äußeren Klammern befinden sich drei innere Klammerpaare, die durch zwei senkrechte Striche getrennt werden.
Zwei senkrechte Striche (
||) stellen den Operator für das (nicht ausschließende) logische ODER dar. Dieser hat folgende Bedeutung: Ein vollständiger boolescher Ausdruck ist dann „true“, wenn mindestens einer der Teilausdrücke „true“ ist. Wenn beide booleschen Ausdrücke FALSE sind, ist der gesamte boolesche Ausdruck FALSE. Sie verwenden zwei logische ODER-Operatoren, damit Sie die Auswertung auf einen dritten booleschen Ausdruck ausweiten können.Zuerst werten Sie
(roll1 == roll2)aus. Wenn dieser Ausdruck „true“ ist, ist auch der gesamte Ausdruck „true“. Bei „false“ wird(roll2 == roll3)ausgewertet. Wenn dieser Ausdruck „true“ ist, ist auch der gesamte Ausdruck „true“. Bei „false“ wird(roll1 == roll3)ausgewertet. Wenn dieser Ausdruck „true“ ist, ist auch der gesamte Ausdruck „true“. Wenn der Ausdruck „false“ ist, ist der gesamte Ausdruck „false“.Wenn der zusammengesetzte boolesche Ausdruck TRUE ist, führen Sie den folgenden Codeblock aus. Darin befinden sich nun zwei Codezeilen. Die erste Codezeile gibt für den Spieler eine Meldung aus. Die zweite Codezeile erhöht den Wert von
totalum2.Aktualisieren Sie die zweite
if-Anweisung wie folgt, um die Lesbarkeit des Codes zu verbessern:if (total >= 15)Beachten Sie, dass Sie jetzt den
>=-Operator in dem Ausdruck verwenden, der zum Auswerten eines Gewinnwurfs verwendet wird. Der>=-Operator bedeutet „größer oder gleich“. Daher können Sietotalmit einem Wert von15anstelle von14vergleichen. Mit diesen Änderungen ähnelt der Ausdruck, den Sie zum Auswerten eines Gewinnwurfs verwenden, nun dem Ausdruck, den Sie für einen Verlustwurf auswerten. Dies sollte dazu beitragen, dass Ihr Code leichter verständlich (lesbarer) wird. Da es sich um ganzzahlige Werte handelt, funktioniert Ihr neuer Ausdruck(total >= 15)genauso wie das, was Sie zuvor geschrieben haben(total > 14).Nehmen Sie sich einen Moment Zeit, um den Code zu überprüfen.
Ihr Code sollte nun mit dem folgenden Codebeispiel übereinstimmen:
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 (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Die Ausdrücke für die Auswertung von Gewinn- und Verlustwürfen sind nun besser aufeinander abgestimmt.
Hinzufügen einer weiteren „if“-Anweisung, um einen Bonus für einen Dreierpasch zu implementieren
Als Nächstes implementieren wir die Regel: „Wenn alle drei Würfel, die Sie werfen, denselben Wert ergeben, erhalten Sie sechs Bonuspunkte für einen Dreierpasch“. Ändern Sie den Code aus den vorherigen Schritten so, dass er der folgenden Codeauflistung entspricht:
Erstellen Sie im Visual Studio Code-Editor eine leere Codezeile unter dem Codeblock Ihrer „Pasch“-
if-Anweisung.Um das „Dreierpasch“-Spielfeature zu erstellen, geben Sie die folgende
if-Anweisung ein.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }Hier kombinieren Sie zwei boolesche Ausdrücke, um einen größeren booleschen Ausdruck in genau einer Codezeile zu erstellen. Zwischen den beiden äußeren Klammern befinden sich zwei innere Klammerpaare, die durch zwei kaufmännische Und-Zeichen getrennt werden.
Die zwei kaufmännischen Und-Zeichen (
&&) bilden den Operator für das logische UND. Dieser hat folgende Bedeutung: Ein vollständiger boolescher Ausdruck ist nur dann „true“, wenn beide Ausdrücke „true“ sind. Wenn im vorliegenden Fallroll1gleichroll2undroll2gleichroll3ist, muss auchroll1gleichroll3sein. Der Spieler hat also einen Dreierpasch geworfen.Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Nehmen Sie sich einen Moment Zeit, um den Code zu überprüfen.
Stellen Sie sicher, dass Ihr Code mit Folgendem ü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."); }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 dotnet run ein, um Ihren Code auszuführen, und drücken Sie dann die EINGABETASTE.
Hinweis
Wenn die Meldung „Es wurde kein ausführbares Projekt gefunden“ angezeigt wird, stellen Sie sicher, dass in der Eingabeaufforderung des Terminals der erwartete Speicherort des Ordners „TestProject“ angezeigt wird. Beispiel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Es sollte eine Ausgabe angezeigt werden, die einem der folgenden Ergebnisse ähnelt:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose.Auch folgende Ausgabe ist möglich:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose.Auch folgende Ausgabe ist möglich:
Dice roll: 5 + 6 + 4 = 15 You win!Wenn Sie Glück haben, sehen Sie die folgende Meldung:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!Nun gibt es jedoch ein Problem: Sollte ein*e Spieler*in tatsächlich zwei Boni für den Dreier- und den Zweierpasch erhalten? Ein Dreierpasch schließt immerhin auch einen Zweierpasch ein. Im Idealfall sollten die Boni nicht aufeinander addiert werden. Es sollte zwei separate Bonusbedingungen geben. Dies ist ein Fehler in der Logik, der korrigiert werden muss.
Logikprobleme und Möglichkeiten zur Verbesserung des Codes
Sie haben nun die Grundlagen für Ihre Anwendung geschaffen und viel über die if-Anweisung, boolesche Ausdrücke, Codeblöcke und logische ODER- und UND-Operatoren erfahren. Vieles lässt sich aber noch verbessern. Darum geht es in der nächsten Lerneinheit.
Zusammenfassung
- Mit einer
if-Anweisung erstellen Sie eine Bedingungsverzweigung für Ihre Codelogik. Dieif-Entscheidungsanweisung führt Code im Codeblock aus, wenn die Auswertung des booleschen Ausdrucks „true“ ergibt. Andernfalls überspringt die Runtime den Codeblock und fährt mit der Codezeile fort, die nach dem Codeblock steht. - Ein boolescher Ausdruck ist ein Ausdruck, der einen booleschen Wert zurückgibt.
- Boolesche Operatoren vergleichen die beiden Werte auf der linken und rechten Seite und ermitteln beispielsweise, ob die Werte gleich oder verschieden sind.
- Ein Codeblock wird durch geschweifte Klammern
{ }definiert. Er umfasst Codezeilen, die als Einheit behandelt werden sollen. - Der Operator
&&für das logische UND aggregiert zwei Ausdrücke, sodass der Gesamtausdruck nur dann „true“ ist, wenn beide Teilausdrücke „true“ sind. - Der Operator
||für das logische ODER aggregiert zwei Ausdrücke, sodass der Gesamtausdruck „true“ ist, wenn einer der beiden Teilausdrücke „true“ ist.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?