Gyakorlat – Döntési logika létrehozása if utasításokkal

Befejeződött

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.

  1. 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).

  2. A Visual Studio Code File menüben válassza a Mappa megnyitása lehetőséget.

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

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

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

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

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

  8. Az EXPLORER panelen válassza a Program.cs lehetőséget, ha meg szeretné tekinteni a kódfájlt a Szerkesztő panelen.

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

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

  1. Győződjön meg arról, hogy egy üres Program.cs fájl van megnyitva a Visual Studio Code-ban.

  2. 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}");
    
    
  3. 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ített diceváltozóban. Ezután háromszor hívja meg az Random.Next()dice objektum metódusát, és az alsó és a felső határt is megadva korlátozza a lehetséges értékeket 16 (a felső határ nem kötelező). A három véletlenszerű számot a változókba, illetve roll3a változókba roll1roll2mentheti.

    Ezután összegzi a három kockadobás értékét, és az értéket egy nevesített totalegé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

  1. A Visual Studio Code Editorban keresse meg a kurzort a kódfájl alján, majd hozzon létre egy üres kódsort.

  2. 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ék total nagyobb, mint 14) 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 nagyobb 14), 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 a if két utasítást egyetlen utasítássá, amely jobban kifejezi a szándékot.

Mik a logikai kifejezések?

A logikai kifejezés olyan kód, amely logikai értéket ad vissza, vagy truefalse. A legegyszerűbb logikai kifejezések egyszerűen az értékek true és falsea . Másik lehetőségként logikai kifejezés lehet egy olyan metódus eredménye, amely az értéket true vagy falsea . 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:

  1. A Visual Studio Code Editorban keresse meg a kurzort az első if utasítás feletti üres kódsoron.

  2. 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 a total értékét.

  3. 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íthatja total ahelyett14, hogy egy értéket 15 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)

  4. 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:

  1. A Visual Studio Code Editorban hozzon létre egy üres kódsort a "dupla" if utasítás kódblokkja alatt.

  2. 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 a roll1 értéke egyenlő a roll2 értékével, és ha a roll2 értéke egyenlő a roll3 értékével, akkor következésképpen a roll1-nek egyenlőnek kell lennie a roll3 értékével, és ez esetben a felhasználó triplát dobott.

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

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

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

Tesztelje tudását

1.

Mit jelent a kódblokk?

2.

Mi az a logikai utasítás vagy kifejezés?