Gyakorlat – Döntési logika létrehozása if utasításokkal
A legtöbb alkalmazás számos végrehajtási útvonalat tartalmaz. Egy alkalmazás például különböző végrehajtási útvonalakat valósíthat meg a felhasználó által kiválasztott menübeállítás alapján. A fejlesztők kódágakként hivatkoznak a különböző végrehajtási útvonalakat implementáló kódra.
A leggyakrabban használt kódelágazási utasítás az if
utasítás. Az if
utasítás egy logikai kifejezésre alapul, amelyet kapcsos zárójelek között helyezünk el. Ha a kifejezés igaz, az utasítás végrehajtása utáni if
kód. Ha nem, a .NET-futtatókörnyezet figyelmen kívül hagyja a kódot, és nem hajtja végre.
Ebben a gyakorlatban egy játék létrehozásával gyakorolhatja az utasítások írását if
. Először meg kell határoznia a játék szabályait, majd kódban fogja implementálni őket.
Ezzel a Random.Next()
módszerrel három hatoldalas dobókockát szimulálhat. A pontszám kiszámításához kiértékeli a hengerelt értékeket. Ha a pontszám nagyobb, mint egy tetszőleges összeg, akkor egy győztes üzenetet jelenít meg a felhasználónak. Ha a pontszám a leépítés alatt van, egy vesztes üzenetet jelenít meg a felhasználónak.
- Ha bármely két kocka ugyanazt az eredményt adja, akkor két bónuszpont jár a dupla kockadobásért.
- Ha mind a három kocka ugyanazt az eredményt adja, akkor a tripla kockadobásért hat bónuszpont jár.
- Ha a három kockadobás értéke plusz bármely bónuszpont összege 15 vagy nagyobb, akkor a játékos nyert. Ellenkező esetben a játékos veszít.
A szabályok pontosításával többet is megtudhat az if
utasításról.
Fontos
Ez a gyakorlat széles körben használja az osztályt System.Random
. Ha frissítési módra Random.Next()
van szüksége, tekintse meg a Microsoft Learn "Hívási metódusok a .NET-osztálytárból C#használatával" című modult.
A kódolási környezet előkészítése
Ez a modul olyan tevékenységeket tartalmaz, amelyek végigvezetik a mintakód létrehozásának és futtatásának folyamatán. Javasoljuk, hogy fejlesztési környezetként a Visual Studio Code használatával végezze el ezeket a tevékenységeket. Ha a Visual Studio Code-ot használja ezekhez a tevékenységekhez, azzal kényelmesebbé válik a kódírás és -futtatás egy olyan fejlesztői környezetben, amelyet világszerte használnak a szakemberek.
Nyissa meg a Visual Studio Code-ot.
A Visual Studio Code megnyitásához használhatja a Windows Start menüjét (vagy egy másik operációs rendszer egyenértékű erőforrását).
A Visual Studio Code File menüben válassza a Mappa megnyitása lehetőséget.
A Mappa megnyitása párbeszédpanelen lépjen a Windows Desktop mappába.
Ha más mappahelyen tartja a kódprojekteket, használhatja inkább ezt a mappahelyet. Ebben a képzésben az a fontos, hogy legyen egy könnyen megtalálható és megjegyezhető hely.
A Mappa megnyitása párbeszédpanelen válassza a Mappa kiválasztása lehetőséget.
Ha megjelenik egy biztonsági párbeszédpanel, amely megkérdezi, hogy megbízik-e a szerzőkben, válassza az Igen lehetőséget.
A Visual Studio Code Terminál menüjében válassza az Új terminál lehetőséget.
Figyelje meg, hogy a Terminál panelen egy parancssor megjeleníti az aktuális mappa elérési útját. Például:
C:\Users\someuser\Desktop>
Megjegyzés:
Ha nem tesztkörnyezetben vagy üzemeltetett környezetben, hanem saját PC-n dolgozik, és ebben a C#-sorozatban más Microsoft Learn-modulokat is elvégzett, előfordulhat, hogy már létrehozott egy projektmappát a kódmintákhoz. Ha ez a helyzet, átugorhatja a következő lépést, amellyel konzolalkalmazást hozhat létre a TestProject mappában.
A Terminál parancssorában egy új konzolalkalmazás adott mappában való létrehozásához írja be az új dotnet-konzolt -o ./CsharpProjects/TestProject parancsot, majd nyomja le az Enter billentyűt.
Ez a .NET CLI-parancs .NET-programsablon használatával hoz létre egy új C#-konzolalkalmazás-projektet a megadott mappahelyen. A parancs létrehozza Önnek a CsharpProjects és a TestProject mappákat, és a Fájl neveként
.csproj
a TestProjectet használja.Az EXPLORER panelen bontsa ki a CsharpProjects mappát.
Ekkor megjelenik a TestProject mappa és két fájl, egy Program.cs nevű C# programfájl és egy TestProject.csproj nevű C# projektfájl.
Az EXPLORER panelen válassza a Program.cs lehetőséget, ha meg szeretné tekinteni a kódfájlt a Szerkesztő panelen.
Törölje a meglévő kódsorokat.
Ebben a C#-konzolprojektben kódmintákat hozhat létre, hozhat létre és futtathat a modul során.
Zárja be a Terminál panelt.
Olyan kód írása, amely három véletlenszerű számot hoz létre, és megjeleníti őket a kimenetben
Győződjön meg arról, hogy egy üres Program.cs fájl van megnyitva a Visual Studio Code-ban.
A gyakorlat kezdeti kódjának létrehozásához írja be a következőket:
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}");
Szánjon egy percet a beírt kód áttekintésére.
Először hozzon létre egy új osztálypéldányt
System.Random
, és tároljon egy hivatkozást az objektumra egy nevesítettdice
változóban. Ezután háromszor hívja meg azRandom.Next()
dice
objektum metódusát, és az alsó és a felső határt is megadva korlátozza a lehetséges értékeket1
6
(a felső határ nem kötelező). A három véletlenszerű számot a változókba, illetveroll3
a változókbaroll1
roll2
mentheti.Ezután összegzi a három kockadobás értékét, és az értéket egy nevesített
total
egész szám változóba menti.Végül a metódussal sztringinterpolációval
WriteLine()
jelenítheti meg a három értéket.A kód futtatásakor a következő üzenetnek kell megjelennie (a számok ettől eltérőek lesznek).
Dice roll: 4 + 5 + 2 = 11
Ez az első feladat egy beállítási feladat volt. Most hozzáadhatja a döntési logikát a kódhoz, hogy érdekesebbé tegye a játékot.
Ha utasítás hozzáadása a különböző üzenetek megjelenítéséhez a teljes változó értéke alapján
A Visual Studio Code Editorban keresse meg a kurzort a kódfájl alján, majd hozzon létre egy üres kódsort.
Az első játékfunkció létrehozásához írja be az alábbi
if
utasításokat.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }
Ez a két
if
állítás a győztes és a vesztes forgatókönyvek kezelésére szolgál. Szánjon egy percet az elsőif
állítás vizsgálatára.Figyelje meg, hogy az
if
állítás három részből áll:- A
if
kulcsszó - A logikai kifejezés, mely zárójelek
()
között található - A kódblokk kapcsos zárójelek
{ }
között
Futási időben a rendszer kiértékeli a
total > 14
logikai kifejezést. Ha ez egy igaz utasítás (ha az értéktotal
nagyobb, mint14
) akkor a végrehajtás folyamata a kódblokkban definiált kódba kerül. Más szavakkal: végre lesz hajtva a kapcsos zárójelek közötti kód.Ha azonban a logikai kifejezés hamis (az értéke
total
nem nagyobb14
), akkor a végrehajtási folyamat kihagyja a kódblokkot. Más szavakkal: nem lesz végrehajtva a kapcsos zárójelek közötti kód.Végül a második
if
utasítás a vesztés esetén megjelenítendő üzenetet kezeli. A következő leckében az utasítás egy változatával rövidíti ezt aif
két utasítást egyetlen utasítássá, amely jobban kifejezi a szándékot.- A
Mik a logikai kifejezések?
A logikai kifejezés olyan kód, amely logikai értéket ad vissza, vagy true
false
. A legegyszerűbb logikai kifejezések egyszerűen az értékek true
és false
a . Másik lehetőségként logikai kifejezés lehet egy olyan metódus eredménye, amely az értéket true
vagy false
a . Erre egy egyszerű kódpélda az, amelyik a string.Contains()
metódus használatával értékeli ki, hogy egy sztring tartalmaz-e egy másik sztringet vagy sem.
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?");
}
Mivel a message.Contains("fox")
visszaadott érték vagy false
érték true
logikai kifejezésnek minősül, és egy utasításban if
is használható.
Más egyszerű logikai kifejezések is létrehozhatók operátorokkal két érték összehasonlítására. Az operátorok lehetnek:
==
, az "egyenlőség" operátort, hogy tesztelje az egyenlőséget>
, a "nagyobb, mint" operátort annak ellenőrzéséhez, hogy a bal oldali érték nagyobb-e, mint a jobb oldali érték<
, a "kisebb, mint" operátort annak ellenőrzéséhez, hogy a bal oldali érték kisebb-e, mint a jobb oldalon lévő érték>=
– a „nagyobb vagy egyenlő operátor”<=
– a „kisebb vagy egyenlő operátor”- és így tovább
Megjegyzés:
A Microsoft Learn C#-betanítási sorozata egy teljes modult szentel a logikai kifejezéseknek. Számos operátort használhat logikai kifejezések létrehozásához, és ebben a modulban csak néhány alapfogalmat fog tárgyalni. A logikai kifejezésekről további információt a Microsoft Learn "Logikai kifejezések kiértékelése a C#-ban történő döntéshozatalhoz" című moduljában talál.
Ebben a példában kiértékelte a logikai kifejezést total > 14
. A logikai kifejezést total >= 15
azonban választhatta volna, mert ebben az esetben ugyanazok. Tekintettel arra, hogy a játék szabályai a "Ha a három kocka összege, plusz a bónuszok összege 15 vagy annál nagyobb, akkor nyerd meg a játékot", akkor valószínűleg implementálnia kell a >= 15
kifejezést. Ezt a módosítást a gyakorlat következő lépésében fogja elvégezni.
Mit jelent a kódblokk?
Kódblokknak nevezzük a kód egy vagy több sornyi olyan részletét, amelyet egy nyitó és egy záró kapcsos zárójel { }
közé helyeztünk. Egy teljes kódegységet jelöl, amelynek egyetlen célja van a szoftverrendszerben. Az esetünkben például futásidőben a kódblokk minden egyes kódsora végre lesz hajtva, ha a logikai kifejezés értéke igaz. Ezzel szemben, ha a logikai kifejezés hamis, a kódblokk összes kódsorát figyelmen kívül hagyja a rendszer.
Azt is tudnia kell, hogy a kódblokkok más kódblokkokat is tartalmazhatnak. Valójában gyakran előfordul, hogy egy kódblokk "beágyazva" van egy másik kódblokkba az alkalmazásokban. A modul későbbi részében megkezdi a saját kódblokkok beágyazását, amikor létrehoz egy if
utasítást egy másik kódblokkban.
Megjegyzés:
A Microsoft Learn C#-betanítási sorozata egy teljes modult szentel a kódblokkok megértéséhez. A kódblokkok központi szerepet jelentenek a kódszervezés és -struktúra megértésében, és meghatározzák a változó hatókörének határait. Tekintse meg a modult [Control variable scope and logic using code blocks in C#](TBD)
.
Adjon hozzá egy másik ha utasítást a dupla bónusz implementálásához
Ezután implementálhatja a következő szabályt: "Ha bármelyik két dobás ugyanazt az értéket eredményezi, két bónuszpontot kap a dupla gördüléshez". Módosítsa az előző lépés kódját úgy, hogy az megfeleljen a következő kódnak:
A Visual Studio Code Editorban keresse meg a kurzort az első
if
utasítás feletti üres kódsoron.A "páros" játékfunkció létrehozásához írja be a következő
if
utasítást.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }
Itt három logikai kifejezést egyesít, hogy egyetlen összetett logikai kifejezést hozzon létre egyetlen kódsoron belül. Ezt néha összetett feltételnek is nevezzük. Egy külső zárójelkészlettel rendelkezik, amely három belső zárójelkészletet egyesít két csőkarakterek által elválasztva.
A két függőleges vonal karakter (
||
) a logikai VAGY operátor jele, amely gyakorlatilag a következőt jelenti: „vagy a bal oldali kifejezésnek, VAGY a jobb oldali kifejezésnek igaznak kell lennie ahhoz, hogy a teljes logikai kifejezés igaz legyen”. Ha mindkét logikai kifejezés hamis, akkor a teljes logikai kifejezés hamis. Két logikai VAGY operátort használ, hogy a kiértékelés egy harmadik logikai kifejezésre is kiterjeszthető legyen.Először értékelje ki
(roll1 == roll2)
. Ha ennek az értéke igaz, a teljes kifejezés igaz lesz. Ha hamis, kiértékeli(roll2 == roll3)
. Ha ennek az értéke igaz, a teljes kifejezés igaz lesz. Ha hamis, kiértékeli(roll1 == roll3)
. Ha ennek az értéke igaz, a teljes kifejezés igaz lesz. Ha ez hamis, akkor a teljes kifejezés hamis.Ha az összetett logikai kifejezés igaz, akkor a következő kódblokkot kell végrehajtania. Ezúttal két sornyi kód van. A kód első sora megjelenít egy üzenetet a felhasználónak. A kód második sora
2
-vel növeli atotal
értékét.A kód olvashatóságának javítása érdekében frissítse a második
if
utasítást az alábbiak szerint:if (total >= 15)
Figyelje meg, hogy most a
>=
nyertes dobások kiértékeléséhez használt kifejezésben használja az operátort. Az>=
operátor "nagyobb vagy egyenlő" értéket jelent. Ennek eredményeképpen összehasonlíthatjatotal
ahelyett14
, hogy egy értéket15
ad meg. Ezekkel a módosításokkal a nyertes dobások kiértékeléséhez használt kifejezés most már hasonlít a vesztes dobásra kiértékelt kifejezésre. Ez segít a kód könnyebb megértésében (olvashatóbb). Mivel egész számértékekkel foglalkozik, az új kifejezés(total >= 15)
ugyanúgy fog működni, mint korábban.(total > 14)
Szánjon egy percet a kód áttekintésére.
A kódnak az alábbival kell megegyeznie:
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."); }
Figyelje meg a győztes és a vesztes dobások kiértékeléséhez használt kifejezések közötti jobb igazítást.
Adjon hozzá egy másik ha utasítást a tripla bónusz implementálásához
Ezután implementálhatja a következő szabályt: "Ha mindhárom dobás ugyanazt az értéket eredményezi, hat bónuszpontot kap a gördülő triplákhoz." Módosítsa az előző lépésekből származó kódot a következő kódlistának megfelelően:
A Visual Studio Code Editorban hozzon létre egy üres kódsort a "dupla"
if
utasítás kódblokkja alatt.A "tripla" játékfunkció létrehozásához írja be a következő
if
utasítást.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }
Itt két logikai kifejezést egyesít, hogy egyetlen összetett logikai kifejezést hozzon létre egyetlen kódsoron belül. Egy külső zárójelkészlettel rendelkezik, amely két zárójelből álló belső készletet egyesít két erősítővel és karakterekkel.
A két és karakter (
&&
) a logikai ÉS operátort jelenti, amely alapvetően ezt mondja: „a teljes kifejezés csak akkor igaz, ha mindkét kifejezés értéke igaz”. Ebben az esetben ha aroll1
értéke egyenlő aroll2
értékével, és ha aroll2
értéke egyenlő aroll3
értékével, akkor következésképpen aroll1
-nek egyenlőnek kell lennie aroll3
értékével, és ez esetben a felhasználó triplát dobott.A Visual Studio Code Fájl menüjében kattintson a Mentés gombra.
Szánjon egy percet a kód áttekintésére.
Győződjön meg arról, hogy a 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."); }
Az EXPLORER panelen 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.
Megjegyzés:
Ha "Nem található futtatandó projekt" üzenet jelenik meg, győződjön meg arról, hogy a Terminál parancssora megjeleníti a TestProject mappa várt helyét. For example:
C:\Users\someuser\Desktop\csharpprojects\TestProject>
Az alábbi eredmények egyikéhez hasonló kimenetnek kell megjelennie:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose.
Vagy ehhez hasonló:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose.
Vagy ehhez hasonló:
Dice roll: 5 + 6 + 4 = 15 You win!
Vagy ha különösen szerencsés, akkor ilyen:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!
De várjon, tényleg meg kell jutalmazni a játékos mind a tripla bónusz és a dupla bónusz? Végtére is, egy tekercs triplák azt jelenti, hogy ők is hengerelt dupla. Ideális esetben a bónuszokat nem szabad halmozni. Két külön bónuszfeltételnek kell lennie. Ez egy logikai hiba, amelyet ki kell javítani.
A logikával kapcsolatos problémák és a kód fejlesztésének lehetőségei
Bár ez jó kezdet, és sokat tanult az utasításról, a if
logikai kifejezésekről, a kódblokkokról, a logikai VAGY ÉS OPERÁTOROKRÓL, és így tovább, sok minden javítható. Ezt a következő leckében fogja megtenni.
Összefoglalás
- Az
if
utasítással elágaztathatja a kódban a logikát. Azif
döntési utasítás akkor hajtja végre a saját kódblokkjában található kódot, ha a logikai kifejezésének értéke igaz. Ellenkező esetben a futtatókörnyezet átugorja a kódrészletet, és a kód következő sorára lép az adott blokk után. - A logikai kifejezés olyan kifejezés, amely logikai értéket ad vissza.
- A logikai operátorok összehasonlítják a bal és a jobb oldalukon található két értéket, és ellenőrzik, hogy azok egyenlőek-e, összehasonlítják őket vagy egyéb műveletet végeznek.
- A kódblokkokat kapcsos zárójelek
{ }
közé zárjuk. A blokkban lévő kódsorokat egyetlen egységként kell kezelni. - A logikai ÉS operátor (
&&
) két kifejezést összesít úgy, hogy mindkét részkifejezésnek igaznak kell lennie ahhoz, hogy a teljes kifejezés igaz legyen. - A logikai VAGY (
||
) operátor két kifejezést összesít úgy, hogy ha ezek közül bármelyik igaz, akkor a teljes kifejezés igaz.