Java เช่นเดียวกับภาษาโปรแกรมอื่นๆ ส่วนใหญ่ สนับสนุนการวนซ้ำซ้อนกัน นี่หมายถึงการวนซ้ำภายในลูป ในบทความนี้ เราจะมาเรียนรู้เกี่ยวกับวิธีการทำงานกับลูปซ้อนใน Java
Java ซ้อนลูป
การวนซ้ำเรียกว่าซ้อนหากวางไว้ภายในลูปอื่น ในรอบแรก วงรอบนอกจะเรียกวงวงในซึ่งทำงานจนเสร็จสิ้น หลังจากนั้นการควบคุมจะถูกถ่ายโอนไปยังเนื้อหาของวงรอบนอก ในรอบที่สอง วงนอกจะเรียกวงในอีกครั้ง และต่อไปจนกว่าวงรอบนอกจะสิ้นสุดลง มีสี่ประเภทของการวนซ้ำใน Java:-
สำหรับลูป
-
ในขณะที่วนซ้ำ
-
ทำ ... ในขณะที่วนซ้ำ
-
สำหรับแต่ละวง
วิธีการทำงานของลูปที่ซ้อนกันของ Java
ส่วน ใหญ่แล้วลูปที่ใช้มากที่สุดใน Java คือforส่วนใหญ่เพราะมันค่อนข้างหลากหลายและโค้ดที่ใช้ก็ค่อนข้างอ่านง่าย นี่คือไวยากรณ์ทั่วไปสำหรับการวนซ้ำที่ซ้อนกัน:
// outer loop
for (initialization; condition; increment) {
//write here your code
//nested loop
for(initialization; condition; increment) {
//write here your code
}
..
}
เขาทำงานอย่างไร? วงรอบนอกเริ่มต้นขึ้น จากนั้นลูปที่ซ้อนกันสำหรับลูปจะเริ่มทำงานและผ่านดัชนีจนกว่าจะตรงตามเงื่อนไข และส่งงานไปยังลูปภายนอกอีกครั้ง และสิ่งนี้จะเกิดขึ้นจนกว่าจะตรงตามเงื่อนไขของลูปภายนอก ฟังดูยุ่งยากไปหน่อยใช่ไหม มันจะง่ายกว่ามากที่จะเข้าใจด้วยตัวอย่างที่เฉพาะเจาะจง ดังนั้นเรามาเริ่มกันเลย
ซ้อนกันสำหรับตัวอย่างรหัสลูป
นี่คือตัวอย่างคลาสสิก ลองพิมพ์ครึ่งปิรามิดโดยใช้สองลูป หนึ่งในนั้นซ้อนอยู่
public class NestedLoopsDemo1 {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j<=i; j++)
System.out.print("*");
System.out.println();
}
}
}
ผลลัพธ์คือ:
* ** *** **** ***** ****** ******** ******** ********* ***** *****
ตัวอย่างรหัสที่ซ้อนกันในขณะที่วนซ้ำ
public class NestedLoopsDemo2 {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
int j = 0;
while (j <= i) {
System.out.print("*");
j++;
}
System.out.println();
i++;
}
}
}
ผลลัพธ์จะเหมือนกับในตัวอย่างก่อนหน้า:
* ** *** **** ***** ****** ******** ******** ********* ***** *****
ลูป do... whileคล้ายกับลูปwhile ข้อแตกต่างที่สำคัญคือ เนื้อความของdo... while loop จะถูกดำเนินการหนึ่งครั้งก่อนการตรวจสอบนิพจน์
ตัวอย่างโค้ด foreach ที่ซ้อนกัน
สำหรับแต่ละลูปสามารถซ้อนกันได้ตามปกติสำหรับลูป นี่คือตัวอย่างสำหรับแต่ละลูปที่ซ้อนกันซึ่งวนซ้ำอาร์เรย์ 2 มิติ
public class NestedLoops2 {
public static void main(String[] args)
{
int[][] mainArray = { {5, 4, 3, 2, 1}, {7, 8, 9, 10, 11} };
for (int[] myArray : mainArray)
{
for (int i : myArray)
{
System.out.print(i+" ");
}
System.out.println("");
}
}
}
ผลลัพธ์คือ:
5 4 3 2 1 7 8 9 10 11
ตัวอย่างการวนลูป for และ while
บางครั้งเราสามารถซ้อนลูปประเภทต่างๆ เข้าด้วยกันได้ ตัวอย่างเช่นสำหรับภายในwhileหรือสำหรับภายในfor- each อย่างไรก็ตาม นี่ไม่ใช่แนวทางปฏิบัติในการเขียนโปรแกรมที่ดีที่สุด โครงสร้างดังกล่าวทำให้ความสามารถในการอ่านโค้ดลดลงอย่างมาก ดังนั้นโปรแกรมเมอร์มืออาชีพจึงพยายามอย่าผสมโปรแกรมใดโปรแกรมหนึ่งเข้าด้วยกัน พวกเขาทำ แต่ถ้าจำเป็นจริงๆ และอีกหนึ่งกฎเล็กๆ น้อยๆ: หากคุณเลือกระหว่างwhileและforให้ใช้forหากเป็นไปได้ อย่างไรก็ตาม เราจะยกตัวอย่างการใช้for วนซ้ำภายในwhile มาสร้างปิรามิดกึ่งปิรามิดกันอีกครั้ง
public class NestedLoopsDemo2 {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
i++;
}
}
}
ผลลัพธ์ไม่น่าแปลกใจ:
* ** *** **** ***** ****** ******** ******** ********* ***** *****
GO TO FULL VERSION