สวัสดีและยินดีต้อนรับ. ในการบรรยายนี้ ฉันต้องการพูดคุยเกี่ยวกับการวนซ้ำซ้อนและการควบคุมการวนซ้ำ
การวนซ้ำซ้อน การวนซ้ำภายในลูป การควบคุมการวนซ้ำเกี่ยวข้องกับคำสั่ง
break และคำสั่ง Continue
ลูปที่ซ้อนกันดังนั้น
มีบางครั้งที่คุณต้องการวางวงหนึ่งไว้ในอีกวงหนึ่ง
มันสมเหตุสมผลดี
ตัวอย่างเช่น คุณอาจต้องการนับจำนวนผู้อยู่อาศัยในบ้านแต่ละหลังบนถนน
ดังนั้นสิ่งที่คุณจะทำคือ คุณจะมีวงรอบนอกที่คุณก้าวจากบ้านหนึ่งไปอีกบ้านหนึ่ง
แล้วบ้านแต่ละหลังที่คุณอยู่ภายใน คุณจะนับจำนวนผู้อยู่อาศัย
ดังนั้นฉันหวังว่าคุณจะเห็นภาพหรือเข้าใจว่าอาจเป็นลูปที่ซ้อนกันได้อย่างไร
อีกครั้งวนรอบนอกเพื่อทะลุบ้านทุกหลัง
จากนั้นสำหรับการวนซ้ำของวงรอบนอกแต่ละบ้านที่คุณพบ คุณจะเข้าไปข้างในบ้านและวนรอบเพื่อนับคนทั้งหมด
นั่นเป็นกรณีการใช้งานเล็กน้อยเมื่อคุณต้องการใช้การวนซ้ำซ้อนใน
c
นี่คือตัวอย่าง ดูเหมือนว่าคุณคิดว่ามันจะดูเป็นวงในของลูปจริงๆ
ไม่ซับซ้อนเกินไป
ในตัวอย่างนี้ เราใช้ for loops for
ลูปนั้นดีเพราะเราสามารถเริ่มต้นตัวแปรควบคุมลูป ให้ตรวจสอบเงื่อนไขและตัวแปรควบคุมลูปแก้ไขของเราทั้งหมดในบรรทัดเดียว
ดังนั้นวงนอกนี้และเรียกมันว่าวงในชั้นนอก
วงนอกคือสิ่งที่มันบอกเป็นนัย มันเป็นวงนอก
และคุณสามารถทำรังได้หลายชั้นหลายชั้น คุณสามารถมีลูปภายในได้หลายแบบ
ในกรณีนี้ เรากำลังผ่านและเป็นวงวนที่ควบคุมไม่ได้
เราเริ่มจากจุดเดียวและเราจะนับจนสุดทาง
เราไม่รู้ว่าการนับอยู่ที่นี่มันไม่สำคัญ
ในตัวของ for loop เรากำลังบอกว่า sum เท่ากับ 0 เรากำลังเริ่มต้นผลรวมสำหรับวงใน
แล้วในวงใน เราเห็นอีกอันสำหรับลูป for และ j เท่ากับ 1, j
น้อยกว่าเท่ากับ I และ บวก บวก j เราก็บอกว่าผลรวมบวกเท่ากับ j
เรากำลังคำนวณผลรวมของจำนวนเต็มตั้งแต่ 1 ถึง I
ที่กำลังทำอยู่คือคุณกำลังป้อนเลข 5
และสำหรับการวนซ้ำครั้งแรก
คุณกำลังรวม 1 2 3 4 และ 5
สำหรับการวนซ้ำครั้งต่อไป
คุณกำลัง เอ่อ รวม 2 3 4 5
สำหรับการวนซ้ำครั้งที่สาม คุณกำลังรวม 3 4 5 เป็นต้น
ดังนั้นการวนซ้ำภายในจึงมีความจำเป็นโดยเฉพาะอย่างยิ่งโดยพิจารณาจากกรณีการใช้งาน เพียงแค่วนรอบภายในลูปอย่างสมบูรณ์
คุณจะเห็นมันค่อนข้างมาก
อย่าอายไปจากมัน ขึ้นอยู่กับสิ่งที่คุณต้องทำและปัญหาที่คุณพยายามแก้ไข
มักใช้ค่อนข้างน้อย
และถึงจุดนั้น มันไม่ใช่ for loop ภายใน for loop เสมอไป คุณสามารถมี
while loop ข้างใน for loop ได้ คุณสามารถมี do while loop ใน for loop
ได้ ไม่สำคัญ
ดังนั้นในตัวอย่างนี้
ตัวอย่างที่เหมือนกันทุกประการ ยกเว้นตอนนี้ในเนื้อความของ for loop
เรามีการวนซ้ำที่ซ้อนกันซึ่งเรียกว่าวงในโดยใช้คีย์เวิร์ด while
เรายังคงคำนวณจำนวนเต็มบางส่วนจาก 1 ถึง I
เรามีการเริ่มต้น uh นอกวง while
เรามีเงื่อนไขในการตรวจสอบ while
และเรามีผลรวมของเราในเนื้อความของ while loop ที่เราได้รับการแก้ไขนั่นคือตัวแปรควบคุมลูปที่เรากำลังแก้ไข
ดังนั้นผลรวมบวกเท่ากับแล้วเรากำลังแก้ไขตัวแปรควบคุมลูปด้วยบวกบวก j
ดังนั้นถ้าเราไม่แก้ไข plus บวก j เราจะมีลูปไม่สิ้นสุดสำหรับ while loop
แต่มันทำผลลัพธ์เดียวกัน มันแค่ใช้ while loop เป็นลูปที่ซ้อนกันแทน for loop
ดังนั้นการทำรังจึงไม่ต่างจากการทำรังเลยจริงๆ
คุณซ้อนคำสั่ง if, if คำสั่งภายใน if งบ,
ซ้อนคำสั่งวนลูปภายในลูป
หากต้องการหลีกหนีจากแนวคิด nested
loops เรามาพูดถึงคำสั่ง continue
จนถึงจุดนี้ เมื่อเราพูดถึงลูป เราดำเนินการวนซ้ำหลายครั้งตามเงื่อนไขการออก
นิพจน์บูลีนที่ประเมินเป็นเท็จ
อย่างไรก็ตาม มีบางครั้งที่คุณต้องการสิ้นสุดการวนซ้ำล่วงหน้าโดยเฉพาะ
หรือคุณต้องการดำเนินการวนซ้ำรอบถัดไปโดยไม่ทำอะไรเลย
ในกรณีหลังทำต่อโดยไม่ทำอะไรเลย โดยพื้นฐานแล้ว
ให้ข้ามไป คุณสามารถใช้คำสั่ง Continue
เพื่อทำสิ่งนี้ได้
ดังนั้นคำสั่ง continue ในเนื้อความของลูปจะทำสิ่งต่อไปนี้
ก่อนอื่น หากคุณต้องการเริ่มต้นสิ่งนี้ สิ่งที่คุณต้องทำคือใส่คีย์เวิร์ดต่อไปตามด้วยเครื่องหมายอัฒภาคในเนื้อหาของลูป
แต่สิ่งที่จะทำคือโดยพื้นฐานแล้วจะข้ามการทำซ้ำนั้นไป
ดังนั้นสิ่งที่ทำต่อด้านล่างการดำเนินการต่อจะไม่ถูกดำเนินการหากอยู่ภายในเนื้อหาของลูป
ดังนั้นทำต่อไปหลายๆ ครั้งที่เราต้องการที่จะอยู่บนสุดของลูปโดยยึดตามเงื่อนไขบางอย่าง
ซึ่งมักจะห่อด้วยคำสั่ง if
หากเกิดสถานการณ์พิเศษขึ้น ฉันไม่ต้องการรันโค้ดใด
ๆ ในส่วนเนื้อหาของลูป เพียงข้ามการวนซ้ำนี้และตรวจสอบในครั้งต่อไป
และอีกครั้ง มันทำให้สับสนเล็กน้อยเพราะคุณข้ามการวนซ้ำและกระโดดไปมา
แต่ถูกต้อง และเป็นวิธีตรวจสอบหลายๆ ครั้ง
ดังนั้น แม้ว่าคุณจะมีเงื่อนไขการออกลูปของคุณภายในนิพจน์บูลีน
คุณก็สามารถตรวจสอบได้อีก
และการตรวจสอบนั้นจะไม่หลุดออกจากลูป แต่จะเป็นการข้ามการวนซ้ำ
ดังนั้นจึงใช้อีกครั้งสำหรับกรณีที่คุณต้องการข้ามการวนซ้ำ ข้อดีของมันคือคุณสามารถใช้ทำต่อและมันจะกำจัดการซ้อนจำนวนมาก
นอกจากนี้ยังจะกำจัดคำสั่งเพิ่มเติมอีกมากมายหากอยู่ภายในบล็อกของลูปของคุณ
ดังนั้นจึงสามารถปรับปรุงความสามารถในการอ่านเมื่อข้อความยาวมากหรือคุณมีซ้อนอยู่ลึก
ดังนั้นหากคุณพบว่าคุณกำลังทำรังอยู่เป็นจำนวนมาก
คุณอาจต้องการพูดว่า ฮะ บางทีฉันสามารถใช้การต่อแทนได้
หรือถ้าคุณพบว่าคุณมีคำสั่ง if จำนวนมากที่ทำบางสิ่งภายในเนื้อหาของลูป
บางทีคุณอาจต้องการทำต่อ
อย่าใช้การดำเนินการต่อถ้ามันซับซ้อนมากกว่าทำให้โค้ดง่ายขึ้น
อย่าใช้การดำเนินการต่อหากคุณไม่รู้ว่ากำลังทำอะไรอยู่
นี่คือตัวอย่างของการดำเนินการต่อ
ในตัวอย่างนี้ เรากำลังสร้าง enum ใหม่ของชนิดวัน และเรากำลังบอกว่าค่าที่ถูกต้องคือ
จันทร์ อังคาร พุธ พฤหัสบดี ศุกร์ เสาร์ อาทิตย์
แล้วเรามี for loop ที่เรากำลังเริ่มต้น enum ของเราเป็น
Monday และเรากำลังบอกว่าตราบใดที่วันน้อยกว่าเท่ากับวันอาทิตย์
นั่นคือเงื่อนไขที่จะออก แล้วเรากำลังบอกว่า plus
plus day
คุณอาจถามตัวเองว่าเราเพิ่ม enum อย่างไร?
จำไว้ว่า enum ใต้ฝากระโปรงหน้าเป็นจำนวนเต็ม
คุณจึงบอกว่าบวกบวกวันบนอีนัมได้ และนั่นก็จะเพิ่มขึ้นเป็นวันถัดไป
จำไว้ว่า วันจันทร์มีค่าเท่ากับ 0 วันอังคารเท่ากับ 1
วันพุธเท่ากับ 2 ทั้งหมดนี้เป็นลำดับของรายการ
ดีมากเลยที่จะเพิ่ม enums
ในนี้สำหรับวนซ้ำถ้าเป็นวันพุธเราต้องการข้ามไป
เราไม่อยากทำอะไร เราไม่ต้องการพิมพ์
ดังนั้นเราจึงพูดต่อไป หากวันเท่ากับวันพุธ ให้ดำเนินการต่อ
มันจะข้ามบรรทัดการพิมพ์ มันจะกลับไปที่ด้านบนสุดของลูป
และจะดำเนินการวนซ้ำครั้งต่อไป
แล้วก็จะเป็นวันพฤหัส
มันจะไม่เท่ากับวันพุธ ดังนั้นมันจะไม่ข้าม
มันจะลงไปทันทีและพิมพ์ออกมาไม่ใช่วันพุธ
นี่เป็นกรณีการใช้งานทั่วไป ตัวอย่างทั่วไปของการใช้ Continue ไวยากรณ์ที่ใช้งานง่ายมาก เพียงคำหลักง่ายๆ
ตามด้วยเครื่องหมายอัฒภาค
อีกกรณีหนึ่งที่คุณอาจต้องการทำสิ่งแปลก ๆ ในลูปคือถ้าคุณต้องการออกก่อน
ดังนั้นโดยปกติหลังจากใส่เนื้อความแล้วโปรแกรมจะดำเนินการคำสั่งทั้งหมดในเนื้อความของลูปและสำหรับการวนซ้ำแต่ละครั้งจากนั้นจะตรวจสอบและกระโดดออก
และเรารู้ดีว่าการดำเนินการต่อนั้นทำงานอย่างไรซึ่งทำให้เกิดการข้ามที่แตกต่างกันเล็กน้อย
มีคำสั่งอื่นที่สามารถเปลี่ยนแปลงการดำเนินการของคำสั่งทั้งหมดในลูปได้
เรียกว่า ตัวแบ่ง
และนี่น่าจะค่อนข้างคุ้นเคยเพราะเราใช้คีย์เวิร์ด break เมื่อเราพูดถึงคำสั่ง
switch
จำไว้ว่าเมื่อเรามีคดีของเรา เราจะแยกคดีออกด้วยวิธีนั้น
คุณยังสามารถใช้คีย์เวิร์ดตัวแบ่งภายในลูปได้อีกด้วย
และสิ่งที่จะทำคือมันจะกระโดดออกจากวง
ดังนั้นคำสั่ง break จะทำให้โปรแกรมออกจากลูปในทันที ซึ่งกำลังดำเนินการอยู่
คำสั่งในลูปจะถูกข้ามและการดำเนินการของลูปจะสิ้นสุดลง
คุณก็แค่กระโดดออกจากวง
คุณกำลังดำเนินการก่อน หากคำสั่ง break อยู่ในลูปที่ซ้อนกัน มันจะมีผลกับวงในสุดเท่านั้นที่มี
คุณจะกระโดดออกจากวงที่คุณอยู่เท่านั้น
และในการดำเนินการนี้ คุณต้องใช้ตัวแบ่งคำหลักตามด้วยเครื่องหมายอัฒภาค
เบรกมักใช้ในการออกจากวงเมื่อมี 2 เหตุผลที่จะแยกจากกัน
ก่อนหน้านี้ฉันบอกว่าคุณอาจมีเหตุผลอื่นที่คุณต้องการข้ามการวนซ้ำ
แต่ถ้ามี 2 สาเหตุ 2 เงื่อนไขที่คุณต้องการกระโดดออกจากลูป คุณสามารถใช้ตัวแบ่งได้
หากคุณมีเพียงหนึ่งเงื่อนไข
ก็เป็นเพียงเงื่อนไข ภายในลูปเองภายในวงเล็บของ while หรือก่อนเครื่องหมายอัฒภาคที่สองในลูป
for
ตัวแบ่งยังใช้ในคำสั่งสวิตช์ตามที่ได้กล่าวไว้
ฉันก็เลยอยากเตือนคุณว่า อย่าทำให้พวกเขาสับสน
พวกเขาทำสิ่งเดียวกันเป็นหลักแม้ว่า พวกเขากระโดดออกจากรหัส
การแยกคำสั่ง switch จะกระโดดออกจากคำสั่ง
switch นั้นทั้งหมด การแตกคำสั่ง switch จะกระโดดออกจากลูปนั้น
นี่คือตัวอย่าง เรามีวงในขณะที่
เรากำลังพิมพ์จำนวนเต็มออกมา
เรากำลังอ่านเป็นจำนวนเต็ม เรามีการซ้อน while loop
ภายในการซ้อน while loop เราตรวจสอบสิ่งที่ป้อนเข้าไป
และถ้ามันมากกว่า
100 เราก็อยากจะกระโดดออกจากวงในนั้น ดังนั้นเราจึงทำ
จากนั้นในวงรอบนอกเราต้องทำการตรวจสอบอีกครั้ง ถ้ามันมากกว่า 100 เราจะแยกวงรอบนอกนั้นออก
หากคุณไม่มีช่วงพักครั้งที่สอง คุณจะไม่มีวันกระโดดออกจากวงรอบนอกที่สองเลย
ในกรณีนี้ มันทำให้ผมนึกถึงสถานที่ที่คุณสามารถใช้ไป
ลองนึกภาพถ้าคุณมี 5 ซ้อน 5 ชั้นของการซ้อนในขณะที่วนภายในในขณะที่วนภายในในขณะที่วนภายในของในขณะที่วนภายในของห่วงในขณะที่วง
หากคุณเพียงแค่ใช้ตัวแบ่งเพื่อพยายามกระโดดออกจากลูป
คุณจะมีคำสั่ง if เหล่านี้ทั้งหมดในแต่ละลูปเพื่อกระโดดออกมา
แทนที่จะทำทั้งหมด if
งบคุณสามารถไป go to จะกระโดดออกจากลูปสถานะลูปทั้งหมดในคำสั่งเดียว
นั่นเป็นกรณีการใช้งานสำหรับการไปที่ แต่ในกรณีนี้ เราแค่สาธิตการพักและทำให้แน่ใจว่าคุณเข้าใจว่าคุณกำลังหลุดจากลูปที่คุณอยู่ด้านใน
และในกรณีนี้ เราจะแยกลูปออกเป็น 2 ลูป
ดังนั้นนี่คือ 2 ตัวอย่าง คือ 2 คีย์เวิร์ดที่คุณไม่สามารถทำซ้ำโค้ดของสิ่งที่คุณคาดหวังได้
ดังนั้น หากคุณเคยเห็นการหยุดชะงักหรือดำเนินการต่อในลูป ตรวจสอบให้แน่ใจว่าคุณเข้าใจว่าเกิดอะไรขึ้น
เพราะคุณอาจไม่ได้รันโค้ดบางตัวที่คุณคิดว่าจะใช้งานได้
อีกครั้งมักจะห่อด้วยเงื่อนไข if คุณจึงสามารถมองแบบนั้นได้
แต่คุณยังต้องการแสดงความคิดเห็นที่ดีเมื่อคุณใช้ตัวแบ่งหรือทำต่อ
หวังว่านี่จะช่วยได้ ในการบรรยายครั้งต่อไป เราจะทำความท้าทายที่เราจะสามารถใช้ลูปเหล่านี้ได้ และมันจะแสดงและช่วยให้คุณเรียนรู้ทั้งหมดเกี่ยวกับในขณะที่สำหรับลูปและทำลายและดำเนินการต่อ
ขอขอบคุณ.