Algorithms and Programming Java 6
Seiring program semakin panjang, menulis semua kode di dalam main akan membuatnya berantakan dan berulang. Pada pertemuan terakhir ini kita belajar method (subprogram) untuk memecah program menjadi bagian-bagian kecil yang dapat dipakai ulang, rekursi, serta exception handling agar program tetap tangguh. Pertemuan ini juga menjadi penutup yang merangkum seluruh materi dasar Java dan mengenal fitur terbaru Java 25.
Pendahuluan
Tujuan Pembelajaran
Setelah pertemuan ini, kamu diharapkan mampu:
- Membuat dan memanggil method dengan parameter dan nilai kembalian.
- Memahami pass-by-value, scope variabel, overloading, dan varargs.
- Menulis method rekursif sederhana dengan base case yang benar.
- Menangani error dengan
try,catch,finally, danthrow. - Memecah program menjadi beberapa method yang masing-masing melakukan satu tugas.
- Mengenal fitur Java 25 seperti compact source file dan
IO.println.
Alokasi Waktu Pertemuan Ini
| Sesi | Topik | Durasi |
|---|---|---|
| Materi 1 | Review & konsep method | 10 menit |
| Materi 2 | Deklarasi, parameter, dan return | 20 menit |
| Materi 3 | Pass-by-value & scope | 15 menit |
| Materi 4 | Overloading & varargs | 15 menit |
| Materi 5 | Rekursi | 15 menit |
| Materi 6 | Exception handling | 20 menit |
| Materi 7 | Perancangan method yang baik | 10 menit |
| Materi 8 | Penutup: rangkuman & fitur Java 25 | 15 menit |
| Total Materi | 2 jam | |
| Latihan | Latihan Mandiri & Proyek Akhir | 1 jam |
| Total | 3 jam |
Review Singkat
Dalam lima pertemuan terakhir kita telah mempelajari: instalasi dan program pertama (Pertemuan 1), operator dan String (2), percabangan (3), perulangan (4), serta array dan ArrayList (5). Pertemuan ini menyatukan semuanya.
Konsep Method
Method (di bahasa lain disebut fungsi atau prosedur) adalah blok kode bernama yang melakukan tugas tertentu dan dapat dipanggil berkali-kali. Contoh method yang sudah kita pakai: System.out.println(), Math.sqrt(), dan input.nextInt().
Manfaat method:
- Menghindari duplikasi kode (DRY: Don’t Repeat Yourself).
- Memudahkan membaca dan merawat program.
- Memudahkan pengujian, karena setiap bagian dapat dicoba sendiri.
- Dapat dipakai ulang pada program lain.
Deklarasi Method
1 | static tipeKembalian namaMethod(tipe parameter1, tipe parameter2) { |
| Bagian | Penjelasan |
|---|---|
static |
Method dapat dipanggil langsung dari main tanpa membuat objek (akan dibahas lebih dalam pada materi OOP) |
tipeKembalian |
Tipe nilai yang dikembalikan (int, double, String, dll). Gunakan void jika tidak mengembalikan apa pun |
namaMethod |
Gunakan camelCase berupa kata kerja, contoh: hitungLuas |
| Parameter | Data masukan method, boleh kosong |
return |
Mengembalikan nilai ke pemanggil sekaligus mengakhiri method |
Method void (Tanpa Nilai Kembalian)
1 | public class Main { |
Method dengan Return Value
1 | public class Main { |
Catatan penting:
- Method yang mengembalikan nilai harus
returnpada semua kemungkinan jalur eksekusinya, jika tidak terjadi compile error. - Nilai yang dikembalikan dapat langsung dipakai dalam ekspresi:
System.out.println(tambah(1, 2) * 10);. - Method boleh ditulis di mana saja di dalam class (di atas maupun di bawah
main), karena kompiler membaca seluruh class terlebih dahulu.
Pass-by-Value dan Scope
Pass-by-Value
Java selalu memberikan salinan nilai ke parameter.
1 | static void ubah(int x) { |
Untuk array dan objek, yang disalin adalah referensinya, sehingga isi array yang sama dapat berubah:
1 | static void gandakan(int[] arr) { |
(Tambahkan import java.util.Arrays; agar kode di atas dapat dikompilasi.)
Scope Variabel
Variabel hanya dikenal di dalam blok { } tempat ia dideklarasikan.
1 | static int hitung() { |
Variabel yang dideklarasikan di luar method (pada level class) disebut field, dan dapat dipakai bersama oleh semua method static:
1 | public class Main { |
Overloading dan Varargs
Method Overloading
Beberapa method boleh memiliki nama sama asalkan daftar parameternya berbeda (jumlah atau tipe). Java memilih method yang paling cocok berdasarkan argumen.
1 | static int jumlah(int a, int b) { |
Perbedaan hanya pada tipe kembalian tidak cukup untuk overloading. Contoh nyata overloading: System.out.println() yang dapat menerima int, String, double, dan sebagainya.
Varargs
Varargs memungkinkan method menerima jumlah argumen yang tidak tetap. Di dalam method, parameter tersebut diperlakukan sebagai array.
1 | static int jumlahSemua(int... angka) { |
Parameter varargs harus berada di posisi paling akhir dan hanya boleh ada satu per method.
Rekursi
Rekursi adalah method yang memanggil dirinya sendiri. Setiap method rekursif wajib memiliki:
- Base case: kondisi berhenti yang tidak memanggil diri sendiri.
- Recursive case: pemanggilan diri dengan masalah yang lebih kecil menuju base case.
1 | // n! = n x (n-1)! dengan 0! = 1 |
Jejak faktorial(4):
1 | faktorial(4) = 4 * faktorial(3) |
Contoh lain:
1 | // Fibonacci: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) |
Hal yang perlu diwaspadai:
- Tanpa base case yang benar, program akan berhenti dengan
StackOverflowError. - Rekursi Fibonacci di atas sangat lambat untuk
nbesar karena menghitung ulang nilai yang sama berkali-kali. Versi perulangan (Pertemuan 4) jauh lebih efisien. - Setiap masalah rekursif dapat ditulis dengan perulangan. Pilih rekursi bila membuat solusi lebih jelas (misalnya struktur pohon dan folder).
Exception Handling
Pada Pertemuan 1 kita telah mengenal runtime error yang di Java disebut exception. Tanpa penanganan, exception menghentikan program secara mendadak. Dengan exception handling, kita dapat menangkap error tersebut dan memberi respons yang baik kepada pengguna.
try - catch - finally
1 | public class Main { |
| Bagian | Fungsi |
|---|---|
try |
Kode yang berpotensi menimbulkan exception |
catch |
Penanganan untuk jenis exception tertentu (boleh lebih dari satu) |
finally |
Selalu dijalankan, baik terjadi exception maupun tidak (cocok untuk membersihkan resource) |
Beberapa tipe exception dapat ditangani bersama dengan multi-catch:
1 | try { |
Melempar Exception dengan throw
Gunakan throw untuk menandai bahwa sebuah method menerima data yang tidak valid:
1 | static double bagi(double a, double b) { |
Membaca Input Aman dengan Method
Method dapat menyatukan perulangan, Scanner, dan exception handling menjadi satu fungsi yang bisa dipakai ulang:
1 | import java.util.InputMismatchException; |
Jenis exception yang sering ditemui:
| Exception | Penyebab |
|---|---|
NumberFormatException |
Integer.parseInt("abc") |
InputMismatchException |
Input Scanner tidak sesuai tipe |
ArithmeticException |
Bilangan bulat dibagi nol |
ArrayIndexOutOfBoundsException |
Indeks array di luar batas |
NullPointerException |
Memakai variabel objek yang masih null |
IllegalArgumentException |
Argumen method tidak valid |
Jangan menangkap exception hanya untuk “menyembunyikan” error dengan
catchyang kosong. Selalu beri respons yang jelas: pesan ke pengguna, mencoba ulang, atau mencatat log.
Perancangan Method yang Baik
- Satu method, satu tugas. Jika sebuah method melakukan membaca input, menghitung, dan mencetak sekaligus, pecah menjadi tiga method.
- Nama berupa kata kerja yang menjelaskan tujuan:
hitungRataRata,cetakStruk,isPrima. Method yang mengembalikan boolean biasanya diawaliisatauhas. - Batasi parameter (idealnya tidak lebih dari tiga). Jika data terlalu banyak, kelompokkan dalam array atau objek.
- Pisahkan perhitungan dan tampilan. Method yang menghitung sebaiknya
returnhasilnya, bukan langsung mencetak, sehingga mudah diuji dan dipakai ulang. - Hindari duplikasi. Kode yang sama ditulis dua kali adalah kandidat method baru.
- Dokumentasikan dengan Javadoc agar IDE menampilkan petunjuk saat method dipanggil:
1 | /** |
Penutup: Rangkuman dan Fitur Java 25
Peta Konsep Seluruh Materi
| Pertemuan | Topik | Kata Kunci Utama |
|---|---|---|
| 1 | Pengenalan & instalasi | JDK, JRE, JVM, javac, java, Hello World, Scanner |
| 2 | Operator & String | + - * / %, casting, Math, String, formatted(), text block |
| 3 | Percabangan | if, else if, ternary, switch expression, pattern matching |
| 4 | Perulangan | for, while, do-while, break, continue, nested loop |
| 5 | Array & Collection | int[], int[][], Arrays, ArrayList, List.of |
| 6 | Method & Exception | static, parameter, return, overloading, rekursi, try-catch |
Fitur Java 25 untuk Pemula
Java 25 (LTS) membuat program kecil jauh lebih ringkas, sehingga pemula tidak perlu langsung berhadapan dengan public static void main(String[] args). Dua fitur yang sudah resmi (bukan preview) sejak Java 25:
1. Compact source file dan instance main method: class dan static dapat dihilangkan untuk program sederhana. Simpan sebagai Halo.java:
1 | void main() { |
Jalankan dengan:
1 | java Halo.java |
Class IO (di paket java.lang) menyediakan IO.println(), IO.print(), dan IO.readln() sehingga cukup untuk program belajar tanpa Scanner. Di dalam compact source file, method lain juga dapat ditulis tanpa static:
1 | int kuadrat(int n) { |
2. Module import declarations: satu baris import module mengimpor seluruh paket yang diekspor sebuah modul.
1 | import module java.base; // List, ArrayList, Scanner, Arrays, Random, dll |
Sebagai catatan, pada compact source file seluruh paket dari modul java.base sudah otomatis diimpor, sehingga List, ArrayList, Scanner, dan sejenisnya dapat langsung dipakai tanpa import.
Kedua fitur ini nyaman untuk belajar dan membuat skrip kecil. Pada proyek nyata dan materi lanjutan (OOP, package, Maven/Gradle), kamu tetap akan menulis class secara lengkap, sehingga bentuk klasik
public class Mainyang kita pelajari tetap penting dipahami.
Perjalanan Selanjutnya
Setelah menguasai dasar ini, topik yang direkomendasikan:
- Object-Oriented Programming: class, object, constructor, enkapsulasi, inheritance, polymorphism, interface, dan
record. - Collections Framework:
Map(HashMap),Set,Queue, danStream APIdengan lambda. - File I/O dan Exception lanjutan (checked exception, custom exception).
- Build tools & testing: Maven/Gradle dan JUnit.
- Pengembangan aplikasi: Spring Boot untuk backend, serta database dengan JDBC/JPA.
Checklist Kemampuan
Centang apakah kamu sudah mampu:
- [ ] Menginstal JDK dan menjalankan program dari terminal dan IDE.
- [ ] Menggunakan variabel, tipe data, operator, dan casting dengan benar.
- [ ] Menulis percabangan
ifdanswitchexpression. - [ ] Menulis perulangan
for,while, dando-while, termasuk nested loop. - [ ] Mengolah array, array 2D, dan
ArrayList. - [ ] Memecah program menjadi method dengan parameter dan return value.
- [ ] Menangani input salah dengan
try-catchatauhasNextInt(). - [ ] Membaca pesan error dan memperbaikinya sendiri.
Latihan
Kerjakan latihan berikut untuk mengetes pemahamanmu. Total durasi latihan adalah 60 menit.
| No | Latihan | Estimasi |
|---|---|---|
| 1 | Method Bangun Datar | 10 menit |
| 2 | Method Prima, Faktorial & Fibonacci | 10 menit |
| 3 | Overloading & Varargs | 5 menit |
| 4 | Method pada Array | 10 menit |
| 5 | Input Aman dengan try-catch | 5 menit |
| 6 | Proyek Akhir | 20 menit |
| Total | 60 menit |
Latihan 1: Method Bangun Datar (estimasi 10 menit)
Buat method berikut, lalu panggil dari main dengan menu pilihan bangun:
luasPersegiPanjang(double p, double l)dankelilingPersegiPanjang(double p, double l)luasLingkaran(double r)dankelilingLingkaran(double r)luasSegitiga(double alas, double tinggi)cetakHasil(String bangun, double luas)bertipevoiduntuk menampilkan hasil denganprintf2 angka desimal.
Pastikan method perhitungan mengembalikan nilai dan tidak mencetak sendiri.
Latihan 2: Method Prima, Faktorial & Fibonacci (estimasi 10 menit)
- Buat
static boolean isPrima(int n), lalu gunakan untuk mencetak semua bilangan prima dari 1 sampai 100. - Buat
static long faktorial(int n)secara rekursif dan versi iteratif; bandingkan hasil keduanya untukn = 1..15. - Buat
static int fibonacci(int n)secara rekursif, tampilkan 15 suku pertama. - Buat
static boolean isPalindrom(String teks)yang tidak membedakan huruf besar/kecil. Uji dengan"Katak"dan"Java".
Latihan 3: Overloading & Varargs (estimasi 5 menit)
- Buat tiga method overloading bernama
luas:luas(double sisi)untuk persegi,luas(double panjang, double lebar)untuk persegi panjang, danluas(String bentuk, double ukuran)yang menghitung luas lingkaran bilabentukbernilai"lingkaran"(ukuran = jari-jari). Panggil ketiganya darimain. - Buat
static double rataRata(double... nilai)yang dapat dipanggil dengan 1 hingga banyak argumen, dan mengembalikan0jika tidak ada argumen.
Latihan 4: Method pada Array (estimasi 10 menit)
Buat method berikut dengan parameter int[]:
static int cariMaks(int[] data)danstatic int cariMin(int[] data)static double hitungRataRata(int[] data)static int[] balikArray(int[] data)yang mengembalikan array baru (tanpa mengubah aslinya)static void urutkan(int[] data)yang mengurutkan array asli (gunakan bubble sort dari Pertemuan 5)static void cetak(int[] data)yang mencetak isi array dengan format[a, b, c]
Buktikan perbedaan: setelah balikArray, array asli tidak berubah; setelah urutkan, array asli berubah. Jelaskan alasannya (pass-by-value dari referensi).
Latihan 5: Input Aman dengan try-catch (estimasi 5 menit)
Buat dua method:
static int bacaInt(Scanner input, String pesan, int min, int max)yang terus meminta input sampai pengguna memasukkan bilangan bulat dalam rentangminsampaimax.static double bacaDouble(Scanner input, String pesan)dengan perilaku serupa.
Gunakan try-catch untuk InputMismatchException. Pakai method ini pada seluruh program proyek akhir.
Latihan 6: Proyek Akhir, Sistem Manajemen Nilai Mahasiswa (estimasi 20 menit)
Buat aplikasi konsol yang menggabungkan seluruh materi dari Pertemuan 1 sampai 6.
Fitur menu (ditampilkan berulang sampai pengguna memilih keluar):
1 | ===== SISTEM NILAI MAHASISWA ===== |
Ketentuan teknis:
- Data mahasiswa (nama dan nilai) disimpan menggunakan
ArrayList(misalnya dua list paralel:ArrayList<String>danArrayList<Integer>). - Setiap fitur ditulis sebagai method tersendiri (
tambahData,tampilkanData,cariData,tampilkanStatistik,hapusData), danmainhanya berisi menu. - Method
hitungGrade(int nilai)mengembalikanA/B/C/D/Emenggunakanswitchexpression. - Validasi nilai harus 0-100 dan nama tidak boleh kosong atau duplikat; gunakan method input aman dari Latihan 5.
- Statistik: rata-rata, nilai tertinggi beserta namanya, nilai terendah beserta namanya, dan jumlah mahasiswa per grade.
- Tampilkan data dalam tabel rapi dengan
printf, dan tangani kondisi data kosong dengan pesan yang jelas. - Tambahkan komentar singkat dan Javadoc minimal pada tiga method utama.
Rubrik penilaian mandiri:
| Aspek | Bobot |
|---|---|
| Program berjalan tanpa error dan menu berulang dengan benar | 25% |
| Pembagian method yang jelas (satu method satu tugas) | 25% |
| Validasi input dan penanganan exception | 20% |
| Penggunaan struktur Java yang tepat (switch expression, ArrayList, loop) | 20% |
| Kerapian kode: penamaan, indentasi, komentar | 10% |
Tantangan tambahan (jika waktu tersisa):
- Tambahkan fitur mengurutkan data berdasarkan nilai (menaik/menurun).
- Tulis ulang versi kecilnya sebagai compact source file Java 25 dengan
IO.readlndanIO.println. - Simpan data ke file teks dan muat kembali saat program dibuka (siapkan diri untuk materi File I/O).
Selamat! Kamu telah menyelesaikan seluruh materi dasar Java. Terus berlatih, karena kemampuan pemrograman terbentuk dari banyaknya kode yang kamu tulis. ☕

