Menu

while Loop Java: Sintaks, do-while, dan Jebakan Umum

Penjelasan while loop di Java: while yang mengecek kondisi lebih dulu, do-while yang berjalan minimal sekali, membaca input sampai nilai sentinel, break dan continue, dan cara menghindari infinite loop.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Saat Kamu Tidak Punya Counter

Loop for dibangun di sekitar counter yang kamu siapkan di awal. Tapi banyak perulangan yang tidak punya hitungan yang jelas: terus membaca baris sampai file habis, terus meminta password sampai benar, terus membagi dua sebuah angka sampai mencapai 1. Untuk kasus seperti itu, loop while adalah pilihan yang paling cocok: loop ini cukup mengulang selama kondisinya tetap bernilai true.

Loop while mengecek kondisinya sebelum setiap putaran, termasuk putaran pertama. Kalau kondisinya sudah false sejak awal, badannya tidak pernah berjalan sama sekali.

Kondisi count > 0 dicek lebih dulu; kalau true, badannya berjalan; lalu loop kembali ke atas dan mengecek lagi. Baris count-- adalah yang pada akhirnya membuat kondisinya false. Hapus baris itu, dan loop akan berjalan selamanya.

Anatomi while Loop

Bandingkan dengan loop for tiga bagian yang sudah kamu kenal. Loop while memisahkan ketiga tugas itu: kamu melakukan penyiapan sebelum loop, kondisinya ditulis di dalam tanda kurung, dan pembaruannya berada di dalam badan loop.

int i = 0;              // initialization - before the loop
while (i < 5) {         // condition - checked each pass
    System.out.println(i);
    i++;                // update - you must remember this yourself
}

Bagian terakhir itulah jebakannya. Di loop for, pembaruan berada tepat di samping kondisinya, jadi sulit dilupakan. Di loop while, pembaruan hanyalah pernyataan biasa di dalam badan loop, dan bug yang paling umum adalah lupa menulisnya sehingga program macet.

do-while: Jalankan Badan Loop Minimal Sekali

Kadang kamu butuh badan loop berjalan sekali dulu sebelum kamu bahkan bisa memutuskan apakah perlu diulang. Loop do-while mengecek kondisinya di bagian bawah, jadi badannya selalu dieksekusi minimal satu kali:

Kamu harus meminta dan membaca input minimal sekali sebelum bisa tahu apakah input-nya valid, dan itulah yang diberikan do-while. Perhatikan titik koma setelah while (...): titik koma itu wajib, dan lupa menulisnya adalah error kompilasi yang sering terjadi.

Perbedaannya dengan while biasa terlihat jelas saat kondisinya sudah false sejak awal:

Hanya do-while body yang dicetak. Loop while melewati badannya sepenuhnya karena x < 5 sudah false sebelum pengecekan pertama.

Perulangan Sampai Nilai Sentinel

Kegunaan klasik while adalah membaca sampai menemukan nilai "berhenti" khusus, yang disebut sentinel. Tidak ada counter di sini; kamu terus berjalan sampai datanya memberi tahu untuk berhenti:

Polanya adalah baca sekali sebelum loop, lalu baca lagi di bagian bawah setiap putaran. Dengan begitu kondisinya selalu menguji input yang baru. Kalau kamu lupa pembacaan kedua di dalam badan loop, value tidak pernah berubah dan kamu terjebak di infinite loop.

break dan continue di while Loop

break dan continue bekerja sama seperti di loop for. break langsung keluar dari loop; continue langsung melompat kembali ke pengecekan kondisi dan melewati sisa putaran saat itu:

Kode ini mencetak 1 3 5 7 9. while (true) memang sengaja tidak pernah berhenti dengan sendirinya, jadi break adalah satu-satunya jalan keluar. Hati-hati dengan continue di loop while: karena pembaruan adalah bagian dari badan loop, melompat kembali ke atas dengan continue sebelum kamu memajukan counter adalah cara diam-diam untuk membuat loop macet. Di contoh di atas n++ berjalan lebih dulu, jadi aman.

Waspadai Infinite Loop

Kondisinya harus pada akhirnya menjadi false, dan itu sepenuhnya bergantung pada sesuatu di dalam badan loop yang berubah. Dua penyebab yang biasa adalah lupa memperbarui dan memperbarui dengan cara yang salah:

int i = 0;
while (i < 5) {
    System.out.println(i);   // i never changes -> runs forever
}
int i = 0;
while (i != 10) {
    i += 3;   // 0, 3, 6, 9, 12... skips right past 10 -> runs forever
}

Yang pertama macet karena i tidak pernah diperbarui. Yang kedua macet karena counter melompati nilai persis yang dicari kondisinya, jadi utamakan < atau <= daripada != kalau langkahnya mungkin tidak mendarat tepat di nilai itu. while (true) tidak masalah asalkan punya break yang pasti tercapai; kalau tidak disengaja, itu hanyalah bug.

Berikutnya: Loop for-each

Loop while adalah alat yang tepat saat kamu mengulang sampai sebuah kondisi berubah dan tidak ada hitungan yang jelas. Tapi kalau kamu hanya ingin mengunjungi setiap elemen array atau list, tanpa indeks dan tanpa kondisi yang perlu diurus, ada cara yang lebih rapi lagi: loop for-each versi enhanced. Itu topik halaman berikutnya.

Pertanyaan yang sering diajukan

Apa perbedaan while dan do-while di Java?

Loop while mengecek kondisinya sebelum putaran pertama, jadi badannya bisa saja tidak berjalan sama sekali. Loop do-while menjalankan badannya sekali lebih dulu, lalu mengecek kondisinya di bagian bawah, jadi selalu berjalan minimal sekali. Pakai do-while kalau pekerjaannya harus dilakukan dulu sebelum kamu bisa memutuskan apakah perlu diulang (misalnya meminta input, lalu memvalidasinya).

Kapan sebaiknya memakai while loop alih-alih for loop di Java?

Pakai loop while saat kamu tidak punya counter yang jelas dan hanya ingin mengulang sampai suatu kondisi berubah: membaca input sampai pengguna mengetik quit, menunggu sampai sebuah nilai siap, atau memproses antrean sampai kosong. Pakai loop for kalau kamu tahu jumlah perulangannya atau punya indeks yang jelas untuk dihitung.

Bagaimana cara menghentikan infinite while loop di Java?

Pastikan ada sesuatu di dalam badan loop yang pada akhirnya membuat kondisinya bernilai false (mengurangi counter, memajukan penunjuk, mengubah flag). Untuk loop while (true) yang memang disengaja, taruh break di dalamnya yang dijaga oleh if. Kalau sebuah loop macet, penyebab biasanya adalah lupa memperbarui variabel yang menjadi dasar kondisinya.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai