การวนซ้ำซ้อน (Nested Iteration)
แนะนำใหม่| English | ความหมาย |
|---|---|
| nested iteration/ˈnestɪd ˌɪtəˈreɪʃn/ | การวนซ้ำแบบซ้อนกัน |
ลูปภายในลูป
- การวนซ้ำซ้อน วางหนึ่งลูป ภายใน ร่างของอีกวงหนึ่ง
- ลูปภายในจะทำงานสมบูรณ์ สำหรับ ทุก รอบของลูปภายนอก
- ลูปภายนอกทำงาน
mครั้ง, ลูปภายในทำงานnครั้งต่อรอบ → ร่างลูปภายในทำงานm × nครั้ง - การซ้อนกันจัดการตารางกริด, ตาราง, และการเปรียบเทียบทุกคู่
แถวและคอลัมน์
- การใช้ที่พบบ่อย: ลูปภายนอกสำหรับ แถว, ลูปภายในสำหรับ คอลัมน์
for (int r = 0; r < rows; r++) { for (int c = 0; c < cols; c++) { ... } }- สำหรับแต่ละแถว, ลูปภายในจะกวาดผ่านทุกคอลัมน์ก่อนที่ลูปภายนอกจะก้าวต่อไป
- วิธีนี้จะเข้าถึงเซลล์ทั้งหมดของกริด 2 มิติตามลำดับ
การติดตามลำดับ
- ลูปภายในจะเสร็จสิ้นทุก รอบของมัน, แล้ว ลูปภายนอกจึงจะก้าวหนึ่ง
- ลูปภายนอก
r=0: ลูปภายในc=0,1,2; ลูปภายนอกr=1: ลูปภายในc=0,1,2; และอื่น ๆ - รีเซ็ตตัวนับภายในใด ๆ ที่จุดเริ่มต้นของแต่ละรอบภายนอก
- ติดตามอย่างช้า ๆ — การสับสนว่าลูปไหนกำลังก้าวไปข้างหน้าเป็นความผิดพลาดที่พบบ่อย
ระวังตัวแปรภายใน
- ประกาศตัวนับของลูปภายใน ภายใน หรือรีเซ็ตมันทุก รอบภายนอก
- หากคุณนำตัวแปรภายนอกมาใช้ในเงื่อนไขลูปภายใน ระวังเรื่องการรบกวน
- ตัวนับภายในและภายนอกควรเป็นอิสระต่อกันเว้นแต่คุณตั้งใจเป็นอย่างอื่น
- รูปแบบสามเหลี่ยม (
cจาก0ถึงr) ทำให้การนับภายในขึ้นอยู่กับภายนอก
ในการวนซ้ำซ้อน, ลูปภายในจะทำงานเต็มรูปแบบสำหรับทุก รอบภายนอก ดังนั้นร่างลูปภายในจึง被执行 outer × inner ครั้ง — การซ้อนกัน 10 × 10 จะทำงานร่างลูปภายใน 100 ครั้ง, ไม่ใช่ 20 รีเซ็ตตัวนับภายในในแต่ละรอบภายนอก (การประกาศ它在内层循环的 for หัวข้อจะทำการนี้โดยอัตโนมัติ), มิฉะนั้นรอบภายนอกครั้งที่สองจะเริ่มจากจุดที่รอบแรกทิ้งไว้
พิมพ์ตารางดาว 3×3:
for (int r = 0; r < 3; r++) { for (int c = 0; c < 3; c++) { print("*"); } println(); }- ลูปภายนอกทำงาน
3ครั้ง; ลูปภายในทำงาน3ครั้ง → รวม9ดาว - ทุก รอบภายนอกพิมพ์แถวหนึ่งที่มีสามดวง, แล้วขึ้นบรรทัดใหม่
การวนซ้ำซ้อน วางลูปภายในอีกวงหนึ่ง; ลูปภายในจะทำงานเต็มรูปแบบสำหรับทุก รอบภายนอก, ดังนั้นร่างลูปภายในจึงถูก outer × inner ครั้ง มันเป็นรูปแบบสำหรับตาราง (ลูปภายนอก = แถว, ลูปภายใน = คอลัมน์) รีเซ็ตตัวนับภายในทุก รอบภายนอก, และติดตามอย่างละเอียด — ลูปภายในจะเสร็จสิ้นก่อนที่ลูปภายนอกจะก้าวต่อไป
ลูปซ้อนสแกนตาราง
Outer =แถว, inner=คอลัมน์; ลูปภายในเติมแต่ละแถว
Outer loop ทำงาน 3 ครั้ง, innerloop ทำงาน 3 ครั้งต่อรอบ Innerloop จะทำงานกี่ครั้ง?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
3 × 3 = 9.
ในลูปซ้อน ลูปภายในจะทำงานเต็มรูปแบบสำหรับทุกครั้งที่ Outerloopวน
Difficulty 1/5 · 100 coins + a small bonus on first completion today
นั่นคือเหตุผลที่ร่างงานภายในทำงาน outer × inner ครั้ง
สำหรับตาราง 2-มิติ ลูปไหนมักจัดการคอลัมน์?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Outer =แถว, inner=คอลัมน์
ลูปซ้อน 10×10 จะทำงานร่างงานภายในกี่ครั้ง?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
10 × 10 = 100.
การประกาศตัวนับภายในในหัว forภายในจะทำให้รีเซ็ตมันทุกครั้งที่ Outerloopวน
Difficulty 1/5 · 100 coins + a small bonus on first completion today
A fresh int i ในหัวภายในเริ่มใหม่ทุกครั้ง