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