Cvičení – vytvoření vnořené rozhodovací logiky s if, else if a else

Dokončeno

V předchozí lekci jste použili více if příkazů k implementaci pravidel hry. Na konci lekce jste si ale všimli, že k opravě drobné chyby v kódu jsou potřeba výraznější if příkazy.

V tomto cvičení použijete ifa elseelse if příkazy ke zlepšení možností větvení v kódu a opravě chyby logiky.

Použití příkazů if a else místo dvou samostatných příkazů if

Místo provedení dvou kontrol zobrazíte zprávu "Vyhrát!" nebo "Je nám líto", použijete else klíčové slovo.

  1. Ujistěte se, že kód Program.cs odpovídá následujícímu:

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

    Toto je kód, který jste dokončili v předchozí lekci.

  2. Prozkoumejte dva if příkazy na konci souboru za minutu:

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

    Všimněte si, že oba if příkazy se porovnávají total se stejnou číselnou hodnotou. Toto je ideální příležitost k použití else příkazu.

  3. Aktualizujte tyto dva if příkazy následujícím způsobem:

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

    Pokud je false, total >= 15 pak se spustí blok kódu za klíčovým slovem else . Vzhledem k tomu, že tyto dva výsledky jsou související opaky, je to ideální scénář pro else klíčové slovo.

  4. Aktualizovaný soubor Program.cs by měl obsahovat následující kód:

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

Úprava kódu tak, aby odebral bonus pro skládání dvojitých a trojitých hodnot pomocí vnoření

V předchozí lekci jste viděli, že do vaší aplikace byla zavedena malá chyba logiky. Tento problém můžete vyřešit vnořením if příkazů.

Vnoření umožňuje umístit bloky kódu uvnitř bloků kódu. V takovém případě vnořete do if jiného else příkazu (kontrola trojitých hodnot) a if vnořete kombinaci (kontrola trojitých hodnot), abyste zabránili udělení obou bonusů.

  1. Kód upravte tak, aby odpovídal následujícímu zápisu:

    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. Projděte si vnořené if příkazy za minutu.

    Cílem je vytvořit vnitřní if-else konstruktor, ve kterém jsou dva výsledky související opaky, a pak použít protichůdné výsledky (if/true a else/false) k udělení bonusových bodů za trojité a dvojité hodnoty. Chcete-li tohoto cíle dosáhnout, zkontrolujte, zda se ve vnějším if příkazu zdvojnásobí, a pak v vnitřním if příkazu vyhledáte trojité výrazy. Tento vzor zajišťuje, že když vnitřní kontrola trojitých bodů vrátí false, váš else blok kódu může udělit body za dvojité hodnoty.

    Chystáte se "pevně kódovat" výsledky tří hodů, abyste mohli otestovat logiku kódu.

  3. Vytvořte prázdný řádek kódu nad řádkem, kde total je deklarován a inicializován.

  4. Pokud chcete testovat uvedení dvojitých poklikání, zadejte následující kód:

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

    Pevné kódování těchto tří roll proměnných umožňuje testovat kód, aniž byste museli aplikaci spouštět desítkykrát.

  5. V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.

  6. Chcete-li v zobrazení PRŮZKUMNÍKa otevřít terminál v umístění složky TestProject, klepněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.

    Měl by se otevřít panel terminálu a měl by obsahovat příkazový řádek zobrazující, že terminál je otevřený v umístění složky TestProject.

  7. Na příkazovém řádku terminálu spusťte kód zadáním příkazu dotnet run a stiskněte Enter.

    Při spuštění kódu byste měli vidět:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Pokud chcete otestovat uvedení trojitých hodnot, aktualizujte pevně zakódované proměnné takto:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.

  10. Chcete-li v zobrazení PRŮZKUMNÍKa otevřít terminál v umístění složky TestProject, klepněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu.

  11. Na příkazovém řádku terminálu spusťte kód zadáním příkazu dotnet run a stiskněte Enter.

    Při spuštění kódu byste měli vidět:

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

Použijte příkaz if, else a else if k poskytnutí výhry místo zprávy o ztrátě výhry.

Aby hra byla zábavnější, můžete hru změnit z "win-or-lose" na ocenění fiktivních cen pro každé skóre. Můžete nabídnout čtyři ceny. Hráč by však měl vyhrát pouze jednu cenu:

  • Pokud hráč dosáhne skóre 16 nebo vyšší, vyhraje nové auto.
  • Pokud hráč dosáhne skóre 10 nebo vyšší, vyhraje nový laptop.
  • Pokud hráč dosáhne skóre přesně 7, vyhraje zájezd.
  • Jinak hráč vyhraje kotě.
  1. Kód, který jste napsali v předchozích krocích, upravte na následující zápis:

    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. Zkontrolujte aktualizovaný if-elseif-else konstruktor za minutu.

    Příkazy if, else ifa else příkazy umožňují vytvořit více exkluzivních podmínek jako logické výrazy. Jinými slovy, pokud chcete, aby se stalo jen jeden výsledek, ale máte několik možných podmínek a výsledků, použijte libovolný počet else if příkazů. Pokud se žádný z if příkazů nepoužije else if , provede se konečný else blok kódu. Tato else možnost je nepovinná, ale pokud se rozhodnete ji zahrnout, musí být poslední.

  3. Pomocí techniky dočasného pevného kódování roll proměnných otestujte každou zprávu.

Rekapitulace

  • Kombinace if příkazů else a příkazů umožňuje testovat jednu podmínku a pak provést jeden ze dvou výsledků. Blok kódu pro objekt if se spustí, když je truelogický výraz , a blok kódu pro objekt else se spustí, když je falselogický výraz .
  • Příkazy můžete vnořit if a zúžit tak možnou podmínku. Měli byste však zvážit použití ifpříkazu , else ifa else místo toho.
  • Příkazy použijte else if k vytvoření několika exkluzivních podmínek.
  • Je else nepovinná, ale při zahrnutí musí být vždy poslední.