คำสั่งควบคุมอีกประเภทที่ใช้งานบ่อยๆคือคำสั่งลูป หรือการให้โปรแกรมทำงานซ้ำวนๆกันจนกว่าจะถึงเงื่อนไขที่เราได้เขียนเอาไว้
ลูปแบบ while
ลูป while จะทำงานโดยการตรวจสอบเงื่อนไข หากเงื่อนไขจะทำคำสั่งภายในลูป 1 รอบแล้วกลับมาตรวจสอบการทำงานของเงื่อนไขอีกครั้งหากเงื่อนไขยังเป็นจริงอยู่จะเข้าไปทำตามคำสั่งภายในเงื่อนไขอีกครั้งและทำซ้ำจนกว่าจะพบว่าเงื่อนไขเป็นเท็จก็จะออกไปทำงานนอกลูป
while(เงื่อนไข)
{
คำสั่ง 1;
}
คำสั่ง 2;
รูป 4-1
ตัวอย่าง
รูป 4-2
โปรแกรมนี้เป็นโปรแกรมให้พิมพ์ตัวเลขระหว่าง 1 ถึง 100 ที่หาร3และ5ลงที่
บรรทัดที่ 6 : ประกาศตัวแปร x เป็นชนิด int
บรรทัดที่ 8 : กำหนดค่าเริ่มต้นให้กับตัวแปร x โดยให้มีค่าเป็น 1 หมายความว่าเมื่อลูปทำการตรวจสอบเงื่อนไข
จะเริ่มตรวจสอบจาก 1 เป็นตัวแรก
บรรทัดที่ 10 : คำสั่งลูป while พร้อมกำหนดเงื่อนไข ในที่นี้เงื่อนไขคือ ให้ทำซ้ำเรื่อยๆจนกระทั้ง x มีค่าเท่ากับ
100 จึงให้ออกจากลูปไปทำคำสั่งนอกลูปได้
บรรทัดที่ 12-16 : ภายในลูป while มีการตรวจสอบเงื่อนไขด้วย if ว่าหากหารด้วย 3 และ 5 แล้วเหลือเศษศูนย์
หรือ หารลงตัว ให้แสดงผลออกทางหน้าจอ
บรรทัดที่ 18 : เพิ่มค่า x ในการตรวจสอบ โดยเพิ่มทีละ 1 จนกว่าค่า i จะถึง 100 กล่าวคือรอบแรกลูปจะใช้ x ที่
มีค่าเท่ากับ 1 เพราะ ค่าเริ่มต้นเท่ากับ 1 เมื่อเข้าสู่ลูปจนถึงช่วงเพิ่มค่า x จะเพิ่มเป็น 2 และเป็น 3
4 5 ...100
จะเห็นได้ว่าความสำคัญที่ทำให้ลูป while ทำงานได้ จะต้องไม่ลืม 3 ขั้นตอนสำคัญ ได้แก่ กำหนดค่าเริ่มต้น กำหนดเงื่อนไข เพิ่มค่า/ลดค่า
ลูปแบบ do-while
ลูป do-while แตกต่างจากลูป while ตรงที่จะมีการทำงานก่อนเข้าลูป 1 ครั้ง
do()
{
คำสั่ง 1;
} while(เงื่อนไข);
คำสั่ง 2;
รูป4-3
ตัวอย่าง
รูป4-4
โปรแกรมนี้ต้องการแสดงตัวเลข 1-10
บรรทัดที่ 6 : ประกาศตัวแปร count เป็นตัวแปรชนิด int ให้ค่าเริ่มเป็น 1
บรรทัดที่ 8 : คำสั่ง do มีคำสั่งภายในคือ คำสั่งแสดงผล หลังจากแสดงผลเสร็จให้ทำการเพิ่มค่าตัวแปร count
อีก 1
บรรทัดที่ 11 : ทำการวนลูปหาก count มีค่าเท่ากับ 11 หรือมากกว่า ให้ออกจากลูป
ผลลัพธ์ที่ได้
รูป4-5
ลูป for
เป็นคำสั่งสำหรับการวนลูปเช่นเดียวกัน แต่สำหรับลูป for นั้น จะเป็นการเอาค่าเริ่มต้น เงื่อนไขและการเพิ่มค่า/ลดค่ามาไว้ในบรรทัดเดียวกัน
for(ค่าเริ่มต้น;เงื่อนไข;เพิ่มค่า/ลดค่า)
{
คำสั่ง 1;
}
คำสั่ง 2;
ลูป for จะคล้ายกับ if คือถ้ามีคำสั่งเดียวไม่ต้องมี
{ } ได้
รูป 4-6
ตัวอย่าง
รูป 4-7
โปรแกรมต้องการให้แสดงตัวอักษร x สิบตัว
บรรทัดที่ 6 : ใช้ลูป for(ค่าเริ่มต้น;เงื่อนไข;เพิ่มค่า/ลดค่า) โดยให้ค่าเริ่มต้นเป็น 1 และกำหนดเงื่อนไขให้พิมพ์ค่าออกตราบเท่าที่ i น้อยกว่าหรือเท่ากับ 10
บรรทัดที่ 8 : คำสั่งแสดงค่า
ได้ผลลัพธ์เป็นตัวอักษร x สิบตัว
รูป 4-8
ลูป Nested for
เป็นการใช้ลูป for ซ้อน ลูป for
for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)
{
for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)
{
for(ค่าเริ่มต้น;เงื่อนไข;เพิ่ม/ลดค่า)
{
คำสั่ง 1;
}
}
}
รูป4-9
คำสั่ง 2;
ตัวอย่างการใช้ Nested for loop
รูป 4-10
ต้องการให้โปรแกรมแสดงรูปปีรามิดที่มีเงาอยู่ทางซ้ายออกทางหน้าต่าง console.
บรรทัดที่ 7 : เป็นการใช้คำสั่ง for ตัวแรกเพื่อวนลูปสร้างแถวแนวนอน โดยให้สร้างทั้งหมด 11 แถว
บรรทัดที่ 9 : ให้โปรแกรมแสดง เครื่องหมาย – แทนเงาของปีรามิดโดยกำหนดค่าเริ่มต้นที่แถวที่ 1 ให้มีเงื่อนไข
ว่าต้องแสดงเครื่องหมาย – เป็นจำนวนทั้งหมด 10-i ครั้งแรก i =1 จะแสดงเครื่องหมาย – 9 ครั้ง
บรรทัดที่ 14 : ให้โปรแกรมแสดง เครื่องหมาย x แทนตัวของปีรามิดโดยให้แสดง x ออกมาครั้งละ (i*2)+1 ครั้ง
แรก i เป็น 1 จะแสดง x ออกมาหนึ่งครั้ง อย่าลืมเครื่องหมาย “” ใน ( )
ผลลัพธ์ของโปรแกรมเป็นดังนี้
รูป 4-11
ลูป while(true) และ for(;;)
คือนอกจากคำสั่ง while และ for ที่ต้องกำหนดเงื่อนไขให้ลูปทำงานแล้วบางครั้งเราก็ต้องการการทำงานจำพวกที่ให้ผู้ใช้ป้อนข้อมูลได้เรื่อยๆ ไม่จำกัดจนกว่าผู้ป้อนข้อมูลจะพอ สามารถใช้ลูปอีกแบบได้คือ ลูป while(true) หรือ for(;;) สองอย่างนี้มีค่าเท่ากัน คือกำหนดให้ลูปเป็นจริงเสมอก็จะทำการวนลูปไปเรื่อยๆจนกว่าจะพอใจ หรือใช้คำสั่ง break; ในการการออกจากลูป
คำสั่ง break; และ continue;
คำสั่ง break; เป็นคำสั่งให้โปรแกรมออกจากลูป
ทันทีที่เจอคำสั่งนี้ มักใช้กับ while(true)
while ( true )
{
คำสั่ง;
break ;
คำสั่ง;
}
คำสั่ง continue; เป็นคำสั่งให้โปรแกรมวนกลับขึ้น
ไปตรวจสอบเงื่อนไขลูปใหม่โดยข้ามการ
ทำงานรอบนั้นไปเลย
while ( true )
{
คำสั่ง;
continue ;
คำสั่ง;
}
การใช้คำสั่ง break; และ continue;
รูป 4-12
โปรแกรมนี้จะแสดงให้เห็นรอบของจำนวนการทำงานของลูป for ที่ให้วนลูปตั้งแต่ 1 ถึง 10 แต่เมื่อ i มีค่าเท่ากับ 3 จะไม่แสดงผลของรอบที่ i = 3 ออกทางหน้าจอเพราะให้ข้าม 3 ด้วยคำสั่ง continue; และเมื่อ i=5 จะทำการ break; ออกจากลูปคือลูปจะไม่วนจนถึง 10 รอบตามที่ได้ตั้งเงื่อนไขไว้
ผลลัพธ์จึงเป็นดังนี้
รูป 4-13
สิ่งที่ต้องหลีกเลี่ยง infinite loop
Infinite loop คือลูปไม่รู้จบ เกิดจากความผิดพลาดเวลาที่เรากำหนดเงื่อนไข ทำให้ลูปทำงานวนซ้ำออกจากลูปไม่ได้เครื่องก็จะเริ่มช้าเพราะรันโปรแกรมติดๆกัน
รูป 4-14
จากโปรแกรมนี้เมื่อกำหนดให้ค่า i เป็น 1 ยังกำหนดให้เงื่อนไขเป็น เมื่อ i = 1 จะพิมพ์ค่า i ออกมา แต่ i มีค่าเท่ากับ 1 อยู่แล้วมันก็จะพิมพ์ค่า i ออกมาไม่รู้จบ
รูป 4-15
เมื่อเกิดการรันโปรแกรมไม่รู้จบให้ทำการกดเครื่องหมายสีเหลี่ยมสีแดงที่มุมขวาบนของหน้าต่าง console เพื่อปิดการันโปรแกรมตามด้วยเครื่องกากบาทข้างๆ
Tag ที่น่าสนใจ: java loop while_loop do-while_loop for_loop nested_loop programming control_statements iteration conditionals
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM