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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- break และ continue
- break แบบมีป้ายกำกับ
- continue แบบมีป้ายกำกับ
- หลีกเลี่ยงลำดับการทำงานแบบสปาเกตตี