Komputer sangat unggul dalam mengerjakan hal yang sama berulang kali tanpa lelah. Pada pertemuan ini kita belajar instruksi perulangan (for, while, do-while), cara mengendalikannya dengan break dan continue, serta membuat pola dan program interaktif dengan nested loop.

Pendahuluan

Tujuan Pembelajaran

Setelah pertemuan ini, kamu diharapkan mampu:

  • Menggunakan for, while, dan do-while pada kasus yang sesuai.
  • Mengendalikan perulangan dengan break, continue, dan label.
  • Membuat nested loop untuk pola dan tabel.
  • Menghindari kesalahan umum seperti infinite loop dan off-by-one.
  • Menggabungkan perulangan dengan kondisi dan validasi input (menu interaktif).

Alokasi Waktu Pertemuan Ini

Sesi Topik Durasi
Materi 1 Review & konsep perulangan 10 menit
Materi 2 Perulangan for 25 menit
Materi 3 Perulangan while 15 menit
Materi 4 Perulangan do-while 10 menit
Materi 5 break, continue, dan label 15 menit
Materi 6 Nested loop & pola 20 menit
Materi 7 Kesalahan umum pada perulangan 10 menit
Materi 8 Studi kasus: menu interaktif & tebak angka 15 menit
Total Materi 2 jam
Latihan Latihan Mandiri 1 jam
Total 3 jam

Review Singkat

  • if - else if - else dan switch expression untuk memilih alur program.
  • hasNextInt() untuk memvalidasi input sebelum dibaca.
  • Operator ++, --, += untuk mengubah nilai variabel.

Konsep Perulangan

Tanpa perulangan, mencetak “Halo” sebanyak 5 kali harus menulis println lima kali, dan 1000 kali tentu tidak masuk akal. Perulangan memungkinkan sebuah blok kode dijalankan berulang selama kondisi terpenuhi.

Setiap perulangan memiliki tiga komponen:

  1. Inisialisasi: nilai awal penghitung.
  2. Kondisi: syarat agar perulangan tetap berjalan.
  3. Update: perubahan penghitung agar kondisi akhirnya false.
Perulangan Cocok Digunakan Saat
for Jumlah pengulangan sudah diketahui
while Jumlah pengulangan tidak diketahui, kondisi diperiksa di awal
do-while Blok kode minimal dijalankan sekali, kondisi diperiksa di akhir

Perulangan for

1
2
3
for (inisialisasi; kondisi; update) {
// blok kode yang diulang
}
1
2
3
4
5
6
7
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("Perulangan ke-" + i);
}
}
}

Alur eksekusi: int i = 1 dijalankan sekali, kemudian kondisi i <= 5 diperiksa. Jika true, blok dijalankan, lalu i++, dan kembali memeriksa kondisi. Jika false, perulangan berhenti.

Variasi for

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Menghitung mundur
for (int i = 10; i >= 1; i--) {
System.out.print(i + " ");
}
System.out.println(); // 10 9 8 7 6 5 4 3 2 1

// Loncat 2 (bilangan genap 2 sampai 20)
for (int i = 2; i <= 20; i += 2) {
System.out.print(i + " ");
}
System.out.println(); // 2 4 6 ... 20

// Menjumlahkan 1 sampai 100 (akumulator)
int total = 0;
for (int i = 1; i <= 100; i++) {
total += i;
}
System.out.println("Total: " + total); // 5050

Variabel i hanya dikenal di dalam perulangan for (scope). Jika hasilnya dibutuhkan setelah perulangan, deklarasikan variabel penampung (seperti total) di luar.

Perulangan pada String

1
2
3
4
5
6
7
8
9
10
String kata = "Java";

for (int i = 0; i < kata.length(); i++) {
System.out.println("Indeks " + i + " = " + kata.charAt(i));
}

// Versi for-each untuk setiap karakter
for (char huruf : kata.toCharArray()) {
System.out.print(huruf + "-"); // J-a-v-a-
}

Bentuk for (tipe item : kumpulan) disebut enhanced for atau for-each, akan dibahas lebih dalam pada Pertemuan 5 bersama array.

Perulangan while

Kondisi diperiksa sebelum blok dijalankan. Jika kondisi sejak awal false, blok tidak dijalankan sama sekali.

1
2
3
4
5
int i = 1;
while (i <= 5) {
System.out.println("Hitungan: " + i);
i++; // jangan lupa update!
}

while cocok ketika jumlah pengulangan bergantung pada data. Contoh: menjumlahkan digit sebuah bilangan.

1
2
3
4
5
6
7
8
int angka = 12345;
int jumlahDigit = 0;

while (angka > 0) {
jumlahDigit += angka % 10; // ambil digit terakhir
angka /= 10; // buang digit terakhir
}
System.out.println("Jumlah digit: " + jumlahDigit); // 15

Contoh lain, membalik sebuah bilangan:

1
2
3
4
5
6
7
8
int asli = 1234;
int terbalik = 0;

