0Pricing
Java Academy · บทเรียน

continue แบบมีป้ายกำกับ

ทำงานต่อในลูปภายนอก

continue แบบมีป้ายกำกับ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

การวนต่อของลูปด้านนอก

continue ธรรมดาจะเริ่มลูปด้านในใหม่เท่านั้น แต่บางครั้งคุณต้องการข้ามไปยังรอบถัดไปของลูป ด้านนอกแทน

สำหรับกรณีนี้ Java มี continue ที่มีป้ายกำกับ

คำสั่งนี้จับคู่ป้ายกำกับของลูปกับคีย์เวิร์ด continue เพื่อควบคุมว่าลูปใดจะเริ่มรอบถัดไป

ไวยากรณ์ของ continue ที่มีป้ายกำกับ

รูปแบบคือ continue label; โดย label จะเป็นชื่อของลูปครอบ

แทนที่จะเลื่อนลูปด้านในไปข้างหน้า คำสั่งนี้จะกระโดดไปยังรอบถัดไปของลูปที่มีป้ายกำกับ

ทุกอย่างที่เหลือในลูปด้านในของรอบนั้นจะถูกข้าม

continue outer;  // jump to next iteration of 'outer'

ตัวอย่างแรก

ในที่นี้ เมื่อ col มีค่าเท่ากับ 2 เราจะใช้ continue กับลูปด้านนอก

คำสั่งนี้ยกเลิกส่วนที่เหลือของลูปด้านในและไปยังแถวถัดไปทันที

public class Main {
    public static void main(String[] args) {
        outer:
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (col == 2) {
                    continue outer;
                }
                System.out.println("row " + row + ", col " + col);
            }
        }
    }
}

การอ่านผลลัพธ์

แต่ละแถวแสดงเพียง col 1 เมื่อ col มีค่าเป็น 2, continue outer จะกระโดดไปยังแถวถัดไปโดยตรง

คอลัมน์ 2 และ 3 จึงไม่เคยถูกแสดงในแถวใดเลย

ลูปด้านในจะเริ่มใหม่จาก col 1 ในแต่ละแถวใหม่

continue เทียบกับ continue label

ลองเปรียบเทียบกับ continue ธรรมดา ซึ่งจะข้ามเพียง col 2 และยังคงแสดง col 3

ลองเรียกใช้แล้วสังเกตว่า col 1 และ col 3 ปรากฏในทุกแถว

public class Main {
    public static void main(String[] args) {
        for (int row = 1; row <= 3; row++) {
            for (int col = 1; col <= 3; col++) {
                if (col == 2) {
                    continue;
                }
                System.out.println("row " + row + ", col " + col);
            }
        }
    }
}

ความแตกต่างสำคัญ

continue ธรรมดาจะข้ามเพียงรอบปัจจุบันของลูปด้านใน ดังนั้นลูปด้านในยังทำงานต่อ

continue outer ที่มีป้ายกำกับจะยกเลิกลูปด้านในทั้งหมดและเริ่มรอบถัดไปของลูปด้านนอก

ป้ายกำกับเพียงคำเดียวนี้เปลี่ยนปริมาณโค้ดที่ถูกข้ามไป

การข้ามทั้งแถว

continue ที่มีป้ายกำกับมีประโยชน์เมื่อค่าที่ไม่ถูกต้องเพียงค่าเดียวควรทำให้ส่วนที่เหลือของรอบด้านในเป็นโมฆะ

ในที่นี้ หากมีตัวเลขใดในแถวเป็นค่าลบ เราจะข้ามงานที่เหลือของแถวนั้นและไปต่อ

public class Main {
    public static void main(String[] args) {
        int[][] data = {{1, 2, 3}, {4, -1, 6}, {7, 8, 9}};
        rows:
        for (int r = 0; r < data.length; r++) {
            int sum = 0;
            for (int c = 0; c < data[r].length; c++) {
                if (data[r][c] < 0) {
                    System.out.println("Row " + r + " skipped");
                    continue rows;
                }
                sum += data[r][c];
            }
            System.out.println("Row " + r + " sum = " + sum);
        }
    }
}

ติดตามตัวอย่างนี้

แถว 0 และ 2 แสดงผลรวมของตนเอง แถว 1 พบค่าลบ แสดง "Row 1 skipped" แล้วกระโดดไปยังแถวถัดไป

ที่สำคัญ บรรทัดแสดงผลรวมของแถว 1 ไม่เคยทำงาน เพราะ continue ที่มีป้ายกำกับข้ามผ่านบรรทัดนั้นไป

การกรองคู่ค่า

การใช้งานอีกอย่างคือการข้ามรายการด้านนอกทั้งรายการทันทีที่เงื่อนไขด้านในข้อใดข้อหนึ่งไม่ผ่าน

ลูปนี้แสดงคู่ค่า แต่จะข้ามค่า i ใด ๆ ที่เมื่อคูณกับ j แล้วมีผลคูณเกิน 6

public class Main {
    public static void main(String[] args) {
        loopI:
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (i * j > 6) {
                    continue loopI;
                }
                System.out.println(i + " x " + j + " = " + (i * j));
            }
        }
    }
}

ชื่อและตำแหน่งของป้ายกำกับ

ลูปที่มีป้ายกำกับต้องครอบคำสั่ง continue อยู่ คุณไม่สามารถ continue ไปยังป้ายกำกับที่อยู่เหนือคำสั่งนั้นไม่ได้

เลือกชื่อที่สื่อความหมาย เช่น rows หรือ loopI เพื่อให้ผู้อ่านทราบว่าลูปใดจะเริ่มรอบถัดไป

ป้ายกำกับที่ชัดเจนถือเป็นคำอธิบายโค้ดในตัวเอง

เมื่อใดมีประโยชน์และเมื่อใดเป็นโทษ

continue ที่มีป้ายกำกับมีประโยชน์เมื่อเงื่อนไขหนึ่งควรทำให้ส่วนที่เหลือของรอบด้านในเป็นโมฆะและไปต่อ

แต่การใช้ป้ายกำกับมากเกินไปทำให้ติดตามลำดับการทำงานได้ยาก หาก continue ธรรมดาหรือการคืนค่าจากเมธอดก่อนกำหนดอ่านได้ง่ายกว่า ก็ควรเลือกวิธีนั้น

ใช้ป้ายกำกับเฉพาะในจุดที่ช่วยให้โค้ดชัดเจนขึ้นจริง ๆ

ตรวจสอบอย่างรวดเร็ว

คาดการณ์ผลของ continue ที่มีป้ายกำกับ

ทบทวน

continue label; จะข้ามส่วนที่เหลือของลูปด้านในและเลื่อนลูปด้านนอกที่มีชื่อไปยังรอบถัดไป

คำสั่งนี้แตกต่างจาก continue ธรรมดา ซึ่งข้ามเพียงหนึ่งรอบด้านใน ควรใช้ป้ายกำกับเมื่อช่วยให้ตรรกะของหลายลูปชัดเจนขึ้น ไม่ใช่เพียงทำให้โค้ดสั้นลง

คำถามที่พบบ่อย

บทเรียน “continue แบบมีป้ายกำกับ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “continue แบบมีป้ายกำกับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “continue แบบมีป้ายกำกับ”

ทำงานต่อในลูปภายนอก คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “continue แบบมีป้ายกำกับ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. break และ continue
  2. break แบบมีป้ายกำกับ
  3. continue แบบมีป้ายกำกับ
  4. หลีกเลี่ยงลำดับการทำงานแบบสปาเกตตี
← กลับไปที่ Java Academy