Algorithms and Programming Java 3
Sejauh ini program kita berjalan lurus dari atas ke bawah. Pada pertemuan ini kita belajar instruksi kondisional, yaitu cara membuat program mengambil keputusan dan menjalankan alur yang berbeda sesuai kondisi, mulai dari if-else hingga switch expression dan pattern matching pada Java modern.
Pendahuluan
Tujuan Pembelajaran
Setelah pertemuan ini, kamu diharapkan mampu:
- Menggunakan
if,else if, danelseuntuk percabangan. - Menggabungkan kondisi dengan operator logika dan membuat nested if.
- Menggunakan operator ternary untuk kondisi sederhana.
- Menggunakan
switchklasik danswitch expression(Java 14+). - Mengenal pattern matching pada
instanceofdanswitch(Java 21). - Memvalidasi input pengguna sebelum diproses.
Alokasi Waktu Pertemuan Ini
| Sesi | Topik | Durasi |
|---|---|---|
| Materi 1 | Review & konsep percabangan | 10 menit |
| Materi 2 | if, else if, else |
20 menit |
| Materi 3 | Nested if & kombinasi kondisi | 10 menit |
| Materi 4 | Operator ternary | 5 menit |
| Materi 5 | switch klasik |
10 menit |
| Materi 6 | switch expression & yield |
20 menit |
| Materi 7 | Pattern matching (instanceof & switch) |
15 menit |
| Materi 8 | Validasi input dengan hasNextInt() |
10 menit |
| Materi 9 | Studi kasus: kalkulator menu | 20 menit |
| Total Materi | 2 jam | |
| Latihan | Latihan Mandiri | 1 jam |
| Total | 3 jam |
Review Singkat
- Operator perbandingan (
==,!=,>,<,>=,<=) menghasilkanboolean. - Operator logika:
&&(AND),||(OR),!(NOT). - String dibandingkan dengan
.equals(), bukan==.
Konsep Percabangan
Percabangan membuat program memilih jalur eksekusi berdasarkan sebuah kondisi bernilai boolean. Bayangkan sebuah persimpangan: jika kondisi true ikuti jalur A, jika tidak ikuti jalur B.
1 | ┌─────────────┐ |
Pernyataan if, else if, else
if
1 | int nilai = 80; |
if - else
1 | int nilai = 60; |
if - else if - else
Digunakan jika ada lebih dari dua kemungkinan. Java memeriksa dari atas ke bawah dan hanya menjalankan blok pertama yang kondisinya true.
1 | public class Main { |
Urutan kondisi sangat penting. Jika nilai >= 40 ditulis paling atas, nilai 95 akan terhenti di grade D.
Kesalahan Umum pada if
| Kesalahan | Contoh | Dampak |
|---|---|---|
Memakai = bukan == |
if (x = 5) |
Compile error (int tidak dapat menjadi boolean) |
| Titik koma setelah if | if (x > 5); |
Blok setelahnya selalu dijalankan |
| Tanpa kurung kurawal | if (x > 5) a(); b(); |
b() selalu dijalankan |
Membandingkan String dengan == |
if (kata == "ya") |
Hasil tidak dapat diandalkan |
Saran: selalu gunakan kurung kurawal { } meskipun hanya satu baris, agar kode aman saat dikembangkan.
Nested if dan Kombinasi Kondisi
Nested if adalah if di dalam if. Namun, kondisi yang saling terkait sering dapat disederhanakan dengan operator logika.
1 | int umur = 20; |
Contoh lain, menentukan tahun kabisat: tahun kabisat jika habis dibagi 4 tetapi tidak habis dibagi 100, atau habis dibagi 400.
1 | int tahun = 2028; |
Operator Ternary
Bentuk singkat dari if-else yang menghasilkan nilai:
1 | kondisi ? nilaiJikaTrue : nilaiJikaFalse |
1 | int nilai = 78; |
Gunakan hanya untuk kondisi sederhana. Ternary yang bersarang berlapis-lapis sulit dibaca, gunakan if-else if sebagai gantinya.
switch Klasik
switch cocok ketika sebuah variabel dibandingkan dengan banyak nilai tetap.
1 | int hari = 3; |
Hal penting pada switch klasik:
breakwajib ditulis di akhir tiapcase. Jika lupa, program akan fall-through (lanjut menjalankan case berikutnya).defaultdijalankan jika tidak adacaseyang cocok.- Tipe yang didukung:
byte,short,char,int,String, danenum(serta tipe lain melalui pattern matching).
1 | int hari = 2; |
switch Expression (Java 14+)
Java modern menyediakan switch dengan sintaks panah -> yang lebih ringkas, tanpa fall-through, dan dapat menghasilkan nilai.
1 | int bulan = 2; |
Beberapa nilai dalam satu case dipisah koma:
1 | int hariDalamBulan = switch (bulan) { |
Jika satu case butuh beberapa baris kode, gunakan blok dan yield untuk mengembalikan nilai:
1 | int nilai = 88; |
switch sebagai pernyataan (bukan ekspresi) juga bisa memakai panah, misalnya untuk menjalankan aksi:
1 | String perintah = "stop"; |
Perbandingan:
switch klasik |
switch expression |
|
|---|---|---|
| Sintaks | case x: + break |
case x -> |
| Fall-through | Ya (rawan lupa break) |
Tidak |
| Menghasilkan nilai | Tidak | Ya |
| Wajib mencakup semua kemungkinan | Tidak | Ya (perlu default atau semua kasus enum) |
Untuk program baru, utamakan switch expression.
Pattern Matching (Java 21)
Pattern matching memungkinkan kita memeriksa tipe sebuah objek sekaligus mengambil nilainya. Pembahasan ini sebagai gambaran Java modern (method dibahas lebih lengkap pada Pertemuan 6).
Pattern Matching untuk instanceof
1 | Object data = "Java 25"; |
Variabel teks otomatis tersedia tanpa perlu casting manual.
Pattern Matching pada switch
1 | public class Main { |
Output:1
2
3
4
5Bilangan besar: 250
Bilangan: 7
Teks dengan 4 karakter
Tipe lain: 3.14
Tidak ada nilai
Kata kunci when menambahkan syarat tambahan (guard) pada sebuah pola. Urutan case penting: pola yang lebih spesifik harus ditulis lebih dulu.
Validasi Input dengan Scanner
Jika pengguna mengetik huruf saat program meminta angka, nextInt() akan melempar InputMismatchException. Gunakan hasNextInt() untuk memeriksa input sebelum membacanya.
1 | import java.util.Scanner; |
Method validasi lain: hasNextDouble(), hasNextLine(), dan hasNext(). Pada pertemuan berikutnya, validasi ini akan dipadukan dengan perulangan agar program terus meminta input hingga benar.
Studi Kasus: Kalkulator Menu
Program kalkulator yang memilih operasi dengan switch expression dan memvalidasi pembagian dengan nol.
1 | import java.util.Locale; |
Poin yang perlu diperhatikan:
input.next().charAt(0)mengambil karakter pertama dari kata yang diketik.Double.NaN(Not a Number) digunakan sebagai penanda “tidak ada hasil”, dicek denganDouble.isNaN().switchdipakai sebagai ekspresi sehingga hasilnya langsung disimpan ke variabelhasil.
Ringkasan
| Kebutuhan | Gunakan |
|---|---|
| Satu kondisi, dua jalur | if - else |
| Banyak kondisi berurutan / rentang nilai | if - else if - else |
| Memilih nilai sederhana | Operator ternary ? : |
| Banyak nilai tetap (menu, hari, bulan) | switch expression -> |
| Memeriksa tipe objek | instanceof / switch pattern matching |
| Mencegah error input | hasNextInt() / hasNextDouble() |
Latihan
Kerjakan latihan berikut untuk mengetes pemahamanmu. Total durasi latihan adalah 60 menit.
| No | Latihan | Estimasi |
|---|---|---|
| 1 | Positif, Negatif, Nol & Ganjil Genap | 10 menit |
| 2 | Penentuan Kelulusan & Grade | 10 menit |
| 3 | Nama Hari & Jumlah Hari dalam Bulan | 10 menit |
| 4 | Tahun Kabisat & Zodiak/Kategori Umur | 10 menit |
| 5 | Tarif Ongkir / Tiket dengan Diskon | 10 menit |
| 6 | Mini Project: ATM Sederhana | 10 menit |
| Total | 60 menit |
Latihan 1: Positif, Negatif, Nol & Ganjil Genap (estimasi 10 menit)
Buat program yang meminta sebuah bilangan bulat, lalu menampilkan:
- Apakah bilangan tersebut positif, negatif, atau nol.
- Apakah bilangan tersebut ganjil atau genap (jika bukan nol).
- Jika bilangan habis dibagi 3 dan 5, tampilkan
"FizzBuzz"; jika hanya habis dibagi 3 tampilkan"Fizz"; jika hanya habis dibagi 5 tampilkan"Buzz".
Latihan 2: Penentuan Kelulusan & Grade (estimasi 10 menit)
Buat program yang meminta nilai tugas, nilai UTS, dan nilai UAS.
- Nilai akhir = 30% tugas + 30% UTS + 40% UAS.
- Validasi: setiap nilai harus berada pada rentang 0-100, jika tidak tampilkan pesan error.
- Tentukan grade dengan
if - else if: A (>= 85), B (>= 70), C (>= 55), D (>= 40), E (< 40). - Mahasiswa dinyatakan lulus jika grade minimal C dan nilai UAS minimal 50.
Latihan 3: Nama Hari & Jumlah Hari dalam Bulan (estimasi 10 menit)
Gunakan switch expression:
- Input angka 1-7, tampilkan nama hari (1 = Senin … 7 = Minggu), dan keterangan
"Hari Kerja"atau"Akhir Pekan". - Input bulan (1-12) dan tahun, tampilkan jumlah hari pada bulan tersebut (perhatikan tahun kabisat untuk Februari).
Latihan 4: Kategori Umur & Tahun Kabisat (estimasi 10 menit)
- Input umur, lalu tampilkan kategori: Balita (0-5), Anak-anak (6-12), Remaja (13-17), Dewasa (18-59), Lansia (60 ke atas). Umur negatif dinyatakan tidak valid.
- Input tahun, tentukan apakah tahun tersebut kabisat menggunakan satu ekspresi boolean.
Latihan 5: Tiket dengan Diskon (estimasi 10 menit)
Sebuah bioskop menetapkan harga tiket Rp 50.000 dengan aturan:
- Hari Senin-Kamis: diskon 20%. Jumat-Minggu: harga normal.
- Pelajar (input
y/n) mendapat tambahan diskon Rp 5.000. - Anak di bawah 5 tahun gratis.
Buat program yang meminta hari (1-7), umur, dan status pelajar, lalu menampilkan harga yang harus dibayar. Gunakan kombinasi switch expression dan if.
Latihan 6: Mini Project ATM Sederhana (estimasi 10 menit)
Simulasikan sebuah ATM dengan saldo awal Rp 1.000.000. Tampilkan menu:
1 | 1. Cek saldo |
Ketentuan:
- Gunakan
switchexpression untuk memilih menu. - Tarik tunai hanya berhasil jika saldo mencukupi dan nominal kelipatan 50.000.
- Setor tunai minimal Rp 10.000.
- Validasi input menggunakan
hasNextInt(). - Untuk pertemuan ini program cukup menjalankan satu kali pilihan. Pada pertemuan berikutnya kita akan mengulang menu dengan perulangan.
Tantangan tambahan: tulis ulang Latihan 2 menggunakan switch expression dengan nilai / 10 sebagai selector.