while (asli > 0) {
terbalik = terbalik * 10 + asli % 10;
asli /= 10;
}
System.out.println(terbalik); // 4321

Perulangan do-while

Kondisi diperiksa setelah blok dijalankan, sehingga blok pasti dijalankan minimal satu kali. Sangat cocok untuk menu dan validasi input.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int nilai;

do {
System.out.print("Masukkan nilai (0-100): ");
while (!input.hasNextInt()) {
System.out.print("Harus angka! Ulangi: ");
input.next(); // buang input yang salah
}
nilai = input.nextInt();
} while (nilai < 0 || nilai > 100);

System.out.println("Nilai valid: " + nilai);
input.close();
}
}

Perhatikan titik koma ; setelah while (...) pada do-while, ini wajib.

break, continue, dan Label

Kata Kunci Fungsi
break Menghentikan perulangan seluruhnya
continue Melewati sisa blok pada iterasi ini, lanjut ke iterasi berikutnya
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// break: berhenti saat menemukan angka pertama yang habis dibagi 7
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
System.out.println("Ditemukan: " + i); // 7
break;
}
}

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

Label pada Nested Loop

break biasa hanya keluar dari perulangan terdalam. Gunakan label untuk keluar dari perulangan luar:

1
2
3
4
5
6
7
8
9
luar:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
if (i * j == 12) {
System.out.println("Ketemu: " + i + " x " + j);
break luar; // keluar dari kedua perulangan
}
}
}

Nested Loop dan Pola

Nested loop adalah perulangan di dalam perulangan. Perulangan luar biasanya mewakili baris, perulangan dalam mewakili kolom.

Tabel Perkalian

1
2
3
4
5
6
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
System.out.printf("%4d", i * j);
}
System.out.println(); // pindah baris setelah satu baris selesai
}

Output:

1
2
3
4
5
1   2   3   4   5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25

Pola Segitiga

1
2
3
4
5
6
7
8
int tinggi = 5;

for (int baris = 1; baris <= tinggi; baris++) {
for (int kolom = 1; kolom <= baris; kolom++) {
System.out.print("*");
}
System.out.println();
}

Output:

1
2
3
4
5
*
**
***
****
*****

Pola Piramida

1
2
3
4
5
6
int tinggi = 4;

for (int baris = 1; baris <= tinggi; baris++) {
System.out.print(" ".repeat(tinggi - baris));
System.out.println("*".repeat(2 * baris - 1));
}

Output:

1
2
3
4
   *
***
*****
*******

Cara berpikir untuk pola: tentukan berapa baris, lalu pada setiap baris tentukan berapa spasi dan berapa simbol sebagai fungsi dari nomor baris.

Kesalahan Umum pada Perulangan

Kesalahan Contoh Akibat
Infinite loop: lupa update while (i <= 5) { ... } tanpa i++ Program tidak pernah berhenti (hentikan dengan Ctrl + C)
Off-by-one for (i = 0; i <= 5; i++) padahal ingin 5 kali Berjalan 6 kali
Titik koma setelah for for (...); Blok { } hanya dijalankan sekali setelah perulangan
Mengubah variabel loop di dalam blok for (...) { i += 2; } Perulangan melompat tak terduga
Indeks melebihi batas i <= kata.length() StringIndexOutOfBoundsException

Tips debugging: tambahkan System.out.println untuk mencetak nilai variabel di setiap iterasi dan cek apakah berubah sesuai harapan.

Studi Kasus

Menu yang terus tampil sampai pengguna memilih keluar. Pada pertemuan sebelumnya menu hanya berjalan sekali.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int pilihan;

do {
System.out.println("\n=== MENU ===");
System.out.println("1. Sapa");
System.out.println("2. Hitung kuadrat");
System.out.println("3. Keluar");
System.out.print("Pilihan: ");

if (!input.hasNextInt()) {
System.out.println("Masukkan angka!");
input.next();
pilihan = 0;
continue; // lompat ke pemeriksaan kondisi do-while
}
pilihan = input.nextInt();

switch (pilihan) {
case 1 -> System.out.println("Halo, selamat belajar Java!");
case 2 -> {
System.out.print("Masukkan angka: ");
int n = input.nextInt();
System.out.println(n + " x " + n + " = " + (n * n));
}
case 3 -> System.out.println("Sampai jumpa!");
default -> System.out.println("Pilihan tidak tersedia.");
}
} while (pilihan != 3);

input.close();
}
}

Game Tebak Angka

Komputer memilih angka rahasia 1-100, pemain menebak sampai benar dengan petunjuk “terlalu besar” atau “terlalu kecil”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Random;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Random acak = new Random();

int rahasia = acak.nextInt(1, 101); // 1 sampai 100 (batas atas eksklusif)
int tebakan = 0;
int percobaan = 0;

System.out.println("Tebak angka 1-100!");

while (tebakan != rahasia) {
System.out.print("Tebakanmu: ");
tebakan = input.nextInt();
percobaan++;

if (tebakan < rahasia) {
System.out.println("Terlalu kecil!");
} else if (tebakan > rahasia) {
System.out.println("Terlalu besar!");
}
}

