Oefening: beslissingslogica maken met if-instructies
- 19 minuten
De meeste toepassingen bevatten een groot aantal uitvoeringspaden. Een toepassing kan bijvoorbeeld verschillende uitvoeringspaden implementeren op basis van welke menuoptie een gebruiker selecteert. Ontwikkelaars verwijzen naar de code die verschillende uitvoeringspaden implementeert als codevertakkingen.
De meest gebruikte codevertakkingsinstructie is de if instructie. De if-instructie vertrouwt op een Booleaanse expressie die tussen haakjes wordt ingesloten. Als de uitdrukking waar is, wordt de code die op de if instructie volgt, uitgevoerd. Als dat niet het probleem is, negeert de .NET-runtime de code en wordt deze niet uitgevoerd.
In deze oefening ga je het schrijven van if uitspraken oefenen door een game te maken. Eerst definieert u de regels van het spel en implementeert u deze in code.
Je gebruikt de Random.Next() methode om drie zeszijdige dobbelstenen te simuleren. U evalueert de samengetelde waarden om de score te berekenen. Als de score groter is dan een willekeurig totaal, geeft u een winnende bericht weer aan de gebruiker. Als de score lager is dan de grens, wordt er een verliesbericht aan de gebruiker getoond.
- Wanneer met twee dobbelstenen wordt gegooid en beide dezelfde waarde hebben, krijgt u twee bonuspunten voor het gooien van twee keer dezelfde waarde.
- Als alle drie de dobbelstenen dezelfde waarde tonen, ontvang je zes bonuspunten voor het gooien van een drie-eenheid.
- Als de som van de drie dobbelstenen, met eventuele bonuspunten, 15 of hoger is, wint u het spel. Anders hebt u verloren.
Je verfijnt de regels naarmate je meer leert over de if verklaring.
Belangrijk
Deze oefening maakt uitgebreid gebruik van de System.Random klas. U kunt de Microsoft Learn-module met de titel 'Methoden aanroepen uit de .NET-klassenbibliotheek met C#' raadplegen als u een opfrisser nodig hebt over hoe Random.Next() werkt.
Uw coderingsomgeving voorbereiden
Deze module bevat activiteiten die u begeleiden bij het bouwen en uitvoeren van voorbeeldcode. U wordt aangeraden deze activiteiten uit te voeren met Visual Studio Code als ontwikkelomgeving. Het gebruik van Visual Studio Code voor deze activiteiten helpt u om comfortabeler code te schrijven en uit te voeren in een ontwikkelomgeving die wordt gebruikt door professionals wereldwijd.
Open Visual Studio Code.
U kunt de Windows-Startmenu (of een equivalente resource voor een ander besturingssysteem) gebruiken om Visual Studio Code te openen.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Navigeer in het dialoogvenster Open Map naar de map Windows-bureau.
Als u een andere maplocatie hebt waar u codeprojecten bewaart, kunt u die maplocatie gebruiken. Voor deze training is het belangrijk om een locatie te hebben die gemakkelijk te vinden en te onthouden is.
Selecteer Map selecteren in het dialoogvenster Map openen.
Als u een beveiligingsdialoogvenster ziet waarin u wordt gevraagd of u de auteurs vertrouwt, selecteert u Ja.
Selecteer In het menu Visual Studio Code Terminal de optie Nieuwe terminal.
U ziet dat in een opdrachtprompt in het terminalvenster het mappad voor de huidige map wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop>Notitie
Als u op uw eigen pc werkt in plaats van in een sandbox of gehoste omgeving en u andere Microsoft Learn-modules in deze C#-serie hebt voltooid, hebt u mogelijk al een projectmap gemaakt voor codevoorbeelden. Als dat het geval is, kunt u de volgende stap overslaan, die wordt gebruikt om een console-app te maken in de map TestProject.
Voer bij de terminalopdrachtprompt de volgende prompt in om een nieuwe consoletoepassing in een opgegeven map te maken:
dotnet new console -o ./CsharpProjects/TestProjectDeze .NET CLI-opdracht maakt gebruik van een .NET-programmasjabloon om een nieuw C#-consoletoepassingsproject te maken op de opgegeven maplocatie. Met de opdracht worden de mappen CsharpProjects en TestProject voor u gemaakt en wordt TestProject gebruikt als de naam van uw
.csprojbestand.Als er een bericht wordt weergegeven waarin wordt aangegeven dat de bestanden al bestaan, gaat u verder met de volgende stappen. U gebruikt de bestaande projectbestanden opnieuw.
Vouw in de EXPLORER-weergave de map CsharpProjects uit .
U ziet de map TestProject en twee bestanden, een C#-programmabestand met de naam Program.cs en een C#-projectbestand met de naam TestProject.csproj.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Selecteer in het dialoogvenster Map openen de map CsharpProjects en klik vervolgens op Map selecteren.
Vouw in de explorer-weergave de map TestProject uit en selecteer Program.cs.
Verwijder de bestaande coderegels.
U gebruikt dit C#-consoleproject om codevoorbeelden te maken, te bouwen en uit te voeren tijdens deze module.
Sluit het deelvenster Terminal.
Code schrijven waarmee drie willekeurige getallen worden gegenereerd en weergegeven in uitvoer
Zorg ervoor dat u een leeg Program.cs bestand hebt geopend in Visual Studio Code.
Voer het volgende in om de eerste code voor deze oefening te maken:
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}");Neem even de tijd om de code te bekijken die u hebt ingevoerd.
Om te beginnen maakt u een nieuw exemplaar van de
System.Randomklasse en slaat u een verwijzing op naar het object in een variabele met de naamdice. Vervolgens roept u deRandom.Next()methode voor hetdiceobject drie keer aan, waardoor zowel de onder- als bovengrenzen worden opgegeven om de mogelijke waarden tussen1en6(de bovengrens is exclusief) te beperken. U slaat de drie willekeurige getallen in de variabelenroll1enroll2roll3respectievelijk op.Vervolgens somt u de drie dobbelstenen op en slaat u de waarde op in een variabele met de naam
totalgeheel getal.Ten slotte gebruikt u de
WriteLine()methode om de drie waarden weer te geven met behulp van tekenreeksinterpolatie.Wanneer u de code uitvoert, ziet u als het goed is het volgende bericht (de nummers zullen anders zijn).
Dice roll: 4 + 5 + 2 = 11Deze eerste taak was een installatietaak. Nu kunt u de beslissingslogica toevoegen aan uw code om het spel interessanter te maken.
Een if-instructie toevoegen om verschillende berichten weer te geven op basis van de waarde van de totale variabele
Zoek in de Visual Studio Code-editor de cursor onderaan het codebestand en maak vervolgens een lege coderegel.
Voer de volgende
ifinstructies in om uw eerste gamefunctie te maken.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Deze twee
ifinstructies worden gebruikt om de winnende en verliesscenario's af te handelen. Neem een moment om de eersteifverklaring te bekijken.U ziet dat de
ifinstructie bestaat uit drie delen:- Het
if-trefwoord - Een Booleaanse expressie tussen haakjes
() - Een codeblok dat wordt gedefinieerd met accolades
{ }
De Booleaanse expressie
total > 14wordt in runtime geëvalueerd. Als dit een true-instructie is (als de waardetotalgroter is dan14) blijft de uitvoeringsstroom doorgaan naar de code die is gedefinieerd in het codeblok. Met andere woorden: de code tussen de accolades wordt uitgevoerd.Als de Boole-expressie echter onwaar is (de waarde van
totalniet groter dan14) dan slaat de uitvoeringsstroom voorbij het codeblok over. Met andere woorden: de code tussen de accolades wordt niet uitgevoerd.Als laatste bepaalt de tweede
if-instructie welk bericht wordt weergegeven als de gebruiker verliest. In de volgende les gebruikt u een variatie op deifinstructie om deze twee instructies in te korten in één instructie die de intentie duidelijker uitdrukt.- Het
Wat is een Boole-expressie?
Een Boole-expressie is een code die een Booleaanse waarde retourneert, ofwel truefalse. De eenvoudigste Boole-expressies zijn gewoon de waarden true en false. Een Boole-expressie kan ook het resultaat zijn van een methode die de waarde true retourneert of false. U ziet hier bijvoorbeeld een eenvoudig codevoorbeeld waarbij de string.Contains()-methode wordt gebruikt om te evalueren of één tekenreeks nog een andere tekenreeks bevat.
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?");
}
Omdat de message.Contains("fox") een true of false retourneert, kwalificeert deze als een Booleaanse expressie en kan deze worden gebruikt in een if verklaring.
Andere eenvoudige Boole-expressies kunnen worden gemaakt met behulp van operators om twee waarden te vergelijken. Operators zijn onder andere:
-
==, de operator 'gelijk aan' om gelijkheid te testen -
>, de operator 'groter dan', om te testen of de waarde aan de linkerkant groter is dan de waarde aan de rechterkant -
<, de operator 'kleiner dan', om te testen of de waarde aan de linkerkant kleiner is dan de waarde aan de rechterkant -
>=, de 'groter dan of gelijk aan-operator' -
<=, de 'lager dan of gelijk aan-operator' - enzovoort
Notitie
De C#-trainingsreeks op Microsoft Learn besteedt een volledige module aan Boole-expressies. Er zijn veel operators die u kunt gebruiken om een Boole-expressie samen te stellen. Hier vindt u slechts enkele basisbeginselen in deze module. Zie de Microsoft Learn-module getiteld 'Booleaanse expressies evalueren om beslissingen te nemen in C#' voor meer informatie over Booleaanse expressies.
In dit voorbeeld hebt u de Boole-expressie total > 14geëvalueerd. U kunt echter de Boole-expressie total >= 15 hebben gekozen, omdat ze in dit geval hetzelfde zijn. Gezien het feit dat de regels voor het spel "Als de som van de drie dobbelstenen, plus bonussen, 15 of hoger is, wint u het spel", moet u waarschijnlijk de >= 15 expressie implementeren. U gaat deze wijziging aanbrengen in de volgende stap van de oefening.
Wat is een codeblok?
Een codeblok is een verzameling van een of meer gecodeerde regels die worden gedefinieerd door een openings- en afsluitaccolade { }. Het vertegenwoordigt een volledige code-eenheid die één doel heeft in uw softwaresysteem. In dit geval worden alle coderegels in het codeblok tijdens runtime uitgevoerd als de Booleaanse expressie waar is. Als de Boole-expressie daarentegen onwaar is, worden alle coderegels in het codeblok genegeerd.
U moet ook weten dat codeblokken andere codeblokken kunnen bevatten. Het is inderdaad gebruikelijk dat één codeblok genesteld is binnen een ander codeblok in uw toepassingen. Verderop in deze module begint u met het nesten van uw eigen codeblokken wanneer u één if instructie in het codeblok van een ander maakt.
Notitie
In de C#-trainingsreeks op Microsoft Learn wordt een hele module besteed aan het begrijpen van codeblokken. Codeblokken staan centraal bij het begrijpen van de organisatie en structuur van de code en definiëren de grenzen van het variabele bereik. Zie de module met de titel 'Bereik van variabelen en logica beheren met behulp van codeblokken in C#' voor meer informatie over codeblokken.
Voeg nog een if-instructie toe om de dubbele bonus te implementeren
Vervolgens kunt u de regel implementeren: "Als twee dobbelstenen die u gooit dezelfde waarde hebben, krijgt u twee bonuspunten voor het rollen van een dubbel." Pas de code uit de vorige stap aan zodat deze overeenkomt met de volgende codevermelding:
Zoek de cursor in Visual Studio Code-editor op de lege coderegel boven de eerste
ifverklaring.Om de functie 'doubles' in je spel te maken, voer je de volgende
ifinstructie in.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }Hier combineert u drie Booleaanse expressies om één samengestelde Booleaanse expressie te maken in één regel code. Dit wordt ook wel een samengestelde voorwaarde genoemd. U hebt één buitenste set haakjes die drie binnenste sets haakjes combineert. Deze worden gescheiden door twee pijptekens.
De dubbele sluistekens
||vormen de logische OF-operator, die in feite neerkomt op het volgende: 'Ofwel de uitdrukking links van mij OF de uitdrukking rechts van mij moet waar zijn zodat de hele booleaanse uitdrukking waar is'. Als beide Boole-expressies onwaar zijn, is de volledige Boole-expressie onwaar. U gebruikt twee logische OR-operators, zodat u de evaluatie kunt uitbreiden naar een derde Boole-expressie.Eerst evalueert u
(roll1 == roll2). Als dit Waar is, is de hele expressie Waar. Als het onwaar is, evalueert u(roll2 == roll3). Als dit Waar is, is de hele expressie Waar. Als het onwaar is, evalueert u(roll1 == roll3). Als dit Waar is, is de hele expressie Waar. Als dat Onwaar is, is de hele expressie Onwaar.Als de samengestelde Boole-expressie waar is, voert u het volgende codeblok uit. Dit keer zijn er twee coderegels. Met de eerste coderegel wordt een bericht voor de gebruiker afgedrukt. De tweede coderegel verhoogt de waarde van
totalmet2.Als u de leesbaarheid van uw code wilt verbeteren, werkt u de tweede
ifinstructie als volgt bij:if (total >= 15)U ziet dat u nu de
>=operator gebruikt in de uitdrukking die wordt gebruikt om een winnende worp te evalueren. De>=operator betekent 'groter of gelijk aan'. Als gevolg hiervan kunt utotalvergelijken met een waarde van15in plaats van14. Met deze wijzigingen lijkt de uitdrukking die u gebruikt om een winnende rol te evalueren nu op de uitdrukking die u evalueert voor een verliezende rol. Dit moet u helpen om uw code beter te begrijpen (beter leesbaar). Omdat u te maken hebt met gehele getallen, werkt de nieuwe expressie(total >= 15)identiek aan wat u eerder hebt(total > 14)geschreven.Neem even de tijd om uw code te controleren.
Uw code moet er zo uitzien:
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."); }Let op de verbeterde uitlijning tussen de expressies die worden gebruikt om winnende en verliezende rollen te evalueren.
Voeg nog een if-instructie toe om de drievoudige bonus te implementeren
Vervolgens kunt u de regel implementeren: "Als alle drie de dobbelstenen die u gooit dezelfde waarde hebben, krijgt u zes bonuspunten voor het gooien van drie gelijke." Wijzig de code uit de vorige stappen zodat deze overeenkomt met de volgende codevermelding.
Maak in de Visual Studio Code-editor een lege coderegel onder het codeblok van uw 'doubles'
if-instructie.Als u de gamefunctie 'triples' wilt maken, voert u de volgende
ifinstructie in.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }Hier combineert u twee Booleaanse expressies om één samengestelde Booleaanse expressie te maken in één regel code. U hebt één buitenste set haakjes die twee binnenste sets haakjes combineert, gescheiden door twee ampersandtekens.
De dubbele ampersandtekens
&&vormen de logische EN-operator, die in feite neerkomt op het volgende: 'alleen als beide expressies Waar zijn, is de hele expressie Waar'. In dit geval, alsroll1gelijk is aanroll2enroll2gelijk is aanroll3, moetroll1door deductie gelijk zijn aanroll3, en heeft de gebruiker drie gelijke waarden gegooid.Klik in het menu Visual Studio Code File op Opslaan.
Neem even de tijd om uw code te controleren.
Zorg ervoor dat uw code overeenkomt met het volgende:
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."); }Als u in de EXPLORER-weergave een Terminal wilt openen op de locatie van de map TestProject, klikt u met de rechtermuisknop op TestProject en selecteert u Openen in geïntegreerde terminal.
Er moet een terminalvenster worden geopend en moet een opdrachtprompt bevatten die laat zien dat de Terminal is geopend voor de locatie van de testproject-map.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
Notitie
Als er een bericht wordt weergegeven met de tekst 'Kan een project niet vinden om uit te voeren', controleert u of in de Terminal-opdrachtprompt de verwachte locatie van de testprojectmap wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop\csharpprojects\TestProject>U ziet uitvoer die lijkt op een van de volgende resultaten:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose.Of zoals deze:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose.Of zoals deze:
Dice roll: 5 + 6 + 4 = 15 You win!Als u geluk hebt, ziet u mogelijk dit:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!Maar wacht, moet je de speler echt belonen met zowel de drievoudige bonus als de dubbele bonus? Een worp van drieën impliceert immers dat ze ook dubbel hebben gerold. In het ideale geval mogen de bonussen niet stapelen. Er moeten twee afzonderlijke bonusvoorwaarden zijn. Dit is een fout in logica die moet worden gecorrigeerd.
Problemen in uw logica en kansen om de code te verbeteren
Hoewel dit een goed begin is en u veel hebt geleerd over de if instructie, Booleaanse expressies, codeblokken, logische OF- en AND-operators, enzovoort, is er veel dat kan worden verbeterd. Dat doet u in de volgende module.
Samenvatting
- Gebruik een
if-instructie om uw codelogica te vertakken. Door deif-beslissingsinstructie wordt code in het codeblok uitgevoerd als de Booleaanse expressie gelijk is aan waar. Anders wordt het codeblok door de runtime overgeslagen en gaat de runtime verder met de volgende coderegel na de codeblok. - Een Boole-expressie is een expressie die een Booleaanse waarde retourneert.
- Met Booleaanse operators worden de twee waarden aan de linker- en rechterkant vergeleken op gelijkheid, vergelijking en andere criteria.
- Een codeblok wordt gedefinieerd door accolades
{ }. Dit blok verzamelt coderegels die als één eenheid moeten worden behandeld. - De logische EN-operator
&&combineert twee expressies, zodat beide subexpressies waar moeten zijn om de expressie waar te maken. - De logische OF-operator
||telt twee expressies op, zodat als een van de subexpressies Waar is, de hele expressie Waar is.
Kennis testen
Feedback
Is deze pagina nuttig?
Nee
Need help with this topic?
Want to try using Ask Learn to clarify or guide you through this topic?