Latihan - Membuat logika keputusan berlapis dengan jika, jika, dan lainnya
Di unit sebelumnya, Anda menggunakan beberapa if pernyataan untuk mengimplementasikan aturan permainan. Namun, di akhir unit, Anda melihat bahwa pernyataan yang lebih ekspresif if diperlukan untuk memperbaiki bug halang dalam kode Anda.
Dalam latihan ini, Anda akan menggunakan ifpernyataan , else, dan else if untuk meningkatkan opsi percabangan dalam kode Anda dan memperbaiki bug logika.
Gunakan pernyataan if dan else alih-alih dua pernyataan if terpisah
Alih-alih melakukan dua pemeriksaan untuk menampilkan pesan "Anda menang!" atau "Maaf, Anda kehilangan", Anda akan menggunakan else kata kunci.
Pastikan kode Program.cs Anda cocok dengan yang berikut:
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."); }Ini adalah kode yang Anda selesaikan di unit sebelumnya.
Luangkan waktu satu menit untuk memeriksa dua
ifpernyataan di akhir file:if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Perhatikan bahwa kedua
ifpernyataan membandingkantotaldengan nilai numerik yang sama. Ini adalah kesempatan sempurna untuk menggunakan pernyataanelse.Perbarui dua
ifpernyataan sebagai berikut:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }Di sini, jika
total >= 15salah, maka blok kode yang mengikutielsekata kunci akan dijalankan. Karena kedua hasil tersebut berlawanan, ini adalah skenario yang sempurna untukelsekata kunci.File Program.cs yang diperbarui harus berisi kode berikut:
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."); }
Ubah kode untuk menghapus bonus tumpukan untuk ganda dan tiga kali lipat menggunakan berlapis
Di unit sebelumnya, Anda melihat bahwa bug logika halus diperkenalkan ke dalam aplikasi Anda. Anda dapat memperbaiki masalah tersebut dengan menumpuk pernyataan Anda if .
Berlapis memungkinkan Anda menempatkan blok kode di dalam blok kode. Dalam hal ini, Anda akan menumpuk if kombinasi dan else (pemeriksaan ganda) di dalam pernyataan lain if (pemeriksaan tiga kali lipat) untuk mencegah kedua bonus diberikan.
Ubah kode Anda agar sesuai dengan daftar kode berikut:
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."); }Luangkan waktu satu menit untuk meninjau pernyataan berlapis
if.Tujuannya adalah untuk membuat konstruksi dalam di
if-elsemana kedua hasil terkait berlawanan, dan kemudian menggunakan hasil yang berlawanan (if/true dan else/false) untuk memberikan poin bonus untuk tiga kali lipat dan ganda. Untuk mencapai tujuan ini, Anda memeriksa ganda dalam pernyataan luarif, dan kemudian untuk tiga kali lipat dalam pernyataan dalamif. Pola ini memastikan bahwa ketika pemeriksaan dalam untuk tiga kali lipat mengembalikanfalse, blok kode Andaelsedapat memberikan poin untuk ganda.Setelah itu, Anda akan "kode keras" hasil dari tiga gulungan Anda untuk menguji logika kode Anda.
Buat baris kode kosong di atas baris tempat
totaldideklarasikan dan diinisialisasi.Untuk menguji gulungan ganda, masukkan kode berikut:
roll1 = 6; roll2 = 6; roll3 = 5;Pengodean keras ketiga
rollvariabel memungkinkan Anda menguji kode tanpa harus menjalankan aplikasi puluhan kali.Pada menu File Visual Studio Code, klik Simpan.
Dalam tampilan EXPLORER, untuk membuka Terminal di lokasi folder TestProject Anda, klik kanan TestProject, lalu pilih Buka di Terminal Terintegrasi.
Panel Terminal harus terbuka, dan harus menyertakan perintah yang menunjukkan bahwa Terminal terbuka untuk lokasi folder TestProject Anda.
Pada perintah Terminal, untuk menjalankan kode Anda, ketik dotnet run lalu tekan Enter.
Saat kode Anda berjalan, Anda akan melihat:
Dice roll: 6 + 6 + 5 = 17 You rolled doubles! +2 bonus to total! You win!Untuk menguji gulungan tiga kali lipat, perbarui variabel roll yang dikodekan secara permanen sebagai berikut:
roll1 = 6; roll2 = 6; roll3 = 6;Pada menu File Visual Studio Code, klik Simpan.
Dalam tampilan EXPLORER, untuk membuka Terminal di lokasi folder TestProject Anda, klik kanan TestProject, lalu pilih Buka di Terminal Terintegrasi.
Pada perintah Terminal, untuk menjalankan kode Anda, ketik dotnet run lalu tekan Enter.
Saat kode Anda berjalan, Anda akan melihat:
Dice roll: 6 + 6 + 6 = 18 You rolled triples! +6 bonus to total! You win!
Gunakan jika, jika tidak, dan lain-lain jika pernyataan untuk memberikan hadiah alih-alih pesan win-lose
Untuk membuat permainan lebih menyenangkan, Anda dapat mengubah permainan dari "menang atau kalah" menjadi memberikan hadiah fiktif untuk setiap skor. Anda dapat menawarkan empat hadiah. Namun, pemain harus memenangkan hanya satu hadiah:
- Jika skor pemain lebih besar atau sama dengan 16, mereka akan memenangkan mobil baru.
- Jika skor pemain lebih besar atau sama dengan 10, mereka akan memenangkan laptop baru.
- Jika skor pemain tepat 7, mereka akan memenangkan perjalanan.
- Jika tidak, pemain memenangkan anak kucing.
Ubah kode dari langkah sebelumnya ke daftar kode berikut:
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!"); }Luangkan waktu semenit untuk meninjau konstruksi yang diperbarui
if-elseif-else.Pernyataan
if,else if, danelsememungkinkan Anda membuat beberapa ketentuan eksklusif sebagai ungkapan Boolean. Dengan kata lain, ketika Anda hanya ingin satu hasil terjadi, tetapi Anda memiliki beberapa kemungkinan kondisi dan hasil, gunakan pernyataan sebanyakelse ifyang Anda inginkan. Jika tidak ada pernyataanifdanelse ifyang berlaku, blok kodeelseterakhir akan dieksekusi.elsebersifat opsional, tetapi harus menjadi yang terakhir jika Anda memilih untuk menyertakannya.Gunakan teknik pengodean
rollvariabel untuk sementara untuk menguji setiap pesan.
Rekap
- Kombinasi pernyataan
ifdanelsememungkinkan Anda menguji satu kondisi, lalu melakukan salah satu dari dua hasil. Blok kode untukifakan dijalankan ketika ekspresi Boolean adalahtrue, dan blok kode untukelseakan dijalankan ketika ekspresi Boolean adalahfalse. - Anda dapat menyusun
ifpernyataan untuk mempersempit kemungkinan kondisi. Namun, Anda harus mempertimbangkan untuk menggunakan pernyataanif,else if, danelsesebagai gantinya. - Gunakan
else ifpernyataan untuk membuat beberapa kondisi eksklusif. - Bersifat
elseopsional, tetapi harus selalu menjadi yang terakhir ketika disertakan.