1. Exception Handling
Konsep: Menangani kesalahan runtime dan alur program yang tidak terduga.
Latihan Dasar:
Tugas 1: Pembagian dengan Penanganan Input Tidak Valid
- Buat program yang meminta dua angka dari pengguna (gunakan
Scanner
). - Lakukan pembagian angka pertama dengan kedua.
- Tangani exception jika:
- Input bukan angka (
InputMismatchException
). - Pembagian dengan nol (
ArithmeticException
).
- Input bukan angka (
Contoh Solusi:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Division {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Masukkan angka pertama: ");
int a = scanner.nextInt();
System.out.print("Masukkan angka kedua: ");
int b = scanner.nextInt();
System.out.println("Hasil: " + (a / b));
} catch (InputMismatchException e) {
System.out.println("Input harus angka!");
} catch (ArithmeticException e) {
System.out.println("Tidak bisa dibagi dengan 0!");
} finally {
scanner.close();
}
}
}
Tantangan:
- Buat custom exception
InvalidAgeException
jika usia yang dimasukkan < 18. - Gunakan exception ini dalam program pendaftaran akun.
2. Collections
Konsep: Mengelola data dalam struktur seperti List, Set, dan Map.
Latihan Dasar:
Tugas 2: Menghitung Frekuensi Kata
- Baca input kalimat dari pengguna.
- Pisahkan kata-kata dan simpan dalam
List<String>
. - Hitung frekuensi kemunculan setiap kata menggunakan
Map<String, Integer>
. - Cetak hasilnya.
Contoh Solusi:
import java.util.*;
public class WordFrequency {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Masukkan kalimat:");
String sentence = scanner.nextLine();
List<String> words = Arrays.asList(sentence.split(" "));
Map<String, Integer> frequency = new HashMap<>();
for (String word : words) {
frequency.put(word, frequency.getOrDefault(word, 0) + 1);
}
System.out.println("Frekuensi Kata:");
frequency.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
Tantangan:
- Buat program untuk mengelola daftar siswa:
- Gunakan
Map<String, List<Integer>>
untuk menyimpan NIM dan daftar nilai. - Hitung rata-rata nilai per siswa.
- Urutkan siswa berdasarkan NIM menggunakan
TreeMap
.
- Gunakan
3. Multithreading
Konsep: Menjalankan beberapa proses secara bersamaan.
Latihan Dasar:
Tugas 3: Counter dengan Thread
- Buat dua thread yang menambah dan mencetak nilai counter.
- Gunakan
synchronized
untuk menghindari race condition.
Contoh Solusi:
public class Counter implements Runnable {
private int count = 0;
public class Counter implements Runnable {
private int count = 0;
public synchronized void increment() {
count++;
System.out.println(Thread.currentThread().getName() + ": " + count);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
increment();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Counter counter = new Counter();
Thread t1 = new Thread(counter);
Thread t2 = new Thread(counter);
t1.start();
t2.start();
}
}
Tantangan:
- Implementasikan producer-consumer problem menggunakan
wait()
dannotify()
. - Gunakan
ExecutorService
untuk menjalankan 5 thread yang menghitung faktorial secara paralel.
Tips Belajar:
- Baca Dokumentasi: Pelajari class Java seperti
ArrayList
,HashMap
, danThread
di docs.oracle.com. - Eksperimen: Ubah kode contoh, lihat apa yang terjadi jika menghapus
synchronized
atau menggunakanHashSet
vsTreeSet
. - Debugging: Gunakan breakpoint di IDE untuk melihat alur program saat runtime.
Semangat belajar! 🚀