Loop yang kita tulis sejauh ini berjalan tuntas: kondisi diperiksa, iterasi berjalan, loop berakhir saat kondisi false. Dua kebutuhan praktis sering mengganggu keteraturan itu — program perlu berhenti seketika begitu jawaban ditemukan (mengapa terus memindai sisanya?), atau melompati iterasi tertentu yang tidak relevan tanpa membuyarkan loop keseluruhan. Java menangani keduanya dengan dua kata kunci: break menghentikan loop sedang berjalan, continue membatalkan sisa iterasi saat ini dan melompat ke iterasi berikutnya. Kita sudah berjumpa break pada switch; chapter ini membahas keduanya dalam konteks loop, batas wewenangnya, dan perilakunya pada loop bersarang.

break Menghentikan Loop #

break segera mengakhiri loop yang paling dalam memuatnya — eksekusi melompat ke statement tepat setelah kurung kurawal penutup loop. Pola penggunaannya yang paling klasik: pencarian yang berhenti di kandidat pertama:

java CariPertama.java
public class CariPertama {
    public static void main(String[] args) {
        int[] data = {4, 17, 8, 23, 15, 9};
        int batas = 20;
        int posisi = -1;

        for (int i = 0; i < data.length; i++) {
            System.out.println("Memeriksa indeks " + i + " (nilai " + data[i] + ")");
            if (data[i] > batas) {
                posisi = i;
                break;   // berhenti: kandidat pertama sudah ditemukan
            }
        }

        System.out.println("Elemen pertama di atas " + batas + ": indeks " + posisi);
    }
}

Output yang Dihasilkan:

text
Memeriksa indeks 0 (nilai 4)
Memeriksa indeks 1 (nilai 17)
Memeriksa indeks 2 (nilai 8)
Memeriksa indeks 3 (nilai 23)
Elemen pertama di atas 20: indeks 3

Jejak keluaran menjadi bukti mekanismenya. Loop memeriksa indeks 0 (4), 1 (17), 2 (8) — semuanya di bawah batas 20 — lalu indeks 3 bernilai 23 melampauinya: posisi diisi 3, break dieksekusi, dan loop berhenti di tengah jalan. Indeks 4 dan 5 tidak pernah diperiksa — keluaran tidak memuat barisnya — padahal kondisi i < data.length masih jauh dari false. Tanpa break, loop memeriksa keenam elemen dan kita harus menambah syarat posisi == -1 agar hanya kecocokan pertama yang direkam; break menyederhanakan logika itu sekaligus memotong kerja yang sia-sia.

Nilai awal posisi = -1 juga bagian dari pola: bila tidak ada satu pun elemen yang lolos, loop tuntas tanpa break dan -1 tetap menjadi penanda “tidak ditemukan”.

continue Melompati Iterasi #

continue bekerja lebih halus: sisa badan iterasi saat ini dibatalkan, tetapi loop tetap hidup — pada for, eksekusi melompat ke bagian update lalu menguji kondisi; pada while dan do-while, eksekusi melompat langsung ke pengujian kondisi:

public class LewatiKelipatan {
    public static void main(String[] args) {
        int jumlahDiproses = 0;

        for (int i = 1; i <= 10; i++) {
            if (i % 3 == 0) {
                continue;   // lewati iterasi ini, lanjut ke i berikutnya
            }
            System.out.println("Memproses bilangan " + i);
            jumlahDiproses++;
        }

        System.out.println("Jumlah bilangan yang diproses: " + jumlahDiproses);
    }
}

Output yang Dihasilkan:

text
Memproses bilangan 1
Memproses bilangan 2
Memproses bilangan 4
Memproses bilangan 5
Memproses bilangan 7
Memproses bilangan 8
Memproses bilangan 10
Jumlah bilangan yang diproses: 7

Keluaran mencantumkan 1, 2, lalu melompat ke 4 — bilangan 3, 6, dan 9 tidak pernah mencapai println karena i % 3 == 0 memicu continue lebih dulu. Setelah continue, bagian update i++ tetap berjalan normal; itulah sebabnya loop terus maju dan tidak terjebak. Akumulator akhirnya 7 — sepuluh bilangan dikurangi tiga kelipatan tiga — membuktikan bahwa tepat tujuh iterasi mencapai bagian bawah badan loop.

Wewenang break dan Larangan continue pada switch #

Kita pertama berjumpa break sebagai penutup cabang switch — perannya di sana berbeda dari di loop: break mengakhiri statement switch, bukan perulangan. Konsekuensinya menarik ketika switch berada di dalam loop: break di dalam switch hanya keluar dari switch, dan loop berlanjut ke iterasi berikutnya. Sebaliknya, continue tidak sah di dalam switch yang tidak dibungkus loop — compiler javac menolaknya dengan pesan error: continue outside of loop, karena statement ini murni milik perulangan. Java memang tidak menyediakan goto serba-bisa seperti bahasa lawas; kendali lompatan dibatasi pada struktur yang berorientasi loop dan cabang.

Efek Hanya pada Loop Terdalam #

Kedua kata kunci memengaruhi satu loop saja: loop yang paling dalam memuatnya. Pada loop bersarang, break di badan loop dalam hanya menghentikan loop dalam — loop luar melanjutkan iterasi berikutnya, yang tentu menjalankan lagi loop dalam dari awal. Perilaku ini masuk akal untuk memproses “lewati satu elemen bermasalah”, namun gagal total untuk kebutuhan “berhenti seluruhnya saat ditemukan di mana pun”. Java menyediakan mekanisme khusus untuk keluar dari beberapa tingkat loop sekaligus — labeled break — yang menjadi pokok bahasan chapter berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

CariPertama.java

Unduh berkas
java
public class CariPertama {
    public static void main(String[] args) {
        int[] data = {4, 17, 8, 23, 15, 9};
        int batas = 20;
        int posisi = -1;

        for (int i = 0; i < data.length; i++) {
            System.out.println("Memeriksa indeks " + i + " (nilai " + data[i] + ")");
            if (data[i] > batas) {
                posisi = i;
                break;   // berhenti: kandidat pertama sudah ditemukan
            }
        }

        System.out.println("Elemen pertama di atas " + batas + ": indeks " + posisi);
    }
}

LewatiKelipatan.java

Unduh berkas
java
public class LewatiKelipatan {
    public static void main(String[] args) {
        int jumlahDiproses = 0;

        for (int i = 1; i <= 10; i++) {
            if (i % 3 == 0) {
                continue;   // lewati iterasi ini, lanjut ke i berikutnya
            }
            System.out.println("Memproses bilangan " + i);
            jumlahDiproses++;
        }

        System.out.println("Jumlah bilangan yang diproses: " + jumlahDiproses);
    }
}