Bayangkan program yang meminta nilai ujian dari pengguna dan menolak angka di luar rentang 0-100. Proses validasi semacam ini memiliki satu sifat penting: permintaan input harus terjadi sekurang-kurangnya sekali — bagaimana program bisa tahu inputnya salah sebelum input dibaca? Kedua anggota keluarga loop sebelumnya kurang pas: for menghitung iterasi yang belum diketahui, sedangkan while menguji kondisi lebih dulu sehingga badannya bisa terlewati sepenuhnya. Java menyediakan do-while untuk pola ini: badan loop berjalan terlebih dahulu, kondisi diperiksa setelahnya, sehingga satu iterasi pertama dijamin terjadi. Chapter ini membahas semantiknya, penerapan pada validasi input, dan posisinya di antara loop-loop lain.
Badan Berjalan Terlebih Dahulu #
Bentuknya menempatkan kata kunci while beserta kondisi di bawah badan loop, ditutup titik koma:
do {
// badan loop: dijamin berjalan minimal satu kali
} while (kondisi);Program berikut membandingkan while dan do-while dengan kondisi yang sama-sama false sejak awal:
public class SekaliMinimal {
public static void main(String[] args) {
int suhu = 25;
System.out.println("-- while, kondisi diuji lebih dulu --");
while (suhu > 30) {
System.out.println("Menyalakan pendingin, suhu " + suhu);
}
System.out.println("while selesai: nol iterasi.");
System.out.println("-- do-while, badan berjalan lebih dulu --");
do {
System.out.println("Membaca suhu sekali: " + suhu);
} while (suhu > 30);
System.out.println("do-while selesai: satu iterasi.");
}
}Output yang Dihasilkan:
-- while, kondisi diuji lebih dulu --
while selesai: nol iterasi.
-- do-while, badan berjalan lebih dulu --
Membaca suhu sekali: 25
do-while selesai: satu iterasi.Kedua loop membaca variabel suhu yang sama bernilai 25, dan kondisi keduanya suhu > 30 — bernilai false. Hasilnya berbeda: while menguji kondisi sebelum iterasi pertama, menemukan false, dan melewati badan sepenuhnya (nol iterasi). do-while menjalankan badan lebih dulu — sensor suhu dibaca satu kali — baru menguji kondisi; karena false, loop berhenti setelah tepat satu iterasi. Secara teknis, do-while dijamin menjalankan badannya sekurang-kurangnya satu kali, karena ujian pertama baru terjadi setelah badan selesai.
Validasi Input dengan do-while #
Penerapan paling natural dari jaminan “minimal sekali” adalah validasi input. Program berikut meminta nilai ujian berulang-ulang sampai pengguna memasukkan angka yang sah; dijalankan dengan masukan tetap 105, -3, lalu 80:
import java.util.Scanner;
public class ValidasiNilai {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int nilai;
do {
System.out.print("Masukkan nilai ujian (0-100): ");
nilai = input.nextInt();
if (nilai < 0 || nilai > 100) {
System.out.println("Nilai " + nilai + " tidak sah, coba lagi.");
}
} while (nilai < 0 || nilai > 100);
input.close();
System.out.println("Nilai diterima: " + nilai);
}
}Output yang Dihasilkan:
Masukkan nilai ujian (0-100): Nilai 105 tidak sah, coba lagi.
Masukkan nilai ujian (0-100): Nilai -3 tidak sah, coba lagi.
Masukkan nilai ujian (0-100): Nilai diterima: 80Mari kita ikuti siklus lengkapnya pada masukan tersebut:
- Baris 8 (
do {): badan loop langsung berjalan tanpa pengujian apa pun — prompt “Masukkan nilai ujian” tampil dannextInt()membaca105. - Baris 11-13 (
if (nilai < 0 || nilai > 100)): pemeriksaan validitas menolak105karena melampaui 100; pesan penolakan tercetak, lalu badan loop selesai. - Baris 14 (
} while (nilai < 0 || nilai > 100);): kondisi dievaluasi setelah badan —105tidak sah, hasiltrue, loop berputar kembali. Iterasi kedua membaca-3(ditolak karena negatif), iterasi ketiga membaca80. - Iterasi keempat tidak terjadi: setelah
80terbaca, pemeriksaan validitas tidak mencetak penolakan, kondisiwhilebernilaifalse, dan eksekusi jatuh keluar loop menuju barisNilai diterima: 80. - Deklarasi di luar loop: variabel
nilaidideklarasikan di luar loop agar masih terbaca setelah loop berakhir — penerapan langsung aturan scope dari Section Variabel dan Tipe Data.
Perhatikan bahwa logika while dan pemeriksaan if di badan memakai kondisi yang sama persis. Penulisannya memang lazim begitu: satu ekspresi untuk “apa itu sah?”, dipakai dua tempat — menolak di dalam, mengulang di bawah.
Kapan Memilih do-while #
Pola penggunaan do-while lebih sempit daripada while karena jaminan satu-iterasi hanya bermanfaat saat badan memang harus berjalan dulu. Tiga ranah klasiknya: validasi input seperti contoh di atas, menu interaktif yang tampil minimal sekali lalu bertanya “ulang?”, serta permainan ulangi-tarung yang minimal memainkan satu ronde sebelum menanyakan lanjut atau berhenti. Untuk pola sentinel dari chapter sebelumnya — di mana input pertama dibaca sebelum loop — while tetap lebih tepat karena pengujian pertama memang bisa langsung false.
Keluarga loop kini lengkap: for untuk hitungan pasti, enhanced for untuk menjelajahi kumpulan, while untuk “selama masih”, dan do-while untuk “sekali dulu, baru selama masih”. Alur yang tersisa adalah kendali di tengah loop — berhenti seketika saat hasil sudah cukup, atau melompati iterasi yang tidak relevan. Chapter berikutnya membahas break dan continue, dua kata kunci pengatur ritme perulangan.
Referensi #
- JLS SE25 §14.13: The do Statement
- Oracle Tutorial: The while and do-while Statements
- Java SE25 API: java.util.Scanner
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
SekaliMinimal.java
Unduh berkaspublic class SekaliMinimal {
public static void main(String[] args) {
int suhu = 25;
System.out.println("-- while, kondisi diuji lebih dulu --");
while (suhu > 30) {
System.out.println("Menyalakan pendingin, suhu " + suhu);
}
System.out.println("while selesai: nol iterasi.");
System.out.println("-- do-while, badan berjalan lebih dulu --");
do {
System.out.println("Membaca suhu sekali: " + suhu);
} while (suhu > 30);
System.out.println("do-while selesai: satu iterasi.");
}
}
ValidasiNilai.java
Unduh berkasimport java.util.Scanner;
public class ValidasiNilai {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int nilai;
do {
System.out.print("Masukkan nilai ujian (0-100): ");
nilai = input.nextInt();
if (nilai < 0 || nilai > 100) {
System.out.println("Nilai " + nilai + " tidak sah, coba lagi.");
}
} while (nilai < 0 || nilai > 100);
input.close();
System.out.println("Nilai diterima: " + nilai);
}
}