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 if
pernyataan , 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
if
pernyataan di akhir file:if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }
Perhatikan bahwa kedua
if
pernyataan membandingkantotal
dengan nilai numerik yang sama. Ini adalah kesempatan sempurna untuk menggunakan pernyataanelse
.Perbarui dua
if
pernyataan sebagai berikut:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }
Di sini, jika
total >= 15
salah, maka blok kode yang mengikutielse
kata kunci akan dijalankan. Karena kedua hasil tersebut berlawanan, ini adalah skenario yang sempurna untukelse
kata 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-else
mana 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 Andaelse
dapat 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
total
dideklarasikan dan diinisialisasi.Untuk menguji gulungan ganda, masukkan kode berikut:
roll1 = 6; roll2 = 6; roll3 = 5;
Pengodean keras ketiga
roll
variabel memungkinkan Anda menguji kode tanpa harus menjalankan aplikasi puluhan kali.Pada menu File Visual Studio Code, klik Simpan.
Di panel 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.
Di panel 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
, danelse
memungkinkan 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 if
yang Anda inginkan. Jika tidak ada pernyataanif
danelse if
yang berlaku, blok kodeelse
terakhir akan dieksekusi.else
bersifat opsional, tetapi harus menjadi yang terakhir jika Anda memilih untuk menyertakannya.Gunakan teknik pengodean
roll
variabel untuk sementara untuk menguji setiap pesan.
Rekap
- Kombinasi pernyataan
if
danelse
memungkinkan Anda menguji satu kondisi, lalu melakukan salah satu dari dua hasil. Blok kode untukif
akan dijalankan ketika ekspresi Boolean adalahtrue
, dan blok kode untukelse
akan dijalankan ketika ekspresi Boolean adalahfalse
. - Anda dapat menyusun
if
pernyataan untuk mempersempit kemungkinan kondisi. Namun, Anda harus mempertimbangkan untuk menggunakan pernyataanif
,else if
, danelse
sebagai gantinya. - Gunakan
else if
pernyataan untuk membuat beberapa kondisi eksklusif. - Bersifat
else
opsional, tetapi harus selalu menjadi yang terakhir ketika disertakan.