Langsung ke konten
KamusNgoding
Pemula Java 3 menit baca

Percabangan dan Perulangan di Java

#java #if-else #switch #for #enhanced-for #while #do-while #break #continue #perulangan

Logika percabangan dan perulangan adalah jantung dari setiap program yang berguna. Bayangkan aplikasi perbankan — sistem harus memutuskan apakah saldo cukup sebelum transfer, lalu mengulang proses verifikasi untuk setiap transaksi dalam laporan bulanan. Di Java, ini dilakukan dengan struktur if/else, switch, for, while, dan do-while. Java juga memiliki enhanced for loop (for-each) yang sangat bersih untuk iterasi koleksi.

Percabangan: if / else

if Dasar

public class ContohIf {
    public static void main(String[] args) {
        int saldo = 500_000;
        int transfer = 200_000;

        if (saldo >= transfer) {
            System.out.println("Transfer berhasil");
            System.out.println("Saldo tersisa: " + (saldo - transfer));
        }
    }
}
// Output:
// Transfer berhasil
// Saldo tersisa: 300000

if / else

int nilai = 55;

if (nilai >= 60) {
    System.out.println("Lulus");
} else {
    System.out.println("Tidak lulus");
    System.out.println("Nilai kurang: " + (60 - nilai) + " poin");
}
// Output:
// Tidak lulus
// Nilai kurang: 5 poin

if / else if / else

int jam = 14;
String salam;

if (jam >= 5 && jam < 12) {
    salam = "Selamat Pagi";
} else if (jam >= 12 && jam < 15) {
    salam = "Selamat Siang";
} else if (jam >= 15 && jam < 18) {
    salam = "Selamat Sore";
} else {
    salam = "Selamat Malam";
}

System.out.println(salam + ", pengguna!");
// Output: Selamat Siang, pengguna!

Percabangan: switch

switch Klasik

int hari = 3;

switch (hari) {
    case 1:
        System.out.println("Senin");
        break;
    case 2:
        System.out.println("Selasa");
        break;
    case 3:
        System.out.println("Rabu");
        break;
    case 6:
    case 7:
        System.out.println("Akhir Pekan");
        break;
    default:
        System.out.println("Hari tidak valid");
}
// Output: Rabu

switch Expression (Java 14+)

Java modern memiliki sintaks switch yang lebih ringkas:

int bulan = 4;
int jumlahHari = switch (bulan) {
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    case 4, 6, 9, 11           -> 30;
    case 2                     -> 28;
    default -> throw new IllegalArgumentException("Bulan tidak valid: " + bulan);
};

System.out.println("Bulan ke-" + bulan + " memiliki " + jumlahHari + " hari");
// Output: Bulan ke-4 memiliki 30 hari

switch dengan String (Java 7+)

String hari = "Senin";

switch (hari) {
    case "Sabtu":
    case "Minggu":
        System.out.println("Akhir pekan — libur!");
        break;
    case "Senin":
    case "Jumat":
        System.out.println("Awal/akhir minggu kerja");
        break;
    default:
        System.out.println("Hari kerja biasa");
}
// Output: Awal/akhir minggu kerja

Perulangan: for

// Dasar
for (int i = 1; i <= 5; i++) {
    System.out.print(i + " ");
}
System.out.println();
// Output: 1 2 3 4 5

// Menghitung mundur
for (int i = 5; i >= 1; i--) {
    System.out.print(i + " ");
}
System.out.println();
// Output: 5 4 3 2 1

// Tabel perkalian
for (int i = 1; i <= 5; i++) {
    System.out.printf("%d x %d = %d%n", i, 3, i * 3);
}
// Output:
// 1 x 3 = 3
// 2 x 3 = 6
// 3 x 3 = 9
// 4 x 3 = 12
// 5 x 3 = 15

Perulangan: Enhanced for (for-each)

Cara paling bersih untuk iterasi array atau koleksi:

// Iterasi array
String[] bahasa = {"Java", "Python", "JavaScript", "Kotlin"};

for (String lang : bahasa) {
    System.out.println("- " + lang);
}
// Output:
// - Java
// - Python
// - JavaScript
// - Kotlin

// Menghitung total dari array
int[] nilai = {85, 92, 78, 95, 88};
int total = 0;

for (int n : nilai) {
    total += n;
}