System.out.println("Benar! Kamu berhasil dalam " + percobaan + " percobaan.");
input.close();
}
}

Mengecek Bilangan Prima

Bilangan prima hanya habis dibagi 1 dan dirinya sendiri. Cukup periksa pembagi sampai akar kuadrat bilangannya.

1
2
3
4
5
6
7
8
9
10
int n = 29;
boolean prima = n > 1;

for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
prima = false;
break; // sudah pasti bukan prima, tidak perlu lanjut
}
}
System.out.println(n + (prima ? " adalah bilangan prima" : " bukan bilangan prima"));

Faktorial dan Fibonacci

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Faktorial: 5! = 5 x 4 x 3 x 2 x 1 = 120
int n = 5;
long faktorial = 1; // gunakan long karena nilainya cepat membesar
for (int i = 2; i <= n; i++) {
faktorial *= i;
}
System.out.println(n + "! = " + faktorial);

// Fibonacci: 0 1 1 2 3 5 8 13 21 34
long a = 0, b = 1;
for (int i = 0; i < 10; i++) {
System.out.print(a + " ");
long berikut = a + b;
a = b;
b = berikut;
}

Catatan: long hanya mampu menampung hingga 20!. Untuk faktorial yang lebih besar gunakan java.math.BigInteger.

Ringkasan

Kebutuhan Gunakan
Jumlah ulangan diketahui for
Ulangi selama kondisi, belum tahu berapa kali while
Minimal sekali (menu, validasi input) do-while
Berhenti lebih awal break
Lewati satu iterasi continue
Tabel, matriks, pola Nested loop

Latihan

Kerjakan latihan berikut untuk mengetes pemahamanmu. Total durasi latihan adalah 60 menit.

No Latihan Estimasi
1 Deret Bilangan 10 menit
2 Tabel Perkalian 10 menit
3 Faktorial & Fibonacci 10 menit
4 Pola Bintang & Angka 10 menit
5 Bilangan Prima 10 menit
6 Mini Project: ATM Berulang & Tebak Angka 10 menit
Total 60 menit

Latihan 1: Deret Bilangan (estimasi 10 menit)

Buat program yang meminta bilangan bulat N, lalu menampilkan:

  1. Deret 1 sampai N.
  2. Hanya bilangan genap dari 1 sampai N.
  3. Total penjumlahan 1 sampai N dan rata-ratanya.
  4. Hitung mundur dari N sampai 1, kemudian cetak "Selesai!".

Latihan 2: Tabel Perkalian (estimasi 10 menit)

  1. Input angka N, tampilkan tabel perkalian N dari 1 sampai 10:
    1
    2
    3
    7 x 1 = 7
    7 x 2 = 14
    ...
  2. Tampilkan tabel perkalian 1 sampai 9 dalam bentuk matriks (nested loop) dengan printf("%4d").

Latihan 3: Faktorial & Fibonacci (estimasi 10 menit)

  1. Input N, hitung dan tampilkan N! (gunakan long).
  2. Input N, tampilkan N suku pertama deret Fibonacci.
  3. Hitung berapa jumlah digit dari bilangan yang diinput (gunakan while).
  4. Periksa apakah sebuah bilangan merupakan palindrom (contoh: 12321) dengan membaliknya menggunakan while.

Latihan 4: Pola Bintang & Angka (estimasi 10 menit)

Input tinggi pola N (contoh N = 5), lalu cetak pola berikut:

1
2
3
4
5
6
Pola A:         Pola B:         Pola C:
***** 1 *
**** 12 ***
*** 123 *****
** 1234 *******
* 12345 *********

Pola A: segitiga bintang terbalik. Pola B: segitiga angka rata kiri. Pola C: piramida bintang.

Latihan 5: Bilangan Prima (estimasi 10 menit)

  1. Input N, tampilkan semua bilangan prima dari 2 sampai N.
  2. Tampilkan jumlah seluruh bilangan prima yang ditemukan.
  3. Tantangan: tampilkan faktorisasi prima dari sebuah bilangan, contoh 60 = 2 x 2 x 3 x 5.

Latihan 6: Mini Project (estimasi 10 menit)

Pilih salah satu:

A. ATM Berulang: lanjutkan ATM dari pertemuan sebelumnya. Menu ditampilkan terus-menerus dengan do-while hingga pengguna memilih keluar. Tambahkan fitur riwayat sederhana: jumlah transaksi yang sudah dilakukan.

B. Tebak Angka Plus: kembangkan game tebak angka:

  • Batasi maksimal 7 kesempatan menebak.
  • Validasi input menggunakan hasNextInt().
  • Setelah selesai, tanyakan "Main lagi? (y/n)" dan ulangi permainan jika y.
  • Tampilkan skor berdasarkan sisa kesempatan.

Tantangan tambahan: buat kalkulator yang menjumlahkan angka-angka yang diinput pengguna terus-menerus hingga pengguna mengetik 0, lalu tampilkan jumlah, banyak data, dan rata-ratanya.