Gyakorlat – Beágyazott döntési logika létrehozása if, else if és else

Befejeződött

Az előző leckében több if utasítást használt egy játék szabályainak implementálásához. Az egység végén azonban észrevette, hogy kifejezőbb if utasításokra van szükség egy apró hiba kijavításához a kódban.

Ebben a gyakorlatban a kód ifelágaztatási beállításainak javítására és else egy logikai hiba kijavítására fogja használni else ifaz utasításokat.

Ha és más utasítás használata két különálló ha utasítás helyett

Ahelyett, hogy két ellenőrzést végezne a "Nyersz!" vagy a "Sajnáljuk, elveszíted" üzenet megjelenítéséhez, a kulcsszót else fogja használni.

  1. Győződjön meg arról, hogy a Program.cs kód megfelel a következőnek:

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

    Ez az előző leckében befejezett kód.

  2. Szánjon egy percet a fájl végén található két if utasítás vizsgálatára:

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

    Figyelje meg, hogy mindkét if utasítás ugyanazzal a numerikus értékkel hasonlít össze total . Ez a tökéletes lehetőség egy állítás használatára else .

  3. Frissítse a két if utasítást az alábbiak szerint:

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

    Itt, ha total >= 15 hamis, akkor a kulcsszót követő else kódblokk lesz végrehajtva. Mivel a két eredmény egymáshoz kapcsolódó ellentétek, ez tökéletes forgatókönyv a else kulcsszóhoz.

  4. A frissített Program.cs fájlnak a következő kódot kell tartalmaznia:

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

Módosítsa a kódot a duplák és triplák halmozási bónuszának eltávolításához beágyazással

Az előző leckében azt tapasztalta, hogy egy finom logikai hiba lépett fel az alkalmazásba. Ezt a problémát az utasítások beágyazásával háríthatja el if .

A beágyazással kódblokkokat helyezhet el a kódblokkokban. Ebben az esetben egy if és else több kombinációt (a dupla csekket) egy másik if utasításba (a triplák ellenőrzésébe) ágyazza be, hogy megakadályozza mindkét bónusz odaítélését.

  1. Módosítsa a kódot úgy, hogy az megfeleljen az alábbi kódnak:

    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. Szánjon egy percet a beágyazott utasítások áttekintésére if .

    A cél egy belső if-else szerkezet létrehozása, ahol a két eredmény egymáshoz kapcsolódó ellentétek, majd az ellentétes eredmények (ha/igaz és más/hamis) használatával ítélik oda a bónuszpontokat a triplák és a duplák számára. Ennek a célnak a eléréséhez a külső if utasításban meg kell keresnie a duplákat, majd a belső if utasításban a triplákat. Ez a minta biztosítja, hogy amikor a hármasok belső ellenőrzése visszatér false, a else kódblokk a dupla pontokért is odaítélheti a pontokat.

    A következő lépésben a kódlogika teszteléséhez "kemény kódot" fog adni a három dobás eredményeihez.

  3. Hozzon létre egy üres kódsort a deklarált és inicializált sor total fölött.

  4. Dupla dobás teszteléséhez írja be a következő kódot:

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

    A három roll változó kemény kódolása lehetővé teszi a kód tesztelését anélkül, hogy több tucat alkalommal kellene futtatnia az alkalmazást.

  5. A Visual Studio Code Fájl menüjében kattintson a Mentés gombra.

  6. Explorer nézetben nyissa meg a Terminált a TestProject mappa helyén, kattintson a jobb gombbal a TestProject elemre, majd válassza a Megnyitás az integrált terminálban lehetőséget.

    Meg kell nyitnia egy terminálpanelt, és tartalmaznia kell egy parancssort, amely azt mutatja, hogy a terminál nyitva van a TestProject mappa helye előtt.

  7. A terminál parancssorában a kód futtatásához írja be a dotnet run parancsot, majd nyomja le az Enter billentyűt.

    A kód futtatásakor a következőt kell látnia:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. A háromszoros tekercs teszteléséhez frissítse a rögzített roll változókat az alábbiak szerint:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. A Visual Studio Code Fájl menüjében kattintson a Mentés gombra.

  10. Explorer nézetben nyissa meg a Terminált a TestProject mappa helyén, kattintson a jobb gombbal a TestProject elemre, majd válassza a Megnyitás az integrált terminálban lehetőséget.

  11. A terminál parancssorában a kód futtatásához írja be a dotnet run parancsot, majd nyomja le az Enter billentyűt.

    A kód futtatásakor a következőt kell látnia:

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

Ha, máskor és máskor, ha a nyeremény átadására vonatkozó utasításokat használjuk a nyereményvesztési üzenet helyett

Ahhoz, hogy a játék szórakoztatóbb legyen, megváltoztathatja a játékot a "win-or-lose" értékről fiktív díjak odaítélésére az egyes pontszámokért. Négy díjat ajánlhat fel. A játékosnak azonban csak egy díjat kell megnyernie:

  • Ha a játékos pontszáma 16 vagy magasabb, akkor egy új kocsit kap.
  • Ha a játékos pontszáma 10 vagy magasabb, akkor egy új laptopot kap.
  • Ha a játékos pontszáma pontosan 7, akkor egy utazást nyer.
  • Minden más esetben egy kiscica a nyereménye.
  1. Módosítsa az előző lépés kódját úgy, hogy az megfeleljen a következő kódnak:

    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. Szánjon egy percet a frissített if-elseif-else szerkezet áttekintésére.

    A if, else ifés else az utasítások lehetővé teszik, hogy több kizárólagos feltételt hozzon létre logikai kifejezésként. Más szóval, ha csak egy kimenetelt szeretne, de számos lehetséges feltétel és eredmény áll rendelkezésére, használjon annyi else if utasítást, amennyit csak szeretne. Ha az és if az else if utasítások egyike sem érvényes, a program végrehajtja a végleges else kódblokkot. Ez else nem kötelező, de az utolsónak kell lennie, ha úgy dönt, hogy belefoglalja.

  3. Az egyes üzenetek teszteléséhez használja a roll változók ideiglenesen kemény kódolásának technikáját.

Összefoglalás

  • Az utasítások kombinációja ifelse lehetővé teszi, hogy egy feltételt teszteljen, majd két eredmény egyikét hajtsa végre. A kódblokk a if logikai kifejezés truehasználatakor lesz futtatva, a kódblokk else pedig akkor lesz futtatva, amikor a logikai kifejezés .false
  • Az utasítások beágyazhatók if egy lehetséges feltétel szűkítéséhez. Érdemes azonban inkább a , ifés else if az elseutasításokat használni.
  • Utasítások használata else if több kizárólagos feltétel létrehozásához.
  • Az an else nem kötelező, de mindig az utolsónak kell lennie, ha szerepel benne.