Gyakorlat – Beágyazott döntési logika létrehozása if, else if és else
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.
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.
Szánjon egy percet a fájl végén található két
ifutasí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
ifutasítás ugyanazzal a numerikus értékkel hasonlít összetotal. Ez a tökéletes lehetőség egy állítás használatáraelse.Frissítse a két
ifutasítást az alábbiak szerint:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Itt, ha
total >= 15hamis, akkor a kulcsszót követőelsekódblokk lesz végrehajtva. Mivel a két eredmény egymáshoz kapcsolódó ellentétek, ez tökéletes forgatókönyv aelsekulcsszóhoz.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.
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."); }Szánjon egy percet a beágyazott utasítások áttekintésére
if.A cél egy belső
if-elseszerkezet 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őifutasításban meg kell keresnie a duplákat, majd a belsőifutasításban a triplákat. Ez a minta biztosítja, hogy amikor a hármasok belső ellenőrzése visszatérfalse, aelsekó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.
Hozzon létre egy üres kódsort a deklarált és inicializált sor
totalfölött.Dupla dobás teszteléséhez írja be a következő kódot:
roll1 = 6; roll2 = 6; roll3 = 5;A három
rollvá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.A Visual Studio Code Fájl menüjében kattintson a Mentés gombra.
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.
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!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;A Visual Studio Code Fájl menüjében kattintson a Mentés gombra.
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.
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.
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!"); }Szánjon egy percet a frissített
if-elseif-elseszerkezet áttekintésére.A
if,else iféselseaz 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 annyielse ifutasítást, amennyit csak szeretne. Ha az ésifazelse ifutasítások egyike sem érvényes, a program végrehajtja a véglegeselsekódblokkot. Ezelsenem kötelező, de az utolsónak kell lennie, ha úgy dönt, hogy belefoglalja.Az egyes üzenetek teszteléséhez használja a
rollváltozók ideiglenesen kemény kódolásának technikáját.
Összefoglalás
- Az utasítások kombinációja
ifelselehetővé teszi, hogy egy feltételt teszteljen, majd két eredmény egyikét hajtsa végre. A kódblokk aiflogikai kifejezéstruehasználatakor lesz futtatva, a kódblokkelsepedig akkor lesz futtatva, amikor a logikai kifejezés .false - Az utasítások beágyazhatók
ifegy lehetséges feltétel szűkítéséhez. Érdemes azonban inkább a ,iféselse ifazelseutasításokat használni. - Utasítások használata
else iftöbb kizárólagos feltétel létrehozásához. - Az an
elsenem kötelező, de mindig az utolsónak kell lennie, ha szerepel benne.