Oefening: geneste beslissingslogica maken met if, else if en else

Voltooid

In de vorige les hebt u meerdere if instructies gebruikt om de regels van een spel te implementeren. Aan het einde van de les hebt u echter gemerkt dat er meer expressieve if instructies nodig zijn om een subtiele fout in uw code op te lossen.

In deze oefening gebruikt ifu , elseen else if instructies om de vertakkingsopties in uw code te verbeteren en een logicafout op te lossen.

Gebruik if- en else-instructies in plaats van twee afzonderlijke if-instructies

In plaats van twee controles uit te voeren om het bericht 'U wint!' of 'Sorry, u verliest' weer te geven, gebruikt u het else trefwoord.

  1. Zorg ervoor dat uw Program.cs 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.");
    }
    
    

    Dit is de code die u in de vorige les hebt voltooid.

  2. Neem even de tijd om de twee if instructies aan het einde van het bestand te bekijken:

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

    U ziet dat beide if instructies vergelijken total met dezelfde numerieke waarde. Dit is de perfecte gelegenheid om een else verklaring te gebruiken.

  3. Werk de twee if instructies als volgt bij:

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

    total >= 15 Als dit onwaar is, wordt het codeblok na het else trefwoord uitgevoerd. Omdat de twee resultaten gerelateerde tegengestelden zijn, is dit een perfect scenario voor het else trefwoord.

  4. Het bijgewerkte Program.cs-bestand moet de volgende code bevatten:

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

Wijzig de code om de stapelbonus te verwijderen voor doubles en triples met behulp van nesting

In de vorige les hebt u gezien dat er een subtiele logische fout is geïntroduceerd in uw toepassing. U kunt dit probleem oplossen door uw if instructies te nesten.

Met nesten kunt u codeblokken in codeblokken plaatsen. In dit geval nest je een if en else combinatie (het controleren op doubles) binnen een andere if instructie (de controle op drie keer) om te voorkomen dat beide bonussen worden toegekend.

  1. Pas uw code aan zodat deze overeenkomt met het volgende code-uittreksel:

    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. Neem even de tijd om de geneste if instructies te bekijken.

    Het doel is om een binnenste if-else constructie te creëren waarbij de twee resultaten gerelateerde tegengestelde tegengestelde resultaten zijn en vervolgens de tegengestelde resultaten (indien/waar en anders/onwaar) gebruiken om de bonuspunten voor drievoudige en dubbele punten toe te kennen. Om dit doel te bereiken, controleert u op doubles in de buitenste if instructie en vervolgens op drie keer in de binnenste if instructie. Dit patroon zorgt ervoor dat wanneer de binnenste controle op triples retourneert false, uw else codeblok de punten voor doubles kan toekennen.

    U gaat nu de resultaten van uw drie worpen 'hard code' gebruiken om uw codelogica te testen.

  3. Maak een lege coderegel boven de regel waar total wordt gedeclareerd en geïnitialiseerd.

  4. Voer de volgende code in om te testen op een roll of doubles:

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

    Met hard coderen van de drie roll variabelen kunt u de code testen zonder de toepassing tientallen keren uit te voeren.

  5. Klik in het menu Visual Studio Code File op Opslaan.

  6. 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.

  7. Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.

    Wanneer uw code wordt uitgevoerd, ziet u het volgende:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Als u wilt testen op een roll of triples, werkt u de vaste roll variables als volgt bij:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. Klik in het menu Visual Studio Code File op Opslaan.

  10. 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.

  11. Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.

    Wanneer uw code wordt uitgevoerd, ziet u het volgende:

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

Gebruik if,else, and else if statements to give a prize in plaats van a win-lose message

Om het spel leuker te maken, kunt u het spel wijzigen van "win-or-lose" tot het toekennen van fictieve prijzen voor elke score. U kunt vier prijzen aanbieden. De speler mag echter slechts één prijs winnen:

  • Als de speler hoger dan of precies 16 gooit, wint hij of zij een nieuwe auto.
  • Als de speler hoger dan of precies 10 gooit, wint hij of zij een nieuwe laptop.
  • Als de speler precies 7 gooit, wint hij of zij een reis.
  • In alle andere gevallen wint de speler een kitten.
  1. Pas de code uit de vorige stap aan zodat deze overeenkomt met de volgende codevermelding:

    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. Neem even de tijd om de bijgewerkte if-elseif-else constructie te bekijken.

    Met de ifinstructies , else ifen else instructies kunt u meerdere exclusieve voorwaarden maken als Boole-expressies. Met andere woorden, als u maar één resultaat wilt, maar u meerdere mogelijke voorwaarden en resultaten hebt, gebruikt u zoveel else if instructies als u wilt. Als geen van de if en else if instructies van toepassing is, wordt het uiteindelijke else codeblok uitgevoerd. Het else is optioneel, maar het moet als laatste komen als u ervoor kiest om het op te nemen.

  3. Gebruik de techniek van het tijdelijk hard coderen van de roll variabelen om elk bericht te testen.

Samenvatting

  • Met de combinatie van if en else instructies kunt u één voorwaarde testen en vervolgens een van de twee resultaten uitvoeren. Het codeblok voor de if expressie wordt uitgevoerd wanneer de Boole-expressie is trueen het codeblok voor de else expressie wordt uitgevoerd wanneer de Boole-expressie is false.
  • U kunt instructies nesten if om een mogelijke voorwaarde te beperken. U moet echter overwegen om in plaats daarvan de if, else ifen else instructies te gebruiken.
  • Gebruik else if instructies om meerdere exclusieve voorwaarden te maken.
  • Een else is optioneel, maar deze moet altijd als laatste komen wanneer deze is opgenomen.