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:
| Struktur | Kapan Digunakan |
|---|---|
if/else | Percabangan berdasarkan kondisi |
switch klasik | Banyak nilai tetap dengan fall-through |
switch expression | Nilai tetap, modern, lebih aman (Java 14+) |
for | Iterasi dengan counter/indeks |
Enhanced for | Iterasi koleksi/array (lebih bersih) |
while | Iterasi sampai kondisi terpenuhi |
do-while | Iterasi minimal sekali (menu/validasi) |
break | Keluar dari loop atau switch |
continue | Lewati iterasi saat ini |
Labeled break | Keluar 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.