Alıştırma - if, else if ve else ile iç içe karar mantığı oluşturma

Tamamlandı

Önceki ünitede, bir oyunun kurallarını uygulamak için birden çok if deyim kullandınız. Ancak ünitenin sonunda, kodunuzdaki küçük bir hatayı düzeltmek için daha açıklayıcı if deyimler gerektiğini fark ettiniz.

Bu alıştırmada, kodunuzda dallanma seçeneklerini geliştirmek ve if bir mantıksal hatayı düzeltmek için , elseve deyimlerini kullanacaksınızelse if.

İki ayrı if deyimi yerine if ve else deyimlerini kullanın

"Kazandınız!" veya "Üzgünüz, kaybettiniz" iletisini görüntülemek için iki denetim gerçekleştirmek yerine anahtar sözcüğünü else kullanırsınız.

  1. Program.cs kodunuzun aşağıdakilerle eşleştiğinden emin olun:

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

    Bu, önceki ünitede tamamladığınız koddur.

  2. Dosyanın sonundaki iki if deyimi incelemek için bir dakika bekleyin:

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

    Her iki deyimin de if aynı sayısal değerle karşılaştırıldığını total fark edin. Bu, deyimini kullanmak için mükemmel bir else fırsattır.

  3. İki if deyimini aşağıdaki gibi güncelleştirin:

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

    Burada false ise total >= 15 anahtar sözcüğünü izleyen else kod bloğu yürütülür. İki sonuç birbiriyle ilişkili karşıtlıklar olduğundan, bu anahtar sözcük için else mükemmel bir senaryodur.

  4. Güncelleştirilmiş Program.cs dosyanız aşağıdaki kodu içermelidir:

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

İç içe yerleştirmeyi kullanarak çiftler ve üçlüler için yığınlama bonusunu kaldırmak için kodu değiştirin

Önceki ünitede uygulamanıza ince bir mantık hatasının getirildiğini gördünüz. Deyimlerinizi if iç içe yerleştirerek bu sorunu çözebilirsiniz.

İç içe yerleştirme, kod bloklarını kod bloklarının içine yerleştirmenizi sağlar. Bu durumda, her iki bonusun da verilmesini önlemek için bir ve if birleşimini (çiftler için çek) başka bir else deyimin (üçlü çek) içine yerleştireceksinizif.

  1. Kodunuzu, aşağıdaki kod listesiyle eşleşecek şekilde değiştirin:

    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. İç içe if deyimleri gözden geçirmek için bir dakika bekleyin.

    Amaç, iki sonucun birbiriyle ilişkili olduğu bir iç if-else yapı oluşturmak ve ardından üçlü ve çiftler için bonus puan vermek için karşıt sonuçları (eğer/doğru ve değilse/yanlış) kullanmaktır. Bu hedefe ulaşmak için, dış if deyimde çiftleri ve ardından iç if deyimindeki üçlüleri denetlersiniz. Bu düzen, üçlü için iç denetim döndürdüğünde falsekod bloğunuzun else çiftler için puan verebilmesini sağlar.

    Yakında kod mantığınızı test etmek için üç rulonuzun sonuçlarını "sabit kodla" oluşturacaksınız.

  3. Bildirilen ve başlatılan satırın üzerinde boş bir kod satırı total oluşturun.

  4. Çiftleri test etmek için aşağıdaki kodu girin:

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

    Üç roll değişkeni sabit kodlamak, uygulamayı onlarca kez çalıştırmak zorunda kalmadan kodu test etmenizi sağlar.

  5. Visual Studio Code Dosyası menüsünde Kaydet'e tıklayın.

  6. EXPLORER görünümünde, TestProject klasör konumunuzdaki bir Terminali açmak için TestProjesi'ne sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin.

    Terminal paneli açılmalı ve Terminal'in TestProject klasör konumunuza açık olduğunu gösteren bir komut istemi içermelidir.

  7. Terminal komut isteminde kodunuzu çalıştırmak için dotnet run yazın ve Enter tuşuna basın.

    Kodunuz çalıştırıldığında şunları görmeniz gerekir:

    Dice roll: 6 + 6 + 5 = 17
    You rolled doubles!  +2 bonus to total!
    You win!
    
    
  8. Üçlü zarları test etmek için sabit kodlanmış roll değişkenlerinizi aşağıdaki gibi güncelleştirin:

    roll1 = 6;
    roll2 = 6;
    roll3 = 6;
    
  9. Visual Studio Code Dosyası menüsünde Kaydet'e tıklayın.

  10. EXPLORER görünümünde, TestProject klasör konumunuzdaki bir Terminali açmak için TestProjesi'ne sağ tıklayın ve Tümleşik Terminalde Aç'ı seçin.

  11. Terminal komut isteminde kodunuzu çalıştırmak için dotnet run yazın ve Enter tuşuna basın.

    Kodunuz çalıştırıldığında şunları görmeniz gerekir:

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

If, else ve else if deyimlerini kullanarak kazan-kaybed iletisi yerine ödül verin

Oyunu daha eğlenceli hale getirmek için, oyunu "kazan veya kaybet" yerine her puan için kurgusal ödüller vermek olarak değiştirebilirsiniz. Dört ödül sunabilirsiniz. Ancak, oyuncu yalnızca bir ödül kazanmalıdır:

  • Oyuncu 16 veya daha yüksek puan alırsa yeni bir araba kazanır.
  • Oyuncu 10 veya daha yüksek puan alırsa yeni bir dizüstü bilgisayar kazanır.
  • Oyuncu tam 7 puan alırsa seyahat kazanır.
  • Aksi takdirde oyuncu bir yavru kedi kazanır.
  1. Önceki adımlardaki kodu, aşağıdaki kod listesine değiştirin:

    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. Güncelleştirilmiş if-elseif-else yapıyı gözden geçirmek için bir dakika bekleyin.

    if, else ifve else deyimleri Boole ifadeleri olarak birden çok özel koşul oluşturmanıza olanak sağlar. Başka bir deyişle, yalnızca bir sonucun gerçekleşmesini istediğinizde, ancak çeşitli olası koşullarınız ve sonuçlarınız varsa, istediğiniz kadar else if deyim kullanın. ve if deyimlerinden else if hiçbiri geçerli değilse, son else kod bloğu yürütülür. else isteğe bağlıdır, ancak eklemeyi seçerseniz en son gelmelidir.

  3. Her iletiyi test etmek için değişkenleri geçici olarak sabit kodlama roll tekniğini kullanın.

Özet

  • ve if deyimlerinin else birleşimi, bir koşulu test etmenizi ve ardından iki sonuçtan birini gerçekleştirmenizi sağlar. için if kod bloğu Boole ifadesi olduğunda true, için kod bloğu else ise Boole ifadesi olduğunda falseçalıştırılır.
  • Olası bir koşulu daraltmak için deyimleri iç içe if yerleştirebilirsiniz. Ancak, bunun yerine , ifve else if deyimlerini kullanmayı elsedüşünmelisiniz.
  • Birden çok özel koşul oluşturmak için deyimleri kullanın else if .
  • isteğe else bağlıdır, ancak her zaman dahil edildiğinde en son gelmelidir.