System.out.printf("Total: %d, Rata-rata: %.1f%n", total, (double) total / nilai.length);
// Output: Total: 438, Rata-rata: 87.6

Perulangan: while

// Dasar
int angka = 1;
while (angka <= 5) {
    System.out.print(angka + " ");
    angka++;
}
System.out.println();
// Output: 1 2 3 4 5

// Validasi input
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);

System.out.print("Masukkan angka positif: ");
int input = scanner.nextInt();

while (input <= 0) {
    System.out.print("Harus positif! Coba lagi: ");
    input = scanner.nextInt();
}

System.out.println("Angka valid: " + input);

Perulangan: do-while

Menjamin eksekusi minimal sekali — cocok untuk menu:

Scanner scanner = new Scanner(System.in);
int pilihan;

do {
    System.out.println("\n=== Menu Transaksi ===");
    System.out.println("1. Cek Saldo");
    System.out.println("2. Transfer");
    System.out.println("3. Top Up");
    System.out.println("4. Keluar");
    System.out.print("Pilihan: ");
    pilihan = scanner.nextInt();

    switch (pilihan) {
        case 1 -> System.out.println("Saldo: Rp 1.500.000");
        case 2 -> System.out.println("Proses transfer...");
        case 3 -> System.out.println("Proses top up...");
        case 4 -> System.out.println("Terima kasih!");
        default -> System.out.println("Pilihan tidak valid!");
    }
} while (pilihan != 4);

break, continue, dan labeled break

break dan continue

// break — keluar dari loop
for (int i = 1; i <= 10; i++) {
    if (i == 6) break;
    System.out.print(i + " ");
}
System.out.println();
// Output: 1 2 3 4 5

// continue — lewati iterasi ini
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) continue;
    System.out.print(i + " ");
}
System.out.println();
// Output: 1 3 5 7 9

Labeled break (Keluar dari Loop Bersarang)

outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) {
            break outer; // keluar dari kedua loop
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// Output:
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0

Pertanyaan yang Sering Diajukan

Kapan menggunakan for biasa vs enhanced for (for-each)?

Gunakan enhanced for saat kamu hanya perlu membaca elemen satu per satu tanpa memerlukan indeks. Gunakan for biasa saat kamu perlu indeks (untuk mengubah elemen, mengakses elemen sebelum/sesudah, atau iterasi tidak linear). Untuk membaca koleksi, for (String s : list) lebih bersih dan tidak bisa salah indeks.

Apa itu labeled break dan kapan menggunakannya?

Labeled break memungkinkan kamu keluar dari loop bersarang secara langsung. Tanpa label, break hanya keluar dari loop terdalam. Dengan label (outer:), break outer keluar dari loop yang diberi label tersebut. Berguna tapi jarang dibutuhkan — jika sering menggunakannya, pertimbangkan untuk memecah kode menjadi method terpisah.

Apa perbedaan switch expression -> dan switch klasik :?

Switch klasik dengan : memerlukan break untuk mencegah fall-through. Switch expression modern dengan -> tidak memiliki fall-through dan harus mengembalikan nilai (atau melempar exception). Switch expression lebih aman dan ringkas — gunakan ini untuk kode Java baru (Java 14+).

Bisakah for-each mengubah elemen array?

Untuk array tipe primitif, tidak — perubahan pada variabel loop tidak mempengaruhi array asli. Tapi untuk array yang berisi objek, kamu bisa mengubah properti objek tersebut (bukan mengganti referensinya). Jika perlu mengubah elemen array, gunakan for biasa dengan indeks.

Kesimpulan

Ringkasan struktur kontrol di Java:

StrukturKapan Digunakan
if/elsePercabangan berdasarkan kondisi
switch klasikBanyak nilai tetap dengan fall-through
switch expressionNilai tetap, modern, lebih aman (Java 14+)
forIterasi dengan counter/indeks
Enhanced forIterasi koleksi/array (lebih bersih)
whileIterasi sampai kondisi terpenuhi
do-whileIterasi minimal sekali (menu/validasi)
breakKeluar dari loop atau switch
continueLewati iterasi saat ini
Labeled breakKeluar dari loop bersarang

Artikel sebelumnya: Operator dan Ekspresi di Java — cara melakukan operasi di Java.

Langkah selanjutnya: Method di Java — cara membuat method untuk mengorganisir kode yang lebih bersih dan reusable.

Artikel Terkait