for + If, else
วันนี้เรามาประกอบร่าง for กับ if, else กันนะคะ!
ถ้าเรารู้ว่าต้องเดินหน้ากี่ช่อง แต่ไม่รู้ว่า "สวิตช์" และ "อัญมณี" จะเกิดขึ้นที่ตรงไหนเนื่องจากถูกสร้างด้วยระบบสุ่ม ลองใช้ for ร่วมกับ if, else เพื่อตรวจสอบและทำคำสั่งตามเงื่อนไขที่กำหนดไว้นะคะ
โครงสร้างของ for + if, else
for + ตัวแปร + in 1 ... + ตัวเลข + { ชุดคำสั่ง if, else }
โจทย์ :
- ตัวละครต้องเดินหน้า 2 ช่อง
- ถ้าอยู่บนสวิตช์ที่ปิดอยู่ จงกดสวิตช์
- ถ้าอยู่บนที่ซึ่งมีอัญมณี จงเก็บอัญมณี
- นอกเหนือจากนั้น จงเดินหน้า
คำสั่ง :
- เดินหน้า moveForward()
- กดสวิตช์ toggleSwitch()
- เก็บอัญมณี collectGem()
เงื่อนไข :
- อยู่บนสวิตช์ที่ปิดอยู่ isOnClosedSwitch
- อยู่บนที่ซึ่งมีอัญมณี isOnGem
เฉลยพร้อมคำอธิบายอยู่ด้านล่างค่ะ
เฉลย :
for i in 1 ... 2 {
moveForward()
if isOnClosedSwitch {
toggleSwitch()
} else if isOnGem {
collectGem()
}
}
หมายเหตุ 1 โค้ดด้านบนสำหรับกรณีที่ช่องแรกไม่มีสวิตช์และอัญมณี
หมายเหตุ 2 สามารถเขียนโค้ดเพื่อแก้โจทย์นี้ได้หลายรูปแบบ ทดสอบผลลัพธ์ได้ในโปรแกรม Swift Playground บทเรียน Learn to Code 1 เรื่อง Conditional Code แบบฝึกหัดข้อ Using else if
คำอธิบาย :
จากโค้ดข้างต้น แปลง่ายๆ ได้ความว่า ให้ทำชุดคำสั่งในวงเล็บปีกกาของ for ซ้ำ 2 ครั้ง
for i in 1 ... 2 { ชุดคำสั่ง }
ดังนั้น เมื่อกดรัน (Run) เพื่อให้เริ่มทำงาน ตัวละครจะเดินตาม { ชุดคำสั่ง } ตามด้านล่างนี้
}
moveForward()
if isOnClosedSwitch { toggleSwitch() }
else if isOnGem { collectGem() }
}
----------------------
ตัวแปร i เริ่มทำงานครั้งที่ 1
เจอคำสั่ง moveForward()
ตัวละครเดินหน้า 1 ช่อง
เจอเงื่อนไข if isOnClosedSwitch โปรแกรมตรวจพบสวิตช์ที่ปิดอยู่ จึงทำคำสั่ง { toggleSwitch() }
ตัวละครกดสวิตช์
เจอเงื่อนไข else if isOnGem
โปรแกรมตรวจสอบแล้วไม่พบอัญมณี จึงไม่ทำคำสั่ง { collectGem() }
จบการทำงานครั้งที่ 1
----------------------
ตัวแปร i เริ่มทำงานครั้งที่ 2
เจอคำสั่ง moveForward()
ตัวละครเดินหน้า 1 ช่อง
เจอเงื่อนไข if isOnClosedSwitch
โปรแกรมตรวจสอบแล้วไม่พบสวิตช์ที่ปิดอยู่ จึงไม่ทำคำสั่ง { toggleSwitch() }
เจอเงื่อนไข else if isOnGem
โปรแกรมตรวจพบอัญมณี จึงทำคำสั่ง { collectGem() }
ตัวละครเก็บอัญมณี
จบการทำงานครั้งที่ 2
จบการทำงานของโปรแกรม
ขอบคุณภาพจาก Swift Playgrounds
-- ดีบี --