for-แต่ละวงคืออะไร?
for -eachเป็นประเภทของforลูปที่คุณใช้เมื่อต้องการประมวลผลองค์ประกอบทั้งหมดของอาร์เรย์หรือคอลเลกชัน ที่กล่าวว่าวลีfor-eachไม่ได้ใช้จริงในลูปนี้ ไวยากรณ์เป็นดังนี้:
for (type itVar : array)
{
// Operations
}
โดยที่typeคือประเภทของตัวแปร iterator (ซึ่งตรงกับประเภทข้อมูลของอิลิเมนต์ในอาร์เรย์!), itVarคือชื่อของมัน และarrayคืออาร์เรย์ (อนุญาตให้ใช้โครงสร้างข้อมูลอื่นๆ เช่น คอลเลกชันบางประเภท เช่นArrayList ) คือวัตถุที่ดำเนินการวนซ้ำ อย่างที่คุณเห็น โครงสร้างนี้ไม่ใช้ตัวนับ: ตัวแปรตัววนซ้ำจะวนซ้ำองค์ประกอบต่างๆ ของอาร์เรย์หรือคอลเล็กชัน เมื่อดำเนินการลูปดังกล่าว ตัวแปรตัววนซ้ำจะได้รับการกำหนดค่าของแต่ละองค์ประกอบของอาร์เรย์หรือคอลเลกชันตามลำดับ หลังจากนั้นบล็อกของคำสั่ง (หรือคำสั่ง) ที่ระบุจะถูกดำเนินการ
นอกจาก for-each แล้ว Java ยังมีเมธอด forEach() คุณสามารถอ่านเกี่ยวกับเรื่องนี้ได้ในบทความเรื่อง"หยุดเขียนวนซ้ำ!" แนวทางปฏิบัติที่ดีที่สุด 10 อันดับแรกสำหรับการทำงานกับคอลเลกชันใน Java 8 |
for (int i=0; i < array.length; i++)
{
// Statements
}
ตัวอย่างของ for-แต่ละวง
เราสร้างชุดคะแนนของนักเรียน จากนั้นเราจะใช้for-eachเพื่อพิมพ์ค่าประมาณทั้งหมด คำนวณคะแนนเฉลี่ย และหาคะแนนสูงสุด
public class ForEachTest {
// A method that prints all scores
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int num : scores) {
System.out.print(num + "|");
}
System.out.println();
}
// A method that displays the average score
public static double getAverageScore(int[] numbers) {
int totalScore = 0;
for (int num : numbers) {
totalScore = num + totalScore;
}
return ((double) totalScore / numbers.length);
}
// A method that determines the best (maximum) score
public static int getBestScore(int[] numbers) {
int maxScore = numbers[0];
for (int num : numbers) {
if (num > maxScore) {
maxScore = num;
}
}
return maxScore;
}
public static void main(String[] args) {
// Array of scores
int[] scores = {5, 10, 7, 8, 9, 9, 10, 12};
int bestScore = getBestScore(scores);
System.out.print("All the scores: ");
printAllScores(scores);
System.out.println("The highest score is " + bestScore);
System.out.println("The average score is " + getAverageScore(scores));
}
}
เอาต์พุตของโปรแกรม:
All the scores: |5|10|7|8|9|9|10|12|
The highest score is 12
The average score is 8.75
ทีนี้มาดูกันว่าเมธอดการพิมพ์คะแนนทั้งหมดจะเป็นอย่างไรถ้าเราใช้for loop แบบธรรมดา:
public static void printAllScores(int[] scores) {
System.out.print("|");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i] + "|");
}
System.out.println();
}
หากเราเรียกใช้เมธอดนี้จาก เมธอด หลักเราจะได้ผลลัพธ์ดังนี้
All the scores: |5|10|7|8|9|9|10|12|
ตัวอย่างของ for-each วนกับคอลเลกชัน
เราสร้างชุดชื่อและแสดงชื่อทั้งหมดบนหน้าจอ
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-แต่ละวง
รูป แบบกะทัดรัดของ for-eachนั้นถือว่าอ่านง่ายกว่าforและถือเป็นแนวทางปฏิบัติที่ดีที่สุดในการใช้for-eachทุกครั้งที่เป็นไปได้ อย่างไรก็ตามfor-each loop นั้นมีโครงสร้างที่เป็นสากลน้อยกว่าfor loop ทั่วไป ต่อไปนี้คือบางกรณีง่ายๆ ที่for-eachวนซ้ำจะไม่ทำงานเลยหรือจะทำงานได้ยากเท่านั้น-
หากคุณต้องการวิ่งวนซ้ำจากจุดสิ้นสุดไปยังจุดเริ่มต้น นั่นคือไม่มีfor-eachลูปที่เป็นอะนาลอกโดยตรงกับโค้ดต่อไปนี้:
for (int i= array.length-1; i>0; i--) { System.out.println(array[i]); }
-
For-each ไม่เหมาะถ้าคุณต้องการเปลี่ยนแปลงอาร์เรย์ ตัวอย่างเช่น คุณไม่สามารถจัดเรียงอาร์เรย์โดยไม่เปลี่ยนตำแหน่งขององค์ประกอบ นอกจากนี้ ในโค้ดต่อไปนี้ เฉพาะตัวแปร iterator เท่านั้นที่จะเปลี่ยนแปลง ไม่ใช่องค์ประกอบของอาร์เรย์:
for (int itVar : array) { itVar = itVar++; }
-
หากคุณกำลังมองหาองค์ประกอบในอาร์เรย์และคุณต้องการส่งคืน (หรือส่งต่อ) ดัชนีขององค์ประกอบที่คุณกำลังมองหา จะเป็นการดีกว่าถ้าใช้ for loop แบบธรรมดา
วิดีโอที่เป็นประโยชน์เกี่ยวกับ for-each loop
วนซ้ำในหลักสูตร CodeGymใน CodeGym เราเริ่มฝึกการใช้ลูปที่ระดับ4 ของ Java Syntax quest บทเรียนหลายบทในระดับนั้น รวมถึงงานจำนวนมากในระดับต่างๆ ทุ่มเทให้กับการวนซ้ำเพื่อเสริมทักษะของคุณในการทำงานกับสิ่งเหล่านั้น โดยพื้นฐานแล้ว ไม่มีทางที่คุณจะหลีกเลี่ยงได้ — ลูปเป็นหนึ่งในโครงสร้างที่สำคัญที่สุดในการเขียนโปรแกรม |
ข้อมูลเพิ่มเติมเกี่ยวกับ for-each และลูปอื่นๆ
- คำสั่ง while บทความนี้เกี่ยวกับชนิดของการวนซ้ำที่ง่ายที่สุด: การ
while
วนซ้ำ ซึ่ง CodeGym ใช้เพื่อแนะนำการวนซ้ำให้กับนักเรียน - หยุดเขียนซ้ำ! แนวทางปฏิบัติที่ดีที่สุด 10 อันดับแรกสำหรับการทำงานกับคอลเลกชันใน Java 8 บทความนี้จะช่วยให้นักเรียน CodeGym ที่เรียนมาอย่างน้อยครึ่งทางได้เรียนรู้สิ่งที่น่าสนใจมากมายเกี่ยวกับการทำงานกับคอลเลกชัน
GO TO FULL VERSION