foreach ใน Java คืออะไร?
For-each เป็นประเภทของ for loop ที่ใช้เมื่อคุณต้องการประมวลผลองค์ประกอบทั้งหมดของอาร์เรย์หรือคอลเลกชัน “For Each” แปลมาจากภาษาอังกฤษว่า “For Everyone” จริงๆ แล้ว วลี foreach นั้นไม่ได้ใช้ในการวนซ้ำนี้ ไวยากรณ์ของมันมีดังนี้:for (type itVar : array)
{
Блок операторов;
}
โดยที่type
ประเภทของตัวแปรวนซ้ำ (เหมือนกับประเภทข้อมูลในอาร์เรย์!) itVar
คือชื่อของมันarray
คืออาร์เรย์ (อาจมีโครงสร้างข้อมูลอื่น คอลเลกชันบางประเภท เช่นArrayList
) นั่นคือ วัตถุที่ดำเนินการวนซ้ำ อย่างที่คุณเห็น การออกแบบนี้ไม่ได้ใช้ตัวนับ ตัวแปรการวนซ้ำจะวนซ้ำองค์ประกอบของอาร์เรย์หรือคอลเลกชัน ไม่ใช่ค่าดัชนี เมื่อดำเนินการวนซ้ำ ตัวแปรการวนซ้ำจะถูกกำหนดค่าตามลำดับของแต่ละองค์ประกอบของอาร์เรย์หรือคอลเลกชัน หลังจากนั้นจึงดำเนินการบล็อกคำสั่ง (หรือคำสั่ง) ที่ระบุ
นอกเหนือจาก for-each loop แล้ว Java ยังมีเมธอด forEach() อีกด้วย คุณสามารถอ่านเกี่ยวกับเรื่องนี้ได้ในบทความ “ หยุดเขียนวงจร!” 10 วิธีที่ดีที่สุดในการทำงานกับคอลเลกชันใน Java 8 ” |
for (int i=0; i<array.length; i++)
{
Блок операторов;
}
ตัวอย่าง foreach Java
มาสร้างอาร์เรย์เกรดของนักเรียนกันดีกว่า จากนั้น เมื่อใช้ for-each เราจะพิมพ์คะแนนทั้งหมด แสดงคะแนนเฉลี่ย และค้นหาคะแนนสูงสุดpublic class ForEachTest {
//method that prints all grades
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int num : grades) {
System.out.print(num + "|");
}
System.out.println();
}
//method that displays the average score
public static double midGrade(int[] numbers) {
int grade = 0;
for (int num : numbers) {
grade = num + grade;
}
return ((double) grade / numbers.length);
}
//method in which the best (maximum) score is calculated
public static int bestGrade(int[] numbers) {
int maxGrade = numbers[0];
for (int num : numbers) {
if (num > maxGrade) {
maxGrade = num;
}
}
return maxGrade;
}
public static void main(String[] args) {
//array of ratings
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};
int highest_marks = bestGrade(grades);
System.out.print("All the grades: ");
printAllGrades(grades);
System.out.println("The highest grade is " + highest_marks);
System.out.println("The average grade is " + midGrade(grades));
}
}
ผลลัพธ์ของโปรแกรม:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
ตอนนี้เรามาดูกันว่าวิธีการพิมพ์คะแนนทั้งหมดจะเป็นอย่างไร โดยการใช้ for loop ปกติ:
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int i = 0; i < grades.length; i++) {
System.out.print(grades[i] + "|");
}
System.out.println();
}
ถ้าเราเรียกวิธีนี้จาก method main
เราจะได้ผลลัพธ์:
All the grades: |5|10|7|8|9|9|10|12|
ตัวอย่างการใช้ for-each loop กับคอลเลกชั่น
มาสร้างคอลเลกชันชื่อและแสดงชื่อทั้งหมดบนหน้าจอกันList<String> names = new ArrayList<>();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
ข้อจำกัดของ for-each loop
รูปแบบย่อของ for-each ถือว่าอ่านง่ายกว่า for และถือเป็นแนวทางปฏิบัติที่ดีที่จะใช้ for-each ในจุดที่สามารถทำได้ อย่างไรก็ตาม for-each มีโครงสร้างที่หลากหลายน้อยกว่าปกติสำหรับ ต่อไปนี้เป็นกรณีง่ายๆ บางประการที่การใช้ for-each จะไม่ทำงานเลยหรือจะทำงานได้ยาก แต่จะเกิดความยุ่งยาก-
หากคุณต้องการผ่านวงตั้งแต่ต้นจนจบ นั่นคือไม่มีแอนะล็อกสำหรับแต่ละโค้ดโดยตรงสำหรับโค้ดต่อไปนี้:
for (int i = array.length - 1; i >= 0; i--) { System.out.println(array[i]); }
-
For-each ไม่เหมาะหากคุณต้องการเปลี่ยนแปลงอาร์เรย์ ตัวอย่างเช่น จะไม่สามารถจัดเรียงอาร์เรย์โดยไม่สลับองค์ประกอบได้ หรือในโค้ดต่อไปนี้ ไม่ใช่องค์ประกอบอาร์เรย์ที่จะเปลี่ยนแปลง แต่จะมีเพียงตัวแปรการวนซ้ำเท่านั้น:
for (int itVar : array) { itVar = itVar++; }
-
หากคุณกำลังค้นหาองค์ประกอบในอาร์เรย์และจำเป็นต้องส่งคืน (หรือส่งต่อ) ดัชนีขององค์ประกอบที่คุณกำลังมองหา จะเป็นการดีกว่าถ้าใช้ for loop แบบปกติ
วิดีโอที่เป็นประโยชน์เกี่ยวกับ for-each ที่จัดทำโดยนักเรียน JavaRush
วนซ้ำในหลักสูตร JavaRushที่ JavaRush เราเริ่มใช้ลูปในทางปฏิบัติที่ระดับ4 ของภารกิจ Java Syntax มีการบรรยายหลายครั้งสำหรับพวกเขา รวมถึงงานต่างๆ ในระดับต่างๆ เพื่อเสริมสร้างทักษะในการทำงานกับพวกเขา โดยทั่วไปแล้ว คุณจะหนีไม่พ้นลูป เพราะ Loop เป็นหนึ่งในโครงสร้างที่สำคัญที่สุดในการเขียนโปรแกรม |
ข้อมูลเพิ่มเติมเกี่ยวกับ for-each และ loops:
- For และ For-Each Loop: เรื่องราวของวิธีที่ฉันวนซ้ำ วนซ้ำ แต่ไม่ได้วนซ้ำ - บทความที่มีรายละเอียดที่ดีเกี่ยวกับ for และ for-each loop ใน Java ออกแบบมาสำหรับผู้อ่านที่ผ่านการฝึกอบรม (ประมาณ JavaRush ระดับ 10 ขึ้นไป)
- ในขณะที่คำสั่ง . บทความนี้เกี่ยวข้องกับวงจรที่ง่ายที่สุด
while
ซึ่งคุณเริ่มทำความคุ้นเคยกับวงจรใน JavaRush - หยุดเขียนวงจร! 10 วิธีที่ดีที่สุดในการทำงานกับคอลเลกชันใน Java 8 จากบทความนี้ นักเรียน JavaRush ที่เรียนจบไปแล้วครึ่งหลักสูตรขึ้นไปจะได้เรียนรู้มากมายเกี่ยวกับการทำงานกับคอลเลกชัน
GO TO FULL VERSION