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:

java Bentuk umum do-while
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:

text
-- 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:

text
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: 80

Mari kita ikuti siklus lengkapnya pada masukan tersebut:

  1. Baris 8 (do {): badan loop langsung berjalan tanpa pengujian apa pun — prompt “Masukkan nilai ujian” tampil dan nextInt() membaca 105.
  2. Baris 11-13 (if (nilai < 0 || nilai > 100)): pemeriksaan validitas menolak 105 karena melampaui 100; pesan penolakan tercetak, lalu badan loop selesai.
  3. Baris 14 (} while (nilai < 0 || nilai > 100);): kondisi dievaluasi setelah badan — 105 tidak sah, hasil true, loop berputar kembali. Iterasi kedua membaca -3 (ditolak karena negatif), iterasi ketiga membaca 80.
  4. Iterasi keempat tidak terjadi: setelah 80 terbaca, pemeriksaan validitas tidak mencetak penolakan, kondisi while bernilai false, dan eksekusi jatuh keluar loop menuju baris Nilai diterima: 80.
  5. Deklarasi di luar loop: variabel nilai dideklarasikan 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 #

Berkas Sumber

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

SekaliMinimal.java

Unduh berkas
java
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.");
    }
}

ValidasiNilai.java

Unduh berkas
java
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);
    }
}