Alıştırma - if, else if ve else ile iç içe karar mantığı oluşturma
Ö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.
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.
Dosyanın sonundaki iki
ifdeyimi 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
ifaynı sayısal değerle karşılaştırıldığınıtotalfark edin. Bu, deyimini kullanmak için mükemmel birelsefırsattır.İki
ifdeyimini aşağıdaki gibi güncelleştirin:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Burada false ise
total >= 15anahtar sözcüğünü izleyenelsekod bloğu yürütülür. İki sonuç birbiriyle ilişkili karşıtlıklar olduğundan, bu anahtar sözcük içinelsemükemmel bir senaryodur.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.
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."); }İç içe
ifdeyimleri gözden geçirmek için bir dakika bekleyin.Amaç, iki sonucun birbiriyle ilişkili olduğu bir iç
if-elseyapı 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ışifdeyimde çiftleri ve ardından içifdeyimindeki üçlüleri denetlersiniz. Bu düzen, üçlü için iç denetim döndürdüğündefalsekod bloğunuzunelseç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.
Bildirilen ve başlatılan satırın üzerinde boş bir kod satırı
totaloluşturun.Çiftleri test etmek için aşağıdaki kodu girin:
roll1 = 6; roll2 = 6; roll3 = 5;Üç
rolldeğişkeni sabit kodlamak, uygulamayı onlarca kez çalıştırmak zorunda kalmadan kodu test etmenizi sağlar.Visual Studio Code Dosyası menüsünde Kaydet'e tıklayın.
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.
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!Üç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;Visual Studio Code Dosyası menüsünde Kaydet'e tıklayın.
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 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.
Ö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!"); }Güncelleştirilmiş
if-elseif-elseyapıyı gözden geçirmek için bir dakika bekleyin.if,else ifveelsedeyimleri 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 kadarelse ifdeyim kullanın. veifdeyimlerindenelse ifhiçbiri geçerli değilse, sonelsekod bloğu yürütülür.elseisteğe bağlıdır, ancak eklemeyi seçerseniz en son gelmelidir.Her iletiyi test etmek için değişkenleri geçici olarak sabit kodlama
rolltekniğini kullanın.
Özet
- ve
ifdeyimlerininelsebirleşimi, bir koşulu test etmenizi ve ardından iki sonuçtan birini gerçekleştirmenizi sağlar. içinifkod bloğu Boole ifadesi olduğundatrue, için kod bloğuelseise Boole ifadesi olduğundafalseçalıştırılır. - Olası bir koşulu daraltmak için deyimleri iç içe
ifyerleştirebilirsiniz. Ancak, bunun yerine ,ifveelse ifdeyimlerini kullanmayıelsedüşünmelisiniz. - Birden çok özel koşul oluşturmak için deyimleri kullanın
else if. - isteğe
elsebağlıdır, ancak her zaman dahil edildiğinde en son gelmelidir.