Algorithms and Programming Java 2
Pada pertemuan sebelumnya kita sudah menyiapkan JDK 25, menulis program pertama, serta mengenal variabel dan tipe data. Pada pertemuan ini kita belajar bagaimana komputer mengolah data: operator, ekspresi, konversi tipe data, class Math, dan pengolahan String.
Pendahuluan
Tujuan Pembelajaran
Setelah pertemuan ini, kamu diharapkan mampu:
- Menggunakan operator aritmatika, assignment, perbandingan, dan logika pada Java.
- Memahami urutan prioritas operator (operator precedence) dan jebakan pembagian bilangan bulat.
- Melakukan konversi tipe data (casting dan parsing) dengan benar.
- Memakai class
Mathuntuk perhitungan matematis. - Mengolah
Stringmenggunakan method bawaan,formatted(), dan text block.
Alokasi Waktu Pertemuan Ini
Pertemuan ini berdurasi 3 jam:
| Sesi | Topik | Durasi |
|---|---|---|
| Materi 1 | Review pertemuan sebelumnya | 10 menit |
| Materi 2 | Operator aritmatika & ekspresi | 20 menit |
| Materi 3 | Operator assignment, increment & decrement | 10 menit |
| Materi 4 | Operator perbandingan & logika | 15 menit |
| Materi 5 | Konversi tipe data (casting & parsing) | 15 menit |
| Materi 6 | Class Math | 10 menit |
| Materi 7 | Dasar pengolahan String | 25 menit |
| Materi 8 | Studi kasus: kalkulator belanja | 15 menit |
| Total Materi | 2 jam | |
| Latihan | Latihan Mandiri | 1 jam |
| Total | 3 jam |
Review Singkat
Sebelum lanjut, pastikan kamu masih ingat hal-hal berikut:
- Struktur dasar program:
public class Maindanpublic static void main(String[] args). - Cara mendeklarasikan variabel:
tipeData namaVariabel = nilai;. System.out.println,print, danprintfuntuk output.Scanneruntuk input, beserta jebakannextLine()setelahnextInt().
Jebakan Locale pada Scanner:
Scannermembaca angka pecahan sesuai pengaturan bahasa (locale) komputer. Jika komputermu memakai locale Indonesia,nextDouble()mengharapkan koma (2500,5) dan akan error jika kamu mengetik titik (2500.5). Agar konsisten, tambahkaninput.useLocale(Locale.US);setelah membuat Scanner (danimport java.util.Locale;).
Operator Aritmatika dan Ekspresi
Ekspresi adalah gabungan nilai, variabel, dan operator yang menghasilkan sebuah nilai baru.
| Operator | Fungsi | Contoh | Hasil |
|---|---|---|---|
+ |
Penjumlahan | 17 + 5 |
22 |
- |
Pengurangan | 17 - 5 |
12 |
* |
Perkalian | 17 * 5 |
85 |
/ |
Pembagian | 17 / 5 |
3 (bilangan bulat) |
% |
Modulus (sisa bagi) | 17 % 5 |
2 |
1 | public class Main { |
Pembagian Bilangan Bulat
Jika kedua operand bertipe bilangan bulat, hasil pembagian juga bilangan bulat (bagian desimal dibuang). Ini adalah sumber logical error yang sangat sering terjadi.
1 | System.out.println(7 / 2); // 3 |
Operator % sangat berguna, misalnya untuk menentukan ganjil/genap (n % 2 == 0) atau mengambil digit terakhir (n % 10).
Urutan Prioritas Operator
Java mengikuti aturan matematika: dikerjakan dari prioritas tertinggi, dan jika sama maka dari kiri ke kanan.
| Prioritas | Operator | ||
|---|---|---|---|
| 1 (tertinggi) | ( ) kurung |
||
| 2 | ++ -- ! (unary) |
||
| 3 | * / % |
||
| 4 | + - |
||
| 5 | < <= > >= |
||
| 6 | == != |
||
| 7 | && |
||
| 8 | `\ | \ | ` |
| 9 (terendah) | = += -= *= /= %= |
1 | int hasil1 = 2 + 3 * 4; // 14 |
Tips: jika ragu, gunakan tanda kurung agar maksud kodenya jelas.
Overflow pada Bilangan Bulat
Setiap tipe data memiliki batas. Jika hasil melebihi batas, nilainya “berputar” tanpa pesan error.
1 | int maks = Integer.MAX_VALUE; // 2147483647 |
Math.addExact(), subtractExact(), dan multiplyExact() akan melempar exception saat overflow sehingga kesalahan tidak terjadi diam-diam. Untuk bilangan yang lebih besar gunakan tipe long.
Pecahan Tidak Selalu Presisi
Tipe double menyimpan pecahan dalam bentuk biner sehingga bisa menghasilkan selisih sangat kecil:
1 | System.out.println(0.1 + 0.2); // 0.30000000000000004 |
Untuk perhitungan uang yang presisi pada aplikasi nyata, gunakan class BigDecimal (akan kamu temui pada pembelajaran lanjutan).
Operator Assignment, Increment, dan Decrement
Operator assignment gabungan menyingkat penulisan:
| Operator | Sama dengan | Contoh |
|---|---|---|
+= |
x = x + n |
skor += 10; |
-= |
x = x - n |
nyawa -= 1; |
*= |
x = x * n |
harga *= 2; |
/= |
x = x / n |
total /= 4; |
%= |
x = x % n |
sisa %= 7; |
Operator ++ dan -- menambah atau mengurangi nilai variabel sebesar 1.
1 | int x = 5; |
Saran: gunakan x++ sebagai pernyataan tersendiri agar kode mudah dibaca, dan hindari mencampurnya dalam ekspresi yang rumit.
Operator Perbandingan dan Logika
Operator Perbandingan
Menghasilkan nilai boolean (true atau false).
| Operator | Arti | Contoh | Hasil |
|---|---|---|---|
== |
Sama dengan | 5 == 5 |
true |
!= |
Tidak sama dengan | 5 != 3 |
true |
> |
Lebih besar | 5 > 8 |
false |
< |
Lebih kecil | 5 < 8 |
true |
>= |
Lebih besar atau sama | 5 >= 5 |
true |
<= |
Lebih kecil atau sama | 6 <= 5 |
false |
Awas:
=adalah assignment (mengisi nilai), sedangkan==adalah perbandingan. Selain itu, jangan membandingkanStringdengan==. Gunakan.equals()(dibahas pada bagian String).
Operator Logika
| Operator | Nama | Arti | ||
|---|---|---|---|---|
&& |
AND | true jika kedua kondisi true |
||
| `\ | \ | ` | OR | true jika salah satu kondisi true |
! |
NOT | Membalik nilai boolean |
1 | int umur = 20; |
| A | B | A && B | A \ | \ | B | !A |
|---|---|---|---|---|---|---|
| true | true | true | true | false | ||
| true | false | false | true | false | ||
| false | true | false | true | true | ||
| false | false | false | false | true |
Short-circuit
Operator && dan || berhenti mengevaluasi begitu hasilnya sudah pasti. Ini bisa dimanfaatkan untuk menghindari error:
1 | int pembagi = 0; |
Konversi Tipe Data
Casting
Java mengenal dua jenis konversi antar tipe numerik:
1. Widening (otomatis): dari tipe kecil ke tipe besar, aman tanpa kehilangan data.
1 | byte → short → int → long → float → double |
1 | int angka = 10; |
2. Narrowing (manual): dari tipe besar ke tipe kecil, harus ditulis eksplisit dan data bisa hilang.
1 | double pi = 3.99; |
Casting sering dipakai untuk memperbaiki pembagian bilangan bulat:
1 | int jumlah = 7; |
Konversi Angka dan Karakter
1 | char huruf = 'A'; |
Parsing: String ke Angka dan Sebaliknya
1 | int umur = Integer.parseInt("21"); |
Literal Angka dan var
1 | int juta = 1_000_000; // underscore memudahkan pembacaan |
Sejak Java 10, kompiler dapat menebak tipe variabel lokal dengan var:
1 | var nama = "Zulma"; // String |
Aturan var: hanya untuk variabel lokal, wajib langsung diberi nilai, dan tipenya tetap (tidak dinamis seperti JavaScript). Untuk pemula, sebaiknya tetap tulis tipe secara eksplisit agar terbiasa dengan tipe data.
Class Math
Class Math tersedia otomatis (tanpa import) dan berisi banyak method matematika.
| Method | Fungsi | Contoh | Hasil |
|---|---|---|---|
Math.abs(x) |
Nilai mutlak | Math.abs(-7) |
7 |
Math.max(a, b) |
Nilai terbesar | Math.max(3, 9) |
9 |
Math.min(a, b) |
Nilai terkecil | Math.min(3, 9) |
3 |
Math.pow(a, b) |
Pangkat | Math.pow(2, 10) |
1024.0 |
Math.sqrt(x) |
Akar kuadrat | Math.sqrt(144) |
12.0 |
Math.cbrt(x) |
Akar pangkat tiga | Math.cbrt(27) |
3.0 |
Math.round(x) |
Pembulatan terdekat | Math.round(2.5) |
3 |
Math.floor(x) |
Pembulatan ke bawah | Math.floor(-2.5) |
-3.0 |
Math.ceil(x) |
Pembulatan ke atas | Math.ceil(2.1) |
3.0 |
Math.clamp(v, min, max) |
Membatasi nilai dalam rentang (Java 21+) | Math.clamp(150, 0, 100) |
100 |
Math.PI |
Konstanta π | 3.141592653589793 |
1 | public class Main { |
Math.round(double)mengembalikanlong, sedangkanMath.round(float)mengembalikanint. Gunakan casting(int)bila perlu.
Dasar Pengolahan String
String adalah objek yang menyimpan rangkaian karakter dan bersifat immutable (tidak dapat diubah). Setiap method yang “mengubah” String sebenarnya menghasilkan String baru.
1 | String kata = "Belajar Java"; |
| Method | Fungsi | Hasil untuk kata |
|---|---|---|
length() |
Panjang String | 12 |
charAt(0) |
Karakter pada indeks ke-0 | 'B' |
substring(0, 7) |
Potong indeks 0 sampai sebelum 7 | "Belajar" |
substring(8) |
Potong dari indeks 8 sampai akhir | "Java" |
indexOf("Java") |
Posisi pertama kemunculan (-1 jika tidak ada) |
8 |
toUpperCase() / toLowerCase() |
Ubah huruf besar/kecil | "BELAJAR JAVA" |
contains("Java") |
Apakah memuat teks | true |
startsWith("Bel") / endsWith("va") |
Awalan / akhiran | true / true |
replace("Java", "Python") |
Ganti teks | "Belajar Python" |
strip() |
Hapus spasi di awal/akhir | |
isEmpty() / isBlank() |
Kosong / kosong atau hanya spasi | false |
repeat(3) |
Ulangi String | "Belajar JavaBelajar JavaBelajar Java" |
Indeks String dimulai dari 0: karakter pertama berada di indeks 0, dan karakter terakhir di indeks length() - 1.
Membandingkan String
1 | String a = "java"; |
Aturan emas: bandingkan isi String selalu dengan .equals(), bukan ==.
Format String dan Text Block
1 | String nama = "Zulma"; |
Text block (Java 15+) memudahkan penulisan teks beberapa baris tanpa \n:
1 | String struk = """ |
Spasi indentasi dihitung relatif terhadap posisi penutup """, sehingga hasil cetaknya tetap rata kiri.
StringBuilder
Karena String immutable, menggabungkan teks berulang kali di dalam perulangan kurang efisien. Gunakan StringBuilder:
1 | StringBuilder sb = new StringBuilder(); |
Studi Kasus: Kalkulator Belanja
Program berikut menggabungkan konsep input, operator, konstanta, casting, dan format output.
1 | import java.util.Locale; |
Catatan: pada printf, untuk mencetak karakter persen gunakan %%. Flag , pada %,.2f menambahkan pemisah ribuan.
Latihan
Kerjakan latihan berikut untuk mengetes pemahamanmu. Total durasi latihan adalah 60 menit.
| No | Latihan | Estimasi |
|---|---|---|
| 1 | Kalkulator Dua Bilangan | 10 menit |
| 2 | Konversi Detik ke Jam:Menit:Detik | 10 menit |
| 3 | Prediksi Output (Tracing) | 10 menit |
| 4 | Pengolahan String | 10 menit |
| 5 | Struk Belanja dengan Diskon & Pajak | 15 menit |
| 6 | Debugging Logical Error | 5 menit |
| Total | 60 menit |
Latihan 1: Kalkulator Dua Bilangan (estimasi 10 menit)
Buat program yang meminta dua bilangan bulat, lalu menampilkan hasil +, -, *, / (hasil pecahan 2 angka di belakang koma), dan %. Contoh:
1 | Bilangan 1 : 17 |
Latihan 2: Konversi Detik (estimasi 10 menit)
Buat program yang meminta total detik, lalu mengubahnya menjadi format jam, menit, dan detik. Gunakan operator / dan %.
1 | Total detik : 3725 |
Latihan 3: Prediksi Output (estimasi 10 menit)
Tanpa menjalankan program, tuliskan output dari tiap potongan kode berikut. Setelah itu, jalankan di IDE dan cocokkan jawabanmu.
1 | // a |
Latihan 4: Pengolahan String (estimasi 10 menit)
Buat program yang meminta nama lengkap (misalnya zulma aulia putri), lalu tampilkan:
- Nama dalam huruf kapital semua.
- Jumlah karakter (tanpa menghitung spasi di awal/akhir).
- Karakter pertama dan karakter terakhir.
- Apakah nama memuat kata
"aulia"(true/false). - Nama dengan spasi diganti tanda garis bawah (
_).
Latihan 5: Diskon dan Pajak (estimasi 15 menit)
Kembangkan studi kasus kalkulator belanja menjadi program yang:
- Menerima 3 jenis barang (nama, harga, jumlah) satu per satu.
- Menghitung subtotal tiap barang dan total keseluruhan.
- Memberi diskon 10% pada total, lalu menambah PPN 11%.
- Mencetak struk menggunakan text block atau
printfyang rapi, dengan pemisah ribuan.
Latihan 6: Debugging Logical Error (estimasi 5 menit)
Kode berikut seharusnya menghitung rata-rata tiga nilai (hasil: 83.33), namun hasilnya salah. Temukan dua kesalahannya dan perbaiki.
1 | int n1 = 80, n2 = 85, n3 = 85; |
Catatan: pada Latihan 3, jelaskan juga mengapa hasil (c) dan (d) bisa berbeda dari dugaan awalmu.


