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

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

ออกจากลูปภายนอกอย่างเป็นระเบียบ

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

ปัญหาของลูปซ้อน

break ธรรมดาจะออกจากลูปด้านในเท่านั้น แต่บ่อยครั้งคุณต้องการออกจากลูป ทั้งสอง พร้อมกัน

ลองนึกภาพว่ากำลังค้นหาค่าหนึ่งในตารางกริด เมื่อพบค่าแล้ว คุณต้องการหยุดทุกอย่าง ไม่ใช่หยุดเพียงลูปด้านใน

Java แก้ปัญหานี้ด้วย break ที่มีป้ายกำกับ

ป้ายกำกับคืออะไร

ป้ายกำกับคือชื่อที่กำหนดให้ลูปและตามด้วยเครื่องหมายโคลอน

ตัวอย่างเช่น outer: ที่วางไว้ก่อนลูป for จะตั้งชื่อให้ลูปนั้นว่า "outer"

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

outer:
for (int i = 0; i < 3; i++) {
    // 'outer' is now a name for this loop
}

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

เขียนชื่อป้ายกำกับต่อจากคีย์เวิร์ด break: break outer;

วิธีนี้บอกให้ Java กระโดดออกจากลูปชื่อ outer แม้คำสั่งจะอยู่ลึกภายในลูปซ้อน

ลูปด้านในและด้านนอกจะหยุดทันทีทั้งคู่

break outer;  // exits the loop labeled 'outer'

การทำงานของ break ที่มีป้ายกำกับ

ในที่นี้ เราค้นหาค่าในตารางกริดขนาด 3x3 เมื่อพบ col 2 ในแถว 2 เราจะใช้ break กับลูปด้านนอก

วิธีนี้จะหยุดลูปทั้งสองพร้อมกัน ต่างจาก break ธรรมดา

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 (row == 2 && col == 2) {
                    System.out.println("Found at " + row + "," + col);
                    break outer;
                }
            }
        }
        System.out.println("Search over");
    }
}

เหตุใดทุกอย่างจึงหยุดลง

ผลลัพธ์คือ "Found at 2,2" แล้วจึงเป็น "Search over"

เนื่องจากเราใช้ break outer ลูปทั้งสองจึงจบลง แถว 3 ไม่เคยถูกตรวจสอบ

หากใช้ break ธรรมดา โปรแกรมจะทำงานต่อไปยังแถว 3 หลังจากออกจากลูปด้านในเพียงลูปเดียว

เปรียบเทียบ break สองแบบ

ลองดูตารางกริดเดิมโดยใช้ break ธรรมดาแทน

คำสั่งนี้ออกจากลูปด้านในเท่านั้น ดังนั้นลูปด้านนอกจึงยังทำงานต่อจนครบทุกแถว

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

การค้นหาในอาร์เรย์สองมิติ

กรณีการใช้งานจริงคือการค้นหาเป้าหมายภายในเมทริกซ์

เมื่อพบค่าแล้ว break ที่มีป้ายกำกับจะจบการค้นหาทั้งหมดอย่างเรียบร้อย

public class Main {
    public static void main(String[] args) {
        int[][] grid = {{1, 2}, {3, 9}, {5, 6}};
        int target = 9;
        search:
        for (int r = 0; r < grid.length; r++) {
            for (int c = 0; c < grid[r].length; c++) {
                if (grid[r][c] == target) {
                    System.out.println("At row " + r + " col " + c);
                    break search;
                }
            }
        }
    }
}

ป้ายกำกับต้องอยู่บนลูป

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

เลือกชื่อที่ชัดเจน เช่น outer, rows หรือ search เพื่อให้โค้ดอ่านได้อย่างเป็นธรรมชาติ

หลีกเลี่ยงชื่อกำกวมอย่าง x: ซึ่งซ่อนเจตนาของโค้ด

ลูปซ้อนสามระดับ

ป้ายกำกับยังใช้ได้กับลูปซ้อนสามระดับขึ้นไป

ในที่นี้ break ที่มีป้ายกำกับจะกระโดดออกจากลูปทั้งสามพร้อมกันทันทีที่เงื่อนไขเป็นจริง

public class Main {
    public static void main(String[] args) {
        done:
        for (int a = 1; a <= 2; a++) {
            for (int b = 1; b <= 2; b++) {
                for (int c = 1; c <= 2; c++) {
                    if (a + b + c == 4) {
                        System.out.println(a + "," + b + "," + c);
                        break done;
                    }
                }
            }
        }
    }
}

เมื่อใดที่ break แบบมีป้ายกำกับมีประโยชน์

break ที่มีป้ายกำกับมีประโยชน์มากเมื่อคุณต้องยกเลิกลูปหลายชั้นทันทีที่พบผลลัพธ์

ช่วยหลีกเลี่ยงตัวแปรธงเพิ่มเติมอย่าง boolean found ที่ต้องตรวจสอบในทุกระดับ

เมื่อใช้อย่างพอเหมาะ จะทำให้ลูปค้นหาสั้นและชัดเจน

ใช้แต่พอเหมาะ

แม้จะมีประโยชน์มาก แต่การใช้ป้ายกำกับมากเกินไปทำให้ติดตามโค้ดได้ยาก

ควรเลือกใช้ break ที่มีป้ายกำกับเป็นหลักในการค้นหาที่มีลูปซ้อนจริง ๆ สำหรับลูปง่าย ๆ break ธรรมดาจะชัดเจนกว่า

ความอ่านง่ายต้องมาก่อนเสมอ

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

พิจารณาว่า break ที่มีป้ายกำกับทำอะไรในลูปซ้อน

ทบทวน

ป้ายกำกับใช้ตั้งชื่อให้ลูป และ break label; จะออกจากลูปที่มีชื่อนั้น พร้อมออกจากลูปทุกชั้นที่ซ้อนอยู่ภายใน

วิธีนี้เหมาะสำหรับหยุดการค้นหาที่มีลูปซ้อนทั้งหมดพร้อมกัน ต่อไปคุณจะได้ดูว่าป้ายกำกับทำงานร่วมกับ continue อย่างไร

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

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

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

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

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

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

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

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

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

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

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

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

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