Övning – Skapa beslutslogik med if-instruktioner

Slutförd

De flesta program innehåller ett stort antal körningssökvägar. Ett program kan till exempel implementera olika körningssökvägar baserat på vilket menyalternativ en användare väljer. Utvecklare refererar till koden som implementerar olika körningssökvägar som kodgrenar.

Den mest använda kodförgreningssatsen är -instruktionen if . Instruktionen if bygger på ett booleskt uttryck som är satt inom parentes. Om uttrycket är sant körs koden efter instruktionen if . Annars ignorerar .NET-körningen koden och kör den inte.

I den här övningen övar du på att skriva if instruktioner genom att skapa ett spel. Först definierar du reglerna för spelet och sedan implementerar du dem i kod.

Du använder Random.Next() metoden för att simulera rullande tre sexsidiga tärningar. Du utvärderar de rullande värdena för att beräkna poängen. Om poängen är större än en godtycklig summa visar du ett vinnande meddelande för användaren. Om poängen ligger under gränsen visas ett meddelande som användaren förlorar.

  • Om två tärningar har samma värde får du två bonuspoäng för en dubbel.
  • Om alla tre tärningar har samma värde får du sex bonuspoäng för en trippel.
  • Om summan av de tre tärningarna plus eventuella bonuspoäng är 15 eller högre vinner du spelet. Annars förlorar du.

Du förfinar reglerna när du lär dig mer om -instruktionen if .

Viktigt!

Den här övningen använder klassen i System.Random stor utsträckning. Du kan referera till Microsoft Learn-modulen "Anropa metoder från .NET-klassbiblioteket med C#" om du behöver uppdatera hur Random.Next() det fungerar.

Förbereda din kodningsmiljö

Den här modulen innehåller aktiviteter som vägleder dig genom processen att skapa och köra exempelkod. Du uppmanas att slutföra dessa aktiviteter med Visual Studio Code som utvecklingsmiljö. Genom att använda Visual Studio Code för dessa aktiviteter kan du bli mer bekväm med att skriva och köra kod i en utvecklarmiljö som används av proffs över hela världen.

  1. Öppna Visual Studio Code.

    Du kan använda Windows Start-menyn (eller motsvarande resurs för ett annat operativsystem) för att öppna Visual Studio Code.

  2. På menyn Visual Studio Code-fil väljer du Öppna mapp.

  3. I dialogrutan Öppna mapp navigerar du till mappen Windows Desktop.

    Om du har en annan mappplats där du behåller kodprojekt kan du använda den mappplatsen i stället. För den här utbildningen är det viktigt att ha en plats som är lätt att hitta och komma ihåg.

  4. I dialogrutan Öppna mapp väljer du Välj mapp.

    Om du ser en säkerhetsdialogruta som frågar om du litar på författarna väljer du Ja.

  5. Välj Ny terminal på visual Studio Code-terminalmenyn.

    Observera att en kommandotolk i terminalpanelen visar mappsökvägen för den aktuella mappen. Till exempel:

    C:\Users\someuser\Desktop>
    

    Kommentar

    Om du arbetar på din egen dator i stället för i en sandbox-miljö eller en värdbaserad miljö och du har slutfört andra Microsoft Learn-moduler i den här C#-serien kanske du redan har skapat en projektmapp för kodexempel. I så fall kan du hoppa över nästa steg, som används för att skapa en konsolapp i mappen TestProject.

  6. Om du vill skapa ett nytt konsolprogram i en angiven mapp i terminalkommandot skriver du den nya dotnet-konsolen -o ./CsharpProjects/TestProject och trycker sedan på Retur.

    Det här .NET CLI-kommandot använder en .NET-programmall för att skapa ett nytt C#-konsolprogramprojekt på den angivna mappplatsen. Kommandot skapar mapparna CsharpProjects och TestProject åt dig och använder TestProject som namnet på filen .csproj .

  7. I explorer-panelen expanderar du mappen CsharpProjects .

    Du bör se mappen TestProject och två filer, en C#-programfil med namnet Program.cs och en C#-projektfil med namnet TestProject.csproj.

  8. Välj Program.cs för att visa kodfilen i redigeringspanelen i explorer-panelen.

  9. Ta bort de befintliga kodraderna.

    Du kommer att använda det här C#-konsolprojektet för att skapa, skapa och köra kodexempel under den här modulen.

  10. Stäng terminalpanelen.

Skriva kod som genererar tre slumpmässiga tal och visar dem i utdata

  1. Kontrollera att du har en tom Program.cs-fil öppen i Visual Studio Code.

  2. Om du vill skapa den första koden för den här övningen anger du följande:

    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}");
    
    
  3. Det tar en minut att granska koden som du angav.

    Börja med att skapa en ny instans av System.Random klassen och lagra en referens till objektet i en variabel med namnet dice. Sedan anropar Random.Next() du metoden för dice objektet tre gånger, vilket ger både de nedre och övre gränserna för att begränsa möjliga värden mellan 1 och 6 (den övre gränsen är exklusiv). Du sparar de tre slumpmässiga talen i variablerna roll1, roll2respektive roll3.

    Därefter summerar du de tre tärningskasten och sparar värdet i en heltalsvariabel med namnet total.

    Slutligen använder WriteLine() du metoden för att visa de tre värdena med hjälp av stränginterpolation.

    När du kör koden bör du se följande meddelande (talen kommer vara annorlunda).

    Dice roll: 4 + 5 + 2 = 11
    
    

    Den första uppgiften var en installationsuppgift. Nu kan du lägga till beslutslogik i koden för att göra spelet mer intressant.

Lägg till en if-instruktion för att visa olika meddelanden baserat på värdet för den totala variabeln

  1. Leta upp markören längst ned i kodfilen i Visual Studio Code-redigeraren och skapa sedan en tom kodrad.

  2. Om du vill skapa din första spelfunktion anger du följande if instruktioner.

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

    Dessa två if instruktioner används för att hantera de vinnande och förlorande scenarierna. Ta en minut att undersöka den första if instruktionen.

    Observera att instruktionen if består av tre delar:

    • Nyckelordet if
    • Ett booleskt uttryck satt inom parentes ()
    • Ett kodblock satt inom klammerparenteser { }

    När koden körs så utvärderas det booleska uttrycket total > 14. Om det här är en sann instruktion (om värdet total för är större än 14) fortsätter körningsflödet till den kod som definierats i kodblocket. Det innebär att koden inom klammerparenteserna körs.

    Men om det booleska uttrycket är falskt (värdet total inte större än 14) hoppar körningsflödet förbi kodblocket. Det innebär att koden inom klammerparenteserna inte körs.

    Slutligen hanterar den andra if-instruktionen meddelandet om användaren förlorar. I nästa lektion använder du en variant av -instruktionen if för att förkorta dessa två instruktioner till en enda instruktion som tydligare uttrycker avsikten.

Vad är ett booleskt uttryck?

Ett booleskt uttryck är en kod som returnerar ett booleskt värde, antingen true eller false. De enklaste booleska uttrycken är bara värdena true och false. Alternativt kan ett booleskt uttryck vara resultatet av en metod som returnerar värdet true eller false. Här är ett exempel på enkel kod där metoden string.Contains() används till att utvärdera om en sträng innehåller en annan sträng.

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") Eftersom returnerar ett true eller false -värde kvalificeras det som ett booleskt uttryck och kan användas i en if -instruktion.

Andra enkla booleska uttryck kan skapas med hjälp av operatorer för att jämföra två värden. Här är några sådana operatorer:

  • ==, operatorn "lika med" för att testa för likhet
  • >, operatorn "större än" för att testa att värdet till vänster är större än värdet till höger
  • <, operatorn "mindre än" för att testa att värdet till vänster är mindre än värdet till höger
  • >=, operatorn ”större än eller lika med”
  • <=, operatorn ”mindre än eller lika med”
  • och så vidare

Kommentar

C#-träningsserien på Microsoft Learn ägnar en hel modul åt booleska uttryck. Det finns många operatorer som du kan använda för att skapa ett booleskt uttryck, och du kommer bara att ta upp några av grunderna här i den här modulen. Mer information om booleska uttryck finns i Microsoft Learn-modulen "Utvärdera booleska uttryck för att fatta beslut i C#".

I det här exemplet utvärderade du det booleska uttrycket total > 14. Du kunde dock ha valt det booleska uttrycket total >= 15 eftersom de i det här fallet är desamma. Med tanke på att reglerna för spelet anger "Om summan av de tre tärningarna, plus eventuella bonusar, är 15 eller större, så vinner du spelet", bör du förmodligen implementera >= 15 uttrycket. Du kommer att göra den ändringen i nästa steg i övningen.

Vad är ett kodblock?

Ett kodblock är en eller flera kodrader som skrivs inom en inledande och en avslutande klammerparentes { }. Den representerar en fullständig kodenhet som har ett enda syfte i ditt programvarusystem. I det här fallet körs alla rader i kodblocket om det booleska uttrycket är sant. Om det booleska uttrycket däremot är falskt ignoreras alla kodrader i kodblocket.

Du bör också veta att kodblock kan innehålla andra kodblock. I själva verket är det vanligt att ett kodblock "kapslas" i ett annat kodblock i dina program. Du börjar kapsla dina egna kodblock senare i den här modulen när du skapar en if instruktion i kodblocket på en annan.

Kommentar

C#-träningsserien på Microsoft Learn ägnar en hel modul åt att förstå kodblock. Kodblock är centrala för att förstå kodorganisation och struktur, och de definierar gränserna för variabelt omfång. Se modulen [Control variable scope and logic using code blocks in C#](TBD).

Lägg till ytterligare en if-instruktion för att implementera doubles-bonusen

Därefter kan du implementera regeln: "Om två tärningar du rullar resulterar i samma värde får du två bonuspoäng för rullande dubbel". Ändra koden från föregående steg så att den ser ut så här:

  1. Leta upp markören på den tomma kodraden ovanför den första if instruktionen i Visual Studio Code-redigeraren.

  2. Om du vill skapa din "doubles"-spelfunktion anger du följande if instruktion.

    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    

    Här kombinerar du tre booleska uttryck för att skapa ett sammansatt booleskt uttryck på en enda kodrad. Det här kallas ibland för ett sammansatt villkor. Du har en yttre uppsättning parenteser som kombinerar tre inre uppsättningar parenteser avgränsade med två pipe-tecken.

    De dubbla vertikalstrecken || representerar den logiska operatorn ELLER, som betyder ”hela det booleska uttrycket är sant om uttrycket till vänster ELLER uttrycket till höger (eller båda) är sant”. Om båda booleska uttrycken är false är hela det booleska uttrycket falskt. Du använder två logiska OR-operatorer så att du kan utöka utvärderingen till ett tredje booleskt uttryck.

    Först utvärderar (roll1 == roll2)du . Om det är sant är hela uttrycket sant. Om det är falskt utvärderar (roll2 == roll3)du . Om det är sant är hela uttrycket sant. Om det är falskt utvärderar (roll1 == roll3)du . Om det är sant är hela uttrycket sant. Om det är falskt är hela uttrycket falskt.

    Om det sammansatta booleska uttrycket är sant kör du följande kodblock. Den här gången har vi två kodrader. Den första kodraden skriver ut ett meddelande till användaren. Den andra kodraden ökar värdet för total med 2.

  3. Uppdatera den andra if instruktionen på följande sätt för att förbättra kodens läsbarhet:

    if (total >= 15)
    

    Observera att du nu använder operatorn >= i uttrycket som används för att utvärdera en vinnande roll. Operatorn >= betyder "större eller lika med". Därför kan du jämföra med total värdet 15 i stället för 14. Med dessa ändringar liknar uttrycket som du använder för att utvärdera en vinnande rulle nu det uttryck som du utvärderar för en förlorande roll. Detta bör bidra till att göra koden enklare att förstå (mer läsbar). Eftersom du hanterar heltalsvärden fungerar det nya uttrycket (total >= 15) identiskt med det du skrev tidigare (total > 14).

  4. Det tar en minut att granska koden.

    Din kod bör matcha den här:

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

    Observera den förbättrade justeringen mellan de uttryck som används för att utvärdera vinnande och förlorande rullar.

Lägg till ytterligare en if-instruktion för att implementera trippelbonusen

Därefter kan du implementera regeln: "Om alla tre tärningarna du rullar resulterar i samma värde får du sex bonuspoäng för rullande tripplar." Ändra koden från föregående steg så att den matchar följande kodlista:

  1. I Visual Studio Code-redigeraren skapar du en tom kodrad under kodblocket för din "doubles" if -instruktion.

  2. Om du vill skapa din "tripplar"-spelfunktion anger du följande if instruktion.

    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    

    Här kombinerar du två booleska uttryck för att skapa ett sammansatt booleskt uttryck på en enda kodrad. Du har en yttre uppsättning parenteser som kombinerar två inre uppsättningar parenteser avgränsade med två et-tecken.

    De dubbla och-tecknen && representerar den logiska operatorn OCH, som betyder ”hela det booleska uttrycket är sant endast om båda uttrycken är sanna”. I vårt fall gäller att om roll1 är lika med roll2 och roll2 är lika med roll3, så måste roll1 vara lika med roll3 så att användaren har slagit en trippel.

  3. Klicka på Spara på Visual Studio Code-menyn.

  4. Det tar en minut att granska koden.

    Kontrollera att koden matchar följande:

    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.");
    }
    
    
  5. I explorer-panelen öppnar du en terminal på mappen TestProject genom att högerklicka på TestProject och sedan välja Öppna i integrerad terminal.

    En terminalpanel bör öppnas och bör innehålla en kommandotolk som visar att terminalen är öppen för mappen TestProject.

  6. I kommandotolken i Terminal skriver du dotnet run och trycker sedan på Retur för att köra koden.

    Kommentar

    Om du ser ett meddelande med texten "Det gick inte att hitta ett projekt att köra" kontrollerar du att Terminal-kommandotolken visar den förväntade platsen för TestProject-mappen. Till exempel: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    Du bör se utdata som liknar något av följande resultat:

    Dice roll: 3 + 6 + 1 = 10
    Sorry, you lose.
    
    

    Eller så här:

    Dice roll: 1 + 4 + 4 = 9
    You rolled doubles! +2 bonus to total!
    Sorry, you lose.
    
    

    Eller så här:

    Dice roll: 5 + 6 + 4 = 15
    You win!
    
    

    Om du har tur kan det se ut så här:

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

    Men vänta, ska du verkligen belöna spelaren med både trippelbonusen och dubbelbonusen? Trots allt innebär en rulle tripplar att de också rullade dubblar. Helst bör bonusarna inte staplas. Det bör finnas två separata bonusvillkor. Det här är en bugg i logiken som måste korrigeras.

Problem med din logik och möjligheter att förbättra koden

Även om det här är en bra början, och du har lärt dig mycket om instruktionen if , booleska uttryck, kodblock, logiska OR- och AND-operatorer och så vidare, finns det mycket som kan förbättras. Det gör du i nästa lektion.

Sammanfattning

  • Använd if-instruktioner till att skapa förgreningar i kodlogiken. if-instruktionen kör koden i kodblocket om det booleska uttrycket är sant. Annars ignoreras kodblocket och körningen fortsätter med nästa kodrad efter kodblocket.
  • Ett booleskt uttryck är ett uttryck som returnerar ett booleskt värde.
  • Booleska operatorer jämför de två värdena till vänster och höger om operatorn.
  • Ett kodblock skrivs inom klammerparenteser { }. Kodraderna i kodblocket ska ses som en enda enhet.
  • Den logiska operatorn OCH && sätter ihop två uttryck på så sätt att båda uttrycken måste vara sanna för att hela uttrycket ska vara sant.
  • Den logiska operatorn ELLER || sätter ihop två uttryck på så sätt att hela uttrycket är sant om minst ett av deluttrycken är sant.

Testa dina kunskaper

1.

Vad är ett kodblock?

2.

Vad är en boolesk instruktion eller ett uttryck?