คำสั่งวนซ้ำ
ในบทนี้ คุณจะได้เรียนรู้การควบคุมโปรแกรมโดยใช้คำสั่งวนซ้ำ เพื่อควบคุมโปรแกรมให้ทำงานซ้ำๆ ได้
คำสั่งวนซ้ำ (loop statements) เป็นคำสั่งที่ทำให้คุณสามารถควบโปรแกรมให้มันทำงานซ้ำๆ ได้ ถ้าหากเงือนไขนั้นยังคงเป็นจริง มันเป็นคำสั่งที่มีประโยชน์เป็นอย่างมากในการเขียนโปรแกรม ที่คุณจะได้เรียนรู้ในบทนี้ คือ คำสั่ง while loop, do-while loop และ for loop มาเริ่มต้นกับคำสั่งที่พื้นฐานที่สุดคือ while loop
การใช้คำสั่ง While loop
คำสั่งวนซ้ำที่ง่ายที่สุดในภาษา Java คือ คำสั่ง While loop โดยมันมีรูปแบบในการใช้งานดังนี้
while ( expression ) {
// statements
}
ในการใช้งานคำสั่ง while
สำหรับการสร้าง while loop และ expression
คือเงื่อนไขที่จะให้โปรแกรมทำงานใน loop ถ้าหากเงื่อนไขเป็นจริงโปรแกรมจะทำงานในบล็อคคำสั่งวงเล็บปีกกา { }
เมื่อเงือนไขเป็นเท็จโปรแกรมจะออกจากลูปจะทำงานคำสั่งต่อไปหลัง while
มาดูตัวอย่างการใช้ While loop ในภาษา Java กับการนับเลขอย่างง่าย
public class WhileLoop {
public static void main(String[] args) {
int i = 1;
while ( i <= 10 ) {
System.out.print (i + ", ");
++i;
}
System.out.println("End");
}
}
ในโปรแกรม นั้นเราได้ประกาศตัวแปร i
มาใช้ในการนับ ในเงือนไขของ while เราได้ตรวจสอบว่าถ้าหาก i น้อยกว่าหรือเท่ากับ 10 while ( i <= 10 )
โปรแกรมจะทำงานใน loop และแสดงค่า i ออกมา แต่ละรอบเราจะทำการเพิ่มค่าของ i ด้วยคำสั่ง ++i;
เพื่อป้องกันไม่ให้ลูปทำงานตลอดไป (Infinity loop) จนกว่าเงือนไขไม่เป็นจริง โปรแกรมได้ออกนอกลูปและทำคำสั่งต่อมา
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, End
ข้างล่างนี้เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่ามันวิเศษไปเลย เราสามารถทำให้มันแสดงผลได้ 10 ครั้งเพียงแค่เขียนโปรแกรมไม่กี่บรรทัด แน่นอนคุณจะทำให้มันแสดงถึง 100 ก็ยังได้ เพียงแค่เปลี่ยนเงือนไขในเป็น while ( i <= 100 )
แค่นั้นเอง
การใช้คำสั่ง Do-While loop
คำสั่งวนซ้ำอีกชนิดหนึ่งคือ คำสั่ง do-while loop ซึ่งคำสั่งนี้จะทำงานแตกต่างคำสั่ง while loop เล็กน้อยคือ มันจะทำงานก่อนอย่างน้อย 1 ครั้งหลังจากนั้นจะตรวจสอบเงื่อนไขอยู่ด้านท้ายของ loop มันมีรูปแบบการใช้งานดังนี้
do {
// statements
} while ( expression );
ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง do-while loop ในภาษา Java เราจะเขียนโปรแกรมในการตรวจสอบตัวเลข ว่าเป็นจำนวนคี่หรือคู่ (odd or even number)
import java.util.Scanner;
public class DoWhileLoop {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int number;
System.out.println("\tDetermine odd/even program");
do {
System.out.print("Enter odd number to exit loop: ");
number = reader.nextInt();
if (number % 2 == 0) {
System.out.println("You entered " + number + ", it's even.");
} else {
System.out.println("You entered " + number + ", it's odd.");
}
} while (number % 2 == 0);
System.out.println("Exited loop.");
}
}
ในตัวอย่างโปรแกรมจะถามให้ผู้ใช้กรอกตัวเลขคี่ (odd number) เพื่ออกจากลูป โปรแกรมจะทำงานในลูปเรื่อยๆ ถ้าหากเขายังคงกรอกเลขคู่ (even number) โดย number % 2 == 0
เป็น expression เพื่อตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่ โดยการใช้ตัวดำเนินการ Mod เลขคู่คือเลขที่หารด้วย 2 แล้วมีเศษเป็น 0
คุณอาจจะเห็นว่าโปรแกรมของเราอาจจะซับซ้อน เช่น การใช้คำสั่ง If ซ้อนข้างใน เพราะการทำเช่นนี้มันจะทำให้คุณจดจำและมองเห็นวิธีการนำไปประยุกต์ใช้ได้ดีขึ้น
Determine odd/even program
Enter odd number to exit loop: 2
You entered 2, it's even.
Enter odd number to exit loop: 4
You entered 4, it's even.
Enter odd number to exit loop: 8
You entered 8, it's even.
Enter odd number to exit loop: 0
You entered 0, it's even.
Enter odd number to exit loop: 3
You entered 3, it's odd.
Exited loop.
และนี่คือผลลัพธ์ของโปรแกรม โปรแกรมจะออกจากลูปเมื่อผู้ใช้กรอกเลขคี่ ซึ่งก็คือ 3 สำหรับตัวอย่าง
การใช้คำสั่ง For loop
คุณได้เรียนรู้คำสั่งลูปพื้นฐานไปแล้ว ต่อไปเราจะให้คุณรู้จักกับ For loop ซึ่งเป็น loop ที่นิยมใช้กันเป็นจำนวนมาก เพราะว่า Foor loop มักจะใช้กับ Loop ที่ทราบจำนวนการวนซ้ำที่แน่นอน และมันอำนวยความสะดวกในการประกาศตัวแปรเริ่มต้น กำหนดเงือนไข และเพิ่มลดค่าไว้ที่เดียวกัน ซึ่งตัวแปรเหล่านี้สามารถใช้ได้เพียงแค่ใน Loop scope เท่านั้น
การใช้คำสั่ง For loop ในภาษา Java นั้นมีรูปแบบดังนี้
for (initial; condition; update) {
// Statements
}
สำหรับรูปแบบของ for loop นั้นจะมีการกำหนดส่วนประกอบ 3 ส่วนคือ initial
คือการประกาศส่วนเริ่มต้นของลูป เช่น กำหนดค่าให้กับตัวแปร condition
คือการกำหนดเงือนไขที่จะให้ทำงานในลูป และ update
เป็นการอัพเดทค่าหลังจากจบแต่ละลูป ซึ่งจะเห็นว่ามันรวมกันที่ส่วนหัวของ for ซึ่งง่ายต่อการใช้งาน
ต่อไปมาดูตัวอย่าง การใช้ For loop ในภาษา Java ตัวอย่างนี้ เราจะใช้ตัวอย่างเดียวกันกับ While loop คือแสดงเลข 1 - 10
public class ForLoop {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println("Loop " + i);
}
System.out.println("End of loop");
}
}
จากตัวอย่างนั้นจะได้ผลลัพธ์เช่นกันกับ while loop ในตัวอย่างก่อนหน้า คุณจะเห็นว่ามันง่ายและสะดวกกว่าในการใช้ นอกจากนี้ For loop ยังนิยมใช้กับข้อมูลแบบอาเรย์ คุณจะได้เรียนในบทต่อไป
Nested For loop
เช่นเดียวกัน คำสั่ง loop ทุกชนิดสามารถที่จะซ้อนกันได้ ซึ่งเราเรียกว่า Nested loop ต่อไปมาดูตัวอย่างการใช้คำสั่ง For loop ซ้อนกัน โดยเราจะสร้างแมทริกขนาด 2 มิติ ที่แต่ละค่าเป็นค่าของ i และ j คูณกัน
public class ForLoop {
public static void main(String[] args) {
int width = 6;
int height = 6;
System.out.println("\tMatrix program");
for (int i = 1; i <= height ; i++) {
for (int j = 1; j <= width ; j++) {
System.out.print("\t" + (i * j));
}
System.out.println();
}
}
}
ในตัวอย่าง เราได้สร้าง For loop สองอันที่ซ้อนกันอยู่ โดยลูปข้างนอก (outer loop) จะทำการวนตามจำนวนในตัวแปร height
และลูปข้างใน (inner loop) จะทำการวนตามจำนวน width
ผลลัพธ์ตัวเลขที่ได้นั้นเกิดจาก ค่าของ i * j
และเราใช้ Tab (\t) เพื่อทำให้มันสวยงาม
Matrix program
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
และนี่เป็นผลลัพธ์ของโปรแกรม Nested for loop
ในการเขียนโปรแกรมทำงานกับ Loop นั้นจะมีคำสั่งสองชนิดที่คุณมักจะต้องใช้ควบคุมการทำงานของ Loop ในกรณีพิเศษ โดยคำสั่งเหล่านั้นคือ Continue และ Break
การใช้คำสั่ง Continue
คำสั่ง Continue คือคำสั่งที่ใช้ในการข้ามการทำงานของลูปในรอบปัจจุบัน นั่นหมายความว่า ลูปจะเริ่มต้นคำสั่งใหม่ทันทีเมื่อเจอคำสั่ง continue;
สำหรับตัวอย่งการใช้คำสั่ง Continue ในภาษา Java
public class ContinueStatement {
public static void main(String[] args) {
for (int i = 10; i >= 1; i--) {
if (i == 5) {
continue;
}
System.out.print(i + ", ");
}
System.out.println(" End");
}
}
ในตัวอย่าง เป็นการใช้คำสั่ง continue กับ For loop โดยในโปรแกรมเป็นการแสดงตัวเลขจาก 10 และลดลงทีละค่าจนถึง 1 ในโปรแกรมนั้นเราไม่ชอบเลข 5 เราจึงใช้คำสั่ง if (i == 5)
เพื่อให้โปรแกรมข้ามการทำงานการแสดงผลของเลข 5
10, 9, 8, 7, 6, 4, 3, 2, 1, End
นี่เป็นลัพธ์ของโปรแกรม คุณจะพบว่าเลข 5 นั้นไม่ถูกแสดงผล เพราะเป็นผลของคำสั่ง Continue นั่นเอง
การใช้คำสั่ง Break
คำสั่ง break
เป็นคำสั่งที่ใช้ในการหยุดการทำงานของลูปในทันที มันไม่ได้สนใจว่าเงื่อนไขการทำงานของลูปจะเป็นจริงอยู่ เมื่อโปรแกรมเจอคำสั่ง break มันจะออกจากลูปและทำงานต่อไปหลังจากลูปในทันที สำหรับตัวอย่างการใช้คำสั่ง ฺbreak ในภาษา Java
public class BreakStatement {
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i == 7) {
break;
}
System.out.print(i + ", ");
++i;
}
System.out.println(" End");
}
}
ในตัวอย่างข้างบน เป็นการใช้งานคำสั่ง While loop เช่นเดิม โปรแกรมของเราเป็นโปรแกรมในการแสดงตัวเลข 1 - 10 ในตัวอย่างเราได้ใช้คำสั่ง if (i == 7)
ดังนั้นเมื่อ i เท่ากับ 7 โปรแกรมจะไปทำงานคำสั่ง break และออกจาก While loop ในทันที ถึงแม้ว่าค่าของ i จะยังน้อยกว่า 10 อยู่ก็ตาม
1, 2, 3, 4, 5, 6, End
นี่เป็นผลลัพธ์ของโปรแกรมที่แสดงถึงเลข 6 เพราะว่ามันเจอคำสั่ง break เมื่อ i เป็น 7
คำสั่ง break และ continue นั้นถือว่ามีประโยชน์อย่ามากในการเขียนโปรแกรม ในกรณีที่ต้องการให้มันออกจาก Loop ในเงือนไข เช่น การเขียนเกม นอกจากเกมจะบลหลังจากที่มัน Over แล้ว ผู้ใช้ยังสามารถกดปุ่ม ESC
เพื่อออกจากเกมได้ เป็นต้น
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับลูปประเภทต่างๆ ในภาษา Java แบะตัวอย่างการใช้งานแบบต่างๆ ที่คุณจะสามารถนำไปประยุกต์ใช้ได้กับโปรแกรมของคุณเอง