แบบฝึกหัด - สร้างตรรกะการตัดสินใจที่ซ้อนกันด้วยถ้า และอื่น ๆ
ในหน่วยก่อนหน้า คุณใช้คําสั่งหลาย if รายการเพื่อใช้กฎของเกม อย่างไรก็ตาม ในตอนท้ายของหน่วย คุณสังเกตเห็นว่าจําเป็นต้องมีคําสั่งที่แสดงออก if มากขึ้นในการแก้ไขบักที่ละเอียดอ่อนในโค้ดของคุณ
ในแบบฝึกหัดนี้ คุณจะใช้ ifคําสั่ง , elseและ else if เพื่อปรับปรุงตัวเลือกการโยงสาขาในโค้ดของคุณและแก้ไขบักเชิงตรรกะ
ใช้คําสั่ง if และ else แทนคําสั่งแยกต่างหากสองคําสั่งถ้า
แทนที่จะดําเนินการตรวจสอบสองรายการเพื่อแสดงข้อความ "คุณชนะ!" หรือ "ขออภัย คุณแพ้" คุณจะใช้ else คําสําคัญนี้
ตรวจสอบให้แน่ใจว่าโค้ด Program.cs ของคุณตรงกับรายการต่อไปนี้:
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."); }นี่คือรหัสที่คุณดําเนินการให้เสร็จสิ้นในหน่วยก่อนหน้า
ใช้เวลาสักครู่ในการตรวจสอบคําสั่งสอง
ifฉบับที่ส่วนท้ายของไฟล์:if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }โปรดสังเกตว่าคําสั่งทั้งสอง
ifเปรียบเทียบtotalกับค่าตัวเลขเดียวกัน นี่เป็นโอกาสที่สมบูรณ์แบบที่จะใช้elseคําสั่งอัปเดตคําสั่งสอง
ifรายการดังนี้:if (total >= 15) { Console.WriteLine("You win!"); } else { Console.WriteLine("Sorry, you lose."); }ที่นี่หาก
total >= 15เป็นเท็จบล็อกรหัสที่ตามด้วยelseคําสําคัญจะดําเนินการ เนื่องจากผลลัพธ์ทั้งสองจะตรงกันข้ามกัน นี่คือสถานการณ์ที่สมบูรณ์แบบสําหรับelseคําสําคัญไฟล์ Program.cs ที่อัปเดตแล้วของคุณควรมีโค้ดต่อไปนี้:
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."); }
ปรับเปลี่ยนโค้ดเพื่อลบโบนัสการเรียงซ้อนสําหรับสองเท่าและสามเท่าโดยใช้การซ้อน
ในหน่วยก่อนหน้า คุณเห็นว่ามีการนําบักเชิงตรรกะที่ละเอียดอ่อนเข้ามาในแอปพลิเคชันของคุณ คุณสามารถแก้ไขปัญหานี้ได้โดยการซ้อนคําสั่งของคุณif
การซ้อนช่วยให้คุณสามารถวางบล็อกโค้ดภายในบล็อกโค้ดได้ ในกรณีนี้ คุณจะซ้อน if ชุดข้อมูลและ else (ตรวจสอบรายการซ้ํา) ภายในคําสั่งอื่น if (ตรวจสอบสามครั้ง) เพื่อป้องกันไม่ให้ได้รับรางวัลโบนัสทั้งสองรายการ
ปรับเปลี่ยนโค้ดของคุณให้ตรงกับรายการโค้ดต่อไปนี้:
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."); }ใช้เวลาสักครู่ในการตรวจสอบคําสั่งที่
ifซ้อนกันเป้าหมายคือเพื่อสร้างโครงสร้างภายใน
if-elseที่ผลลัพธ์สองรายการตรงกันข้ามกัน จากนั้นใช้ผลลัพธ์ที่ตรงกันข้าม (หาก/ จริงและอื่น ๆ / เท็จ) เพื่อมอบคะแนนโบนัสสําหรับสามเท่าและสองเท่า เพื่อให้บรรลุเป้าหมายนี้ คุณต้องตรวจสอบค่าสองเท่าในคําสั่งภายนอกifจากนั้นจึงตรวจสอบสามในงบภายในifรูปแบบนี้ช่วยให้มั่นใจได้ว่าเมื่อการตรวจสอบภายในสําหรับส่งกลับfalseสามครั้ง บล็อกโค้ดของelseคุณสามารถให้คะแนนเป็นสองเท่าจะเกิดขึ้นคุณจะ "โค้ดที่ยาก" ผลลัพธ์ของสามม้วนของคุณเพื่อทดสอบตรรกะโค้ดของคุณ
สร้างบรรทัดรหัสว่างเหนือบรรทัดที่มีการ
totalประกาศและเตรียมใช้งานหากต้องการทดสอบม้วนสองเท่า ให้ป้อนโค้ดต่อไปนี้:
roll1 = 6; roll2 = 6; roll3 = 5;การเขียนโค้ดอย่างหนักตัวแปรสาม
rollตัวช่วยให้คุณสามารถทดสอบรหัสได้โดยไม่ต้องเรียกใช้แอปพลิเคชันหลายสิบครั้งบนเมนู ไฟล์ของ Visual Studio Code ให้คลิก บันทึก
ในมุมมอง EXPLORER เมื่อต้องการเปิดเทอร์มินัลที่ตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProject จากนั้นเลือกเปิดในเทอร์มินัลรวม
แผงเทอร์มินัลควรเปิดขึ้น และควรมีพร้อมท์คําสั่งที่แสดงว่าเทอร์มินัลเปิดอยู่ไปยังตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ
ที่พร้อมท์คําสั่งเทอร์มินัล เพื่อเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet run แล้วกด Enter
เมื่อโค้ดของคุณทํางาน คุณควรเห็น:
Dice roll: 6 + 6 + 5 = 17 You rolled doubles! +2 bonus to total! You win!หากต้องการทดสอบการใช้งานสามรายการ ให้อัปเดตตัวแปรม้วนที่เขียนโค้ดแบบตายตัวดังนี้:
roll1 = 6; roll2 = 6; roll3 = 6;บนเมนู ไฟล์ของ Visual Studio Code ให้คลิก บันทึก
ในมุมมอง EXPLORER เมื่อต้องการเปิดเทอร์มินัลที่ตําแหน่งที่ตั้งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProject จากนั้นเลือกเปิดในเทอร์มินัลรวม
ที่พร้อมท์คําสั่งเทอร์มินัล เพื่อเรียกใช้โค้ดของคุณ ให้พิมพ์ dotnet run แล้วกด Enter
เมื่อโค้ดของคุณทํางาน คุณควรเห็น:
Dice roll: 6 + 6 + 6 = 18 You rolled triples! +6 bonus to total! You win!
ใช้ หาก เป็นอย่างอื่น และอื่นถ้าข้อความแจ้งเพื่อมอบรางวัลแทนที่จะเป็นข้อความ win-lose
เพื่อทําให้เกมสนุกขึ้น คุณสามารถเปลี่ยนเกมจาก "ชนะหรือแพ้" เพื่อมอบรางวัลที่สมมุติขึ้นสําหรับแต่ละคะแนน คุณสามารถเสนอสี่รางวัล อย่างไรก็ตาม ผู้เล่นควรได้รับรางวัลเดียวเท่านั้น:
- หากผู้เล่นมีคะแนนมากกว่าหรือเท่ากับ 16 พวกเขาจะได้รถคันใหม่
- หากผู้เล่นให้คะแนนมากกว่าหรือเท่ากับ 10 พวกเขาจะชนะแล็ปท็อปเครื่องใหม่
- ถ้าผู้เล่นได้คะแนน 7 พวกเขาจะชนะการเดินทาง
- มิฉะนั้นผู้เล่นจะชนะลูกแมว
ปรับเปลี่ยนโค้ดจากขั้นตอนก่อนหน้าเป็นรายการโค้ดต่อไปนี้:
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!"); }ใช้เวลาสักครู่เพื่อตรวจสอบโครงสร้างที่อัปเดต
if-elseif-elseแล้วคําสั่ง
if,else ifและelseช่วยให้คุณสามารถสร้างเงื่อนไขพิเศษหลายเงื่อนไขเป็นนิพจน์บูลีนได้ กล่าวอีกนัยหนึ่งเมื่อคุณต้องการให้ผลลัพธ์หนึ่งเกิดขึ้นเท่านั้น แต่คุณมีเงื่อนไขและผลลัพธ์ที่เป็นไปได้หลายอย่างให้ใช้คําสั่งมากelse ifเท่าที่คุณต้องการ ถ้าไม่มีคําสั่งifและelse ifจะถูกดําเนินการบล็อกโค้ดสุดท้ายelseelseเป็นทางเลือก แต่จะต้องมาล่าสุดถ้าคุณเลือกที่จะรวมเข้าไว้ด้วยใช้เทคนิคการเขียนโค้ดอย่างหนักชั่วคราวสําหรับ
rollตัวแปรเพื่อทดสอบแต่ละข้อความ
สรุป
- ชุดข้อมูลของ
ifคําสั่ง และelseช่วยให้คุณสามารถทดสอบเงื่อนไขหนึ่งเงื่อนไข จากนั้นจึงดําเนินการหนึ่งในสองผลลัพธ์ บล็อกรหัสสําหรับifจะเรียกใช้เมื่อนิพจน์บูลีนเป็นtrueและบล็อกรหัสสําหรับelseจะเรียกใช้เมื่อนิพจน์บูลีนเป็นfalse - คุณสามารถซ้อน
ifคําสั่งเพื่อจํากัดเงื่อนไขที่เป็นไปได้ให้แคบลงได้ อย่างไรก็ตาม คุณควรพิจารณาใช้ifคําสั่ง ,else ifและelseแทน - ใช้
else ifคําสั่งเพื่อสร้างเงื่อนไขเฉพาะหลายเงื่อนไข - เป็น
elseทางเลือก แต่จะต้องมาล่าสุดเสมอเมื่อรวม