CodeGym /จาวาบล็อก /สุ่ม /สำหรับแต่ละลูปใน Java
John Squirrels
ระดับ
San Francisco

สำหรับแต่ละลูปใน Java

เผยแพร่ในกลุ่ม

for-แต่ละวงคืออะไร?

for -eachเป็นประเภทของforลูปที่คุณใช้เมื่อต้องการประมวลผลองค์ประกอบทั้งหมดของอาร์เรย์หรือคอลเลกชัน ที่กล่าวว่าวลีfor-eachไม่ได้ใช้จริงในลูปนี้ ไวยากรณ์เป็นดังนี้:

for (type itVar : array) 
{ 
    // Operations
}
โดยที่typeคือประเภทของตัวแปร iterator (ซึ่งตรงกับประเภทข้อมูลของอิลิเมนต์ในอาร์เรย์!), itVarคือชื่อของมัน และarrayคืออาร์เรย์ (อนุญาตให้ใช้โครงสร้างข้อมูลอื่นๆ เช่น คอลเลกชันบางประเภท เช่นArrayList ) คือวัตถุที่ดำเนินการวนซ้ำ อย่างที่คุณเห็น โครงสร้างนี้ไม่ใช้ตัวนับ: ตัวแปรตัววนซ้ำจะวนซ้ำองค์ประกอบต่างๆ ของอาร์เรย์หรือคอลเล็กชัน เมื่อดำเนินการลูปดังกล่าว ตัวแปรตัววนซ้ำจะได้รับการกำหนดค่าของแต่ละองค์ประกอบของอาร์เรย์หรือคอลเลกชันตามลำดับ หลังจากนั้นบล็อกของคำสั่ง (หรือคำสั่ง) ที่ระบุจะถูกดำเนินการ

นอกจาก for-each แล้ว Java ยังมีเมธอด forEach() คุณสามารถอ่านเกี่ยวกับเรื่องนี้ได้ในบทความเรื่อง"หยุดเขียนวนซ้ำ!" แนวทางปฏิบัติที่ดีที่สุด 10 อันดับแรกสำหรับการทำงานกับคอลเลกชันใน Java 8

บันทึก:สามารถใช้ for-each ลูปกับอาร์เรย์และคลาสใดๆ ที่ใช้อินเทอร์เฟซjava.lang.Iterable ลูป ต่อไปนี้จะเทียบเท่ากับโค้ดด้านบน:

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วนซ้ำจะไม่ทำงานเลยหรือจะทำงานได้ยากเท่านั้น
  1. หากคุณต้องการวิ่งวนซ้ำจากจุดสิ้นสุดไปยังจุดเริ่มต้น นั่นคือไม่มีfor-eachลูปที่เป็นอะนาลอกโดยตรงกับโค้ดต่อไปนี้:

    
    for (int i= array.length-1; i>0; i--) 
    {
          System.out.println(array[i]);
    }
    
  2. For-each ไม่เหมาะถ้าคุณต้องการเปลี่ยนแปลงอาร์เรย์ ตัวอย่างเช่น คุณไม่สามารถจัดเรียงอาร์เรย์โดยไม่เปลี่ยนตำแหน่งขององค์ประกอบ นอกจากนี้ ในโค้ดต่อไปนี้ เฉพาะตัวแปร iterator เท่านั้นที่จะเปลี่ยนแปลง ไม่ใช่องค์ประกอบของอาร์เรย์:

    
    for (int itVar : array) 
    {
        itVar = itVar++; 
    }
    
  3. หากคุณกำลังมองหาองค์ประกอบในอาร์เรย์และคุณต้องการส่งคืน (หรือส่งต่อ) ดัชนีขององค์ประกอบที่คุณกำลังมองหา จะเป็นการดีกว่าถ้าใช้ for loop แบบธรรมดา

วิดีโอที่เป็นประโยชน์เกี่ยวกับ for-each loop

วนซ้ำในหลักสูตร CodeGym

ใน CodeGym เราเริ่มฝึกการใช้ลูปที่ระดับ4 ของ Java Syntax quest บทเรียนหลายบทในระดับนั้น รวมถึงงานจำนวนมากในระดับต่างๆ ทุ่มเทให้กับการวนซ้ำเพื่อเสริมทักษะของคุณในการทำงานกับสิ่งเหล่านั้น โดยพื้นฐานแล้ว ไม่มีทางที่คุณจะหลีกเลี่ยงได้ — ลูปเป็นหนึ่งในโครงสร้างที่สำคัญที่สุดในการเขียนโปรแกรม

ข้อมูลเพิ่มเติมเกี่ยวกับ for-each และลูปอื่นๆ

  1. คำสั่ง while บทความนี้เกี่ยวกับชนิดของการวนซ้ำที่ง่ายที่สุด: การwhileวนซ้ำ ซึ่ง CodeGym ใช้เพื่อแนะนำการวนซ้ำให้กับนักเรียน
  2. หยุดเขียนซ้ำ! แนวทางปฏิบัติที่ดีที่สุด 10 อันดับแรกสำหรับการทำงานกับคอลเลกชันใน Java 8 บทความนี้จะช่วยให้นักเรียน CodeGym ที่เรียนมาอย่างน้อยครึ่งทางได้เรียนรู้สิ่งที่น่าสนใจมากมายเกี่ยวกับการทำงานกับคอลเลกชัน
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION