Pemrograman Java Elementer
2.1 Introduksi
Pada Bab. 1, Anda telah
mempelajari bagaimana menciptakan, mengkompilasi, dan menjalankan suatu program
JAVA. Sekarang, Anda saatnya belajar bagaimana menyelesaikan masalah
pemrograman secara praktis. Melalui masalah-masalah yang disajikan, Anda akan
belajar pemrograman elementer menggunakan tipe-tipe data primitif, variabel,
konstanta, operator, ekspresi, dan masukan dan keluaran.
2.2 Menulis Program Sederhana
Menulis suatu program melibatkan
perancangan algoritma dan penerjemahan algoritma tersebut menjadi kode. Suatu
algoritma mendeskripsikan bagaimana suatu masalah diselesaikan. Pemecahan
masalah yang dimaksud terkait dengan aksi-aksi yang perlu dieksekusi urutan
eksekusinya. Algoritma menolong programmer untuk merencanakan suatu program
sebelum menuliskannya menjadi bahasa pemrograman. Algoritma dapat dideskripsikan dengan bahasa
natural maupun dengan pseudocode
(bahasa natural yang dicampur dengan bahasa pemrograman). Algoritma untuk
program yang akan dibuat dideskripsikan sebagai berikut:
1. Baca radius.
2. Hitung
luas menggunakan formula berikut: luas = radius x radius x p
3. Tampilkan luas.
Ketika Anda mengkode, Anda
menerjemahkan suatu algoritma menjadi program. Anda telah mengetahui bahwa
setiap program JAVA dimulai dengan deklarasi suatu kelas dimana di dalamnya
katakunci class diikuti dengan nama
kelas. Diasumsikan bahwa Anda telah memilih HitungLuas sebagai nama kelas. Garis-besar program akan tampak
seperti ini:
1
2
3
|
public
class HitungLuas
{
//
Akan diberikan selanjutnya
}
|
Seperti yang Anda ketahui, program
JAVA harus memiliki satu metode main
dimana eksekusi program dimulai. Jadi, program bisa dikembangkan menjadi:
1
2
3
4
5
6
7
|
public
class HitungLuas
{
public static void main(String[] args) {
// Langkah 1: Baca radius
// Langkah 2: Hitung luas
// Langkah 3: Tampilkan luas
}
}
|
Program perlu membaca radius yang
diberikan oleh pengguna lewat keyboard.
Hal ini menciptakan dua isu penting:
- Membaca radius
- Menyimpan radius dalam program
Pada kasus ini, diberikan variabel
radius untuk radius, dan variabel luas untuk luas. Agar kompiler
mengetahui apa itu radius dan luas, maka tipe data keduanya harus
dinyatakan. JAVA menyediakan beberapa tipe data untuk merepresentasikan
bilangan bulat, bilangan pecahan, karakter, dan tipe-tipe Boolean. Tipe-tipe
tersebut dinamai tipe data primitif atau tipe data fundamental.
Variabel radius dan luas,
keduanya, dideklarasikan sebagai bilangan pecahan. Program kemudian bisa
dikembangkan menjadi:
1
2
3
4
5
6
7
8
9
10
|
public
class HitungLuas
{
public static void main(String[] args) {
double
radius;
double
luas;
// Langkah 1: Baca radius
// Langkah 2: Hitung luas
// Langkah 3: Tampilkan luas
}
}
|
Program mendeklarasikan radius dan luas sebagai variabel. Katakunci double mengindikasikan bahwa radius
dan luas merupakan bilangan pecahan
yang disimpan komputer.
Langkah pertama adalah membaca radius. Membaca suatu angka dari keyboard bukanlah perkara gampang. Untuk
sementara ini, suatu nilai ditugaskan kepada radius di dalam program.
Langkah kedua adalah menghitung luas dengan menugaskan hasil dari radius * radius * 3,14159 kepada luas.
Pada langkah akhir, luas ditampilkan pada konsol
menggunakan metode System.out.println.
Program utuh ditampilkan pada Kode2.1. Jika program dijalankan, maka akan
didapatkan hasil seperti tertampil pada Gambar 2.1.
Kode2.1 HitungLuas.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class HitungLuas {
public static void main(String[] args) {
double radius; // Deklarasi radius
double luas; // Deklarasi luas
// Menugaskan
suatu radius
radius = 20; // Nilai radius
// Hitung luas
luas = radius * radius * 3.14159;
// Tampilkan hasilnya
System.out.println("Luas lingkaran dengan radius " +
radius + " adalah " + luas);
}
}
|
Variabel-variabel seperti radius dan luas berkaitan dengan lokasi memori. Setiap variabel memiliki nama,
tipe, ukuran, dan nilai. Baris 3 mendeklarasikan bahwa radius dapat menyimpan suatu nilai double. Nilainya tidak terdefinisi sampai Anda menugaskan suatu
nilai pada radius. Baris 7
menugaskan nilai 20 kepada variabel radius.
Dengan cara yang sama, baris 4 mendeklarasikan variabel luas, dan baris 10 menugaskan suatu nilai kepada luas. Tabel berikut ini menunjukkan
nilai dalam memori untuk luas dan radius setelah program dieksekusi.
Setiap baris dalam tabel menunjukkan nilai-nilai variabel setelah statemen
dalam baris yang bersangkutan dieksekusi. Penjejakan dengan cara manual seperti
ini penting untuk mengetahui bagaimana suatu program bekerja dan untuk
menemukan kesalahan dalam program.
baris
|
radius
|
luas
|
3
|
tak-bernilai
|
-
|
4
|
-
|
Tak-bernilai
|
7
|
20
|
-
|
10
|
-
|
1256,636
|
Tanda plus (+) memiliki dua arti:
satu untuk penjumlahan dan yang lain untuk menyambung string. Tanda plus (+)
pada baris 13-14 disebut dengan operator penyambungan string. Operator ini
menyambung dua string, jika kedua operand merupakan string. Jika salah satu
operand bukan string (misalnya, angka), maka nilai tak-string dikonversi
menjadi string kemudian disambungkan dengan string lainnya. Jadi, tanda plus
(+) pada baris 13-14 menyambung dua string menjadi suatu string yang lebih
panjang, seperti tertampil pada keluaran.
Suatu konstanta string tidak bisa melintasi baris
dalam kode sumber. Jadi,
statemen berikut ini akan menghasilkan error kompilasi:
System.out.println("Pancasila
sebagai Dasar Negara
Republik Indonesia");
Untuk memperbaiki kesalahan, Anda perlu memecah
string menjadi dua dan gunakan operator penyambungan (+) untuk menggabungkan
keduanya:
System.out.println("Pancasila
sebagai Dasar Negara ” +
“Republik Indonesia");
|
2.3 Membaca Masukan dari Konsol
Pada Kode2.1, radius ditetapkan di dalam kode sumber. Untuk menggunakan nilai
radius yang berbeda, Anda perlu memodifikasi kode sumber dan
mengkompilasi-ulang program. Oleh karena itu, hal ini cukup merepotkan. Anda
bisa menggunakan kelas Scanner untuk
masukan dari konsol.
JAVA menggunakan System.out untuk merujuk ke divais
keluaran standar dan System.in ke
divais masukan standar. Secara default, divais keluaran adalah layar monitor,
dan divais masukan adalah keyboard.
Untuk menghasilkan keluaran pada konsol, Anda hanya perlu menggunakan metode println untuk menampilkan suatu nilai
primitif atau suatu string. Masukan konsol tidak secara langsung didukung oleh
JAVA, tetapi Anda bisa menggunakan kelas Scanner
untuk menciptakan suatu objek untuk membaca masukan dari System.in, sebagai berikut:
Scanner masukan = new Scanner(System.in);
Tabel 2.1 Metode-metode untuk objek Scanner
Metode
|
Penjelasan
|
nextByte()
nextShort()
nextInt()
nextLong()
nextFloat()
nextDouble()
next()
nextLine()
|
Membaca suatu integer bertipe byte
Membaca suatu integer bertipe short
Membaca suatu integer bertipe int
Membaca suatu integer bertipe long
Membaca suatu angka bertipe float
Membaca suatu angka bertipe double
Membaca suatu string yang
berakhir dengan karakter spasi putih
Membaca sebaris teks (suatu
string yang berakhir dengan ENTER
|
Sintaks new Scanner(System.in) menciptakan suatu objek bertipe Scanner. Sintaks Scanner masukan mendeklarasikan bahwa masukan adalah suatu variabel bertipe Scanner. Seluruh baris Scanner
masukan = new Scanner(System.in) menciptakan suatu objek Scanner dan menugaskan referensinya
kepada variabel masukan. Suato objek
dapat memanggil metodenya. Anda bisa memanggil metode-metode pada Tabel 2.1
untuk membaca berbagai tipe data masukan.
Sekarang, Anda akan disajikan
contoh untuk melihat bagaimana membaca suatu angka (termasuk titik desimal)
dengan memanggil metode nextDouble().
Kode2.2 merupakan versi terbaru dari Kode2.1, dimana program meminta pengguna
untuk mengentri suatu radius.
Kode2.2 HitungLuasDenganKonsol.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.Scanner; // Scanner dalam paket
java.util
public class HitungLuasDenganKonsol {
public static void main(String[] args) {
// Menciptakan
suatu objek Scanner
Scanner masukan = new Scanner(System.in);
// Meminta
pengguna untuk mengentri radius
System.out.print("Masukkan suatu angka untuk radius:
");
double radius = masukan.nextDouble();
// Hitung luas
double luas = radius * radius *
3.14159;
// Tampilkan hasil
System.out.println("Luas lingkaran dengan radius "
+
radius + " adalah " + luas);
}
}
|
Keluaran
Masukkan suatu angka untuk radius: 3.37 ENTER
Luas lingkaran dengan radius 3.37 adalah 35.678723471000005
Masukkan suatu angka untuk radius: 7.78565 ENTER
Luas lingkaran dengan radius 7.78565 adalah 190.4317061866668
Kelas Scanner berada dalam paket java.util,
yang diimpor pada baris 1. Baris 6 menciptakan suatu objek Scanner. Statemen pada baris 9 menampilkan suatu pesan untuk
mendesak pengguna memberikan masukan:
System.out.print("Masukkan suatu angka untuk radius:
");
Metode print identik dengan println
kecuali bahwa println menggeser
kursor ke baris berikutnya setelah menampilkan string, sedangkan print tidak melakukannya. Statemen pada
baris 10 membaca suatu masukan dari keyboard:
double radius = masukan.nextDouble();
Setelah pengguna memasukkan suatu
angka dan menekan ENTER, angka tersebut akan dibaca dan ditugaskan kepada radius.
Kode2.3 disajikan untuk memberikan
suatu contoh lain dalam membaca masukan dari keyboard. Contoh tersebut membaca tiga angka dan menampilkan
reratanya.
Kode2.3 HitungRerata.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.Scanner; // Scanner berada dalam
paket java.util
public class HitungRerata {
public static void main(String[]
args) {
// Ciptakan
suatu objek Scanner
Scanner input = new Scanner(System.in);
// Meminta
pengguna memasukkan tiga angka
System.out.print("Masukkan tiga angka: ");
double angka1 = input.nextDouble();
double angka2 = input.nextDouble();
double angka3 = input.nextDouble();
// Hitung
rerata
double rerata = (angka1 + angka2 +
angka3) / 3;
// Tampilkan
hasil
System.out.println("Rerata dari " + angka1 +
" " + angka2
+ " "
+ angka3 + " adalah " +
rerata);
}
}
|
Keluaran
Masukkan tiga angka: 3.5 6.7 7.8 ENTER
Rerata dari 3.5 6.7 7.8 adalah 6.0
Masukkan tiga angka: 12.3
ENTER
145.7 ENTER
456.77 ENTER
Rerata dari 12.3 145.7 456.77 adalah 204.92333333333332
Kode untuk mengimpor kelas Scanner (baris 1) dan untuk menciptakan
suatu objek Scanner (baris 6) sama
seperti pada Kode2.2. Baris 9 meminta pengguna untuk memasukkan tiga angka. Angka-angka
tersebut dibaca pada baris 10-12. Anda bisa memasukkan tiga angka yang
dipisahkan dengan spasi, kemudian menekan ENTER, atau memasukkan setiap angka
diikuti dengan menekan ENTER, seperti ditunjukkan pada keluaran program.
2.4
Pengenal
Seperti yang Anda perhatikan pada
Kode2.3, HitungRerata, main, masukan, angka1, angka2, dan lain-lain nama-nama yang muncul
di dalam program. Nama-nama tersebut dikatakan sebagai pengenal. Semua pengenal
harus mematuhi beberapa aturan sebagai berikut:
- Suatu pengenal merupakan suatu runtun karakter yang berisi huruf, angka, garis-bawah (_), dan tanda dollar ($).
- Suatu pengenal dapat diawali dengan suatu huruf, suatu garis-bawah (_), atau suatu tanda dollar ($). Tetapi tidak bisa diawali dengan suatu angka.
- Suatu pengenal tidak bisa bernama sama dengan katakunci JAVA. Berikut adalah katakunci JAVA yang dilarang dipakai sebagai pengenal.
- Suatu pengenal tidak bisa diberi nama true, false, atau null.
- Suatu pengenal bisa saja memiliki sembarang panjang yang diinginkan.
Misalnya, $3, HitungLuas, luas, radius, dan showMessageDialog
merupakan nama-nama pengenal yang boleh dipakai, sedangkan 2C dan d+4 bukan
pengenal yang benar karena tidak mematuhi aturan-aturan di atas. Kompiler JAVA
mendeteksi pengenal yang salah dan melaporkan error sintaks.
Karena JAVA sensitif terhadap huruf besar dan huruf
kecil, maka luas, Luas, dan LUAS adalah pengenal-pengenal yang berbeda.
Pengenal ditujukan untuk menamai variabel, konstanta,
metode, kelas, dan paket. Pengenal yang deskriptif dapat membuat program
gampang dipahami.
|
2.5 Variabel
Seperti yang telah Anda amati
sejauh ini, variabel dimanfaatkan untuk menyimpan suatu nilai. Dikatakan
variabel, karena nilai yang ditugaskan kepadanya bisa diubah. Pada Kode2.2, radius dan luas adalah dua variabel bertipe double. Anda bisa menugaskan sembarang nilai numerik kepada radius dan luas. Sebagai contoh, Anda bisa menulis kode berikut ini untuk
menghitung luas dengan berbeda radius:
//
Menghitung luas pertama
radius
= 1.0;
luas
= radius * radius * 3.14159;
System.out.println("Luas
sebesar " + area + " untuk radius " + radius);
//
Menghitung luas kedua
radius
= 2.0;
luas
= radius * radius * 3.14159;
System.out.println("Luas
sebesar " + area + " untuk radius " + radius);
Variabel digunakan untuk
merepresentasikan data dengan tipe tertentu. Untuk menggunakan suatu variabel,
Anda perlu mendeklarasikannya dengan memberitahukan kompiler nama variabel dan
tipe datanya. Deklarasi variabel menceritakan kepada kompiler untuk
mengalokasikan ruang memori yang cocok untuk variabel yang dideklarasikan berdasarkan
tipe datanya. Sintaks untuk mendeklarasikan suatu variabel adalah:
tipedata
namaVariabel;
Berikut adalah beberapa contoh
deklarasi variabel:
int
hitung; // Mendeklarasikan hitung sebagai suatu
variabel integer
double
radius; // Mendeklarasikan radius sebagai suatu
variabel double double sukuBunga; //
Mendeklarasikan sukuBunga sebagai suatu variabel double
Contoh-contoh di atas menggunakan
tipe-tipe data int, double, dan char. Nanti Anda juga akan dikenalkan dengan tipe-tipe data
lainnya, seperti byte, short, long, float, char, dan boolean.
Jika beberapa variabel bertipe
sama, maka dapat dideklarasikan secara bersamaan, sebagai berikut:
tipedata
variabel1, variabel2, ..., variabeln;
Variabel-variabel tersebut
dipisahkan dengan koma. Sebagai contoh,
int i, j,
k; // Mendeklarasikan i, j, dan k
sebagai variabel integer
Secara konvensional, nama-nama variabel dibuat huruf
kecil. Jika suatu nama variabel terdiri-dari beberapa kata, maka dapat
disambungkan dengan huruf besar pada setiap awal kata, kecuali pada kata
pertama. Sebagai contoh, radiusLingkaran, mataIndahMu, dan lajuSukuBunga.
|
Variabel seringkali memiliki nilai
awal. Anda bisa mendeklarasikan suatu variabel dan sekaligus
menginisialisasinya. Perhatikan contoh kode berikut ini:
int
hitung = 1;
Ini ekivalen dengan dua statemen
berikut:
int
hitung;
hitung =
1;
Anda juga bisa menggunakan format
shorthand untuk mendeklarasikan dan menginisialisasi beberapa variabel bertipe
sama. Sebagai contoh,
int i =
2, j = 3;
Suatu variabel harus dideklarasikan terlebih dahulu
sebelum ditugasi suatu nilai. Suatu variabel yang dideklarasikan di dalam
suatu metode harus ditugasi suatu nilai sebelum digunakan.
Usahakan untuk mendeklarasikan suatu variabel
sekaligus menginisialisasi nilai awalnya. Hal ini akan membuat program
menjadi lebih mudah dibaca dan bisa menghindari error program.
|
2.6 Statemen
Penugasan dan Ekspresi Penugasan
Setelah suatu variabel
dideklarasikan, Anda bisa menugaskan suatu nilai kepadanya menggunakan statemen
penugasan. Dalam JAVA, tanda sama-dengan (=) digunakan sebagai operator
penugasan. Sintaks statemen penugasan adalah sebagai berikut:
variabel
= ekspresi;
Suatu ekspresi merepresentasikan
suatu komputasi yang melibatkan nilai, variabel, dan operator. Sebagai contoh,
perhatikan statemen penugasan sebagai berikut:
int
x = 1;
// Menugaskan 1 kepada
variabel x
double
radius = 1.0;
// Menugaskan 1.0 kepada variabel
radius
x
= 5 * (3 / 2) + 3 * 2; // Menugaskan nilai ekspresi kepada x
x
= y + 1; // Menugaskan
penjumlahan atas y dan 1 kepada x
luas =
radius * radius * 3.14159; // Menghitung luas
Suatu variabel dapat juga
digunakan di dalam suatu ekspresi. Sebagai contoh,
x = x +
1;
Dalam statemen penugasan di atas,
hasil x + 1 ditugaskan kepada x. Jika x bernilai 1 sebelum statemen itu dieksekusi, maka nilai x menjadi 2 setelah statemen tersebut
dieksekusi.
Untuk menugaskan suatu nilai
kepada suatu variabel, nama variabel harus berada di sisi kiri operator
penugasan. Jadi, 1 + x adalah salah.
Dalam JAVA, suatu statemen
penugasan merupakan suatu ekspresi yang menghasilkan suatu nilai yang akan
ditugaskan kepada variabel di sisi kiri operator penugasan. Karena alasan ini,
statemen penugasan disebut juga dengan ekspresi penugasan. Sebagai contoh, statemen
berikut ini adalah legal:
System.out.println(x = 1);
yang ekivalen dengan
x = 1;
System.out.println(x);
Statemen berikut ini juga bisa
dilakukan:
i = j = k
= 3;
yang ekivalen dengan
k = 3;
j = 3;
i = 3;
Di dalam suatu statemen penugasan, tipe data variabel
di sisi kiri operator penugasan harus kompatibel dengan tipe data di sisi
kanan operator. Sebagai contoh, int
x = 1.0
menjadi salah, karena tipe data x adalah int. Anda tidak bisa menugaskan suatu nilai double (1.0)
kepada suatu variabel int tanpa menggunakan mekanisme type casting.
|
2.7 Konstanta
Bernama
Nilai suatu variabel bisa berubah
selama eksekusi suatu program, tetapi suatu konstanta bernama, atau konstanta,
merepresentasikan data permanen yang tidak pernah berubah. Dalam program HitungLuas,
adalah suatu konstanta. Jika Anda
menggunakannya cukup sering, tentu saja Anda tidak mau repot mengetikkan
3.14159 berulang-ulang. Solusinya, Anda bisa mendefinisikan suatu konstanta
untuk
.
Berikut adalah sintaks untuk mendeklarasikan suatu konstanta:
final tipedata NAMAKONSTANTA =
NILAI;
Suatu konstanta harus
dideklarasikan dan diinisialisasi dalam statemen yang sama. Kata final adalah katakunci JAVA untuk
mendeklarasikan suatu konstanta. Sebagai contoh, Anda dapat mendeklarasikan
sebagai suatu konstanta dan menulis-ulang
Kode2.1 sebagai berikut:
//
HitungLuas.java: Menghitung luas suatu lingkaran
public
class HitungLuas
{
public static void main(String[] args) {
final double PI
= 3.14159; // Mendeklarasikan
suatu konstanta
// Menugaskan radius
double radius = 20;
// Menghitung luas
double area = radius * radius * PI;
// Menampilkan hasil
System.out.println("Luas
lingkaran dengan radius " +
radius + " adalah " + luas);
}
}
Secara konvensional, nama-nama konstanta harus huruf besar
semua: PI, bukan pi atau Pi.
Ada tiga keuntungan menggunakan konstanta: (1) Anda
tidak perlu mengetikkan nilai yang sama berulang-ulang; (2) Jika Anda harus
mengubah nilai konstanta (misalnya, dari 3.14 menjadi 3.14159 untuk PI), maka
Anda hanya perlu mengubahnya pada satu lokasi dalam kode sumber; (3) Nama
deskriptif untuk suatu konstanta membuat program lebih mudah dimengerti.
|
2.8 Operasi
dan Tipe Data Numerik
Setiap tipe data memiliki rentang
nilai. Kompiler mengalokasikan ruang memori untuk setiap variabel atau
konstanta sesuai dengan tipe datanya. JAVA menyediakan delapan tipe data
primitif untuk nilai-nilai numerik, karakter, dan Boolean. Tabel 2.2
menampilkan enam tipe data numerik, rentang nilainya, dan kapasitas
penyimpanan.
Tabel 2.2 Tipe-Tipe Data Numerik
Nama
|
Rentang Nilai
|
Kapasitas Penyimpanan
|
byte
short
int
long
float
double
|
(-9223372036854775808 sampai
9223372036854775807)
Rentang
negatif: -3.4028235E+38 sampai -1.4E-45
Rentang
positif: 1.4E–45 to 3.4028235E + 38
Rentang
negatif: -1.7976931348623157E+308
sampai -4.9E–324
Rentang positif: 4.9E - 324
sampai 1.7976931348623157E
+ 308
|
8-bit bertanda
16-bit bertanda
32-bit bertanda
64-bit bertanda
32-bit IEEE 754
64-bit IEEE 754
|
JAVA menggunakan empat jenis
integer: byte, short, int, dan long. Pilih tipe data yang paling cocok
dengan variabel Anda. Misalnya, jika Anda tahu bahwa suatu integer yang
disimpan dalam suatu variabel berada dalam rentang byte, maka deklarasikan
sebagai byte. Untuk penyederhanaan,
akan digunakan int pada sebagian
besar contoh pada buku ini.
JAVA menggunakan dua jenis tipe
untuk angka pecahan: float dan double. Tipe double dua kali lebih besar dari float. Jadi, double
dikenal dengan presisi ganda, dan float
sebagai presisi tunggal. Normalnya, Anda menggunakan tipe double, karena lebih akurat dari float.
Jika suatu variabel ditugasi suatu nilai yang terlalu
besar untuk disimpan, maka hal itu akan menyebabkan overflow. Misalnya,
eksekusi atas statemen berikut ini akan mengakibatkan overflow, karena nilai
terbesar yang bisa disimpan dalam suatu variabel bertipe int adalah
int nilai = 2147483647
+ 1; // nilai akan menjadi
-2147483648
Overflow
juga akan terjadi pada statemen berikut ini, karena nilai terkecil yang dapat
disimpan oleh suatu variabel bertipa int adalah
int nilai = -2147483649
- 1; // nilai akan menjadi 2147483647
JAVA
tidak memberikan peringatan atau pesan kesalahan. Jadi, Anda mesti
berhati-hati bila bekerja dengan angka-angka yang dekat dengan rentang
maksimum atau minimum dari tipe yang diberikan.
Ketika
suatu bilangan pecahan terlalu kecil untuk disimpan, maka akan mengakibatkan
underflow. Jika ini terjadi, JAVA akan membulatkannya menjadi nol. Jadi, Anda
tidak perlu khawatir dengan underflow ini.
|
2.8.1 Operator
Numerik
Operator-operator untuk tipe data
numerik mencakup: penjumlahan (+), pengurangan (-), perkalian (*), pembagian
(/), dan modulus (%), seperti yang ditampilkan pada Tabel 2.3.
Ketika dua operand dari operator
pembagian adalah integer, maka hasilnya akan integer. Bagian fraksional akan
dibuang. Misalnya, 5/2 akan menghasilkan 2, bukan 2.5, dan -5/2 akan
menghasilkan -2, bukan -2.5. Untuk melakukan pembagian matematik, salah satu
operand harus pecahan. Sebagai contoh, 5.0/2 akan menghasilkan 2.5.
Tabel 2.3 Operator-Operator Numerik
Nama
|
Arti
|
Contoh
|
Hasil
|
+
-
*
/
%
|
Penjumlahan
Pengurangan
Perkalian
Pembagian
Modulus
|
34 + 3
34.0 – 0.1
300 * 30
1.0 / 2.0
20
% 3
|
37
33.9
9000
0.5
2
|
Operator % menghasilkan sisa
setelah pembagian. Operator sisi kiri disebut dengan dividend dan operand
sebelah kanan disebut dengan divisor. Oleh karena itu, 7 % 3 akan menghasilkan
1, 12 % 4 akan menghasilkan 0, 25 % 4 akan menghasilkan 1, dan 21 % 7 akan
menghasilkan 0.
Operator % seringkali dipakai
untuk integer positif tetapi bisa juga digunakan untuk integer negatif dan
nilai-nilai pecahan. Sisa bernilai negatif jika dividend negatif. Sebagai
contoh, -7 % 3 menghasilkan -1, -12 % 4 menghasilkan 0, -26 % -8 menghasilkan
-2, dan 20 % -3 menghasilkan 7.
Operasi modulus dalam pemrograman
sangat berguna. Sebagai contoh, suatu bilangan genap % 2 akan selalu
menghasilkan sisa 0 dan suatu bilangan ganjil % 2 akan selalu menghasilkan sisa
1. Jadi, Anda bisa memanfaatkan watak ini untuk menentukan apakah suatu angka
ganjil atau genap. Jika hari ini adalah Sabtu, maka 7 hari lagi akan Sabtu
kembali. Seandainya, Anda dan teman Anda bertemu kembali 10 hari lagi, apakah
hari 10 hari lagi? Anda bisa menemukan jawabannya adalah Selasa, menggunakan
ekspresi berikut ini:
Kode2.4 memberikan suatu program
untuk mendapatkan menit dan sisa detik dari sejumlah waktu dalam detik. Sebagai
contoh, 500 detik memuat 8 menit dan 20 detik.
Kode2.4 TampilWaktu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.Scanner;
public class TampilWaktu {
public static void main(String[] args) {
Scanner masukan = new Scanner(System.in);
// Meminta
pengguna untuk memberikan masukan
System.out.print("Masukkan suatu integer untuk detik:
");
int detik = masukan.nextInt();
int menit = detik / 60; // Mencari menit
int sisaDetik = detik % 60; // Sisa detik
System.out.println(detik
+ " detik adalah " +
menit +
"
menit dan " + sisaDetik + "
detik");
}
}
|
Keluaran
Masukkan suatu integer untuk detik: 3456
3456 detik adalah 57 menit dan 36 detik
Metode nextInt() (baris 8) membaca suatu integer untuk detik. Baris 4 memperoleh menit menggunakan detik / 60. Baris 5 (detik %
6) memperoleh sisa detik.
Operator + dan – dapat menjadi unary dan biner. Suatu operator unary hanya memiliki satu operand; suatu
operator biner memiliki dua operand. Sebagai contoh, operator – dalam -5 adalah suatu operator unary untuk
menegasikan angka 5, sedangkan
operator – dalam 4 – 5 adalah suatu
operator biner untuk mengurangkan 5
dari 4.
Kalkulasi yang melibatkan angka-angka pecahan akan
mengalami pembulatan karena angka-angka ini tidak disimpan dengan akurasi
yang utuh. Sebagai contoh,
System.out.println(1.0
- 0.1 - 0.1 - 0.1 - 0.1 - 0.1);
menampilkan 0.5000000000000001, bukan 0.5, dan
System.out.println(1.0
- 0.9);
menampilkan
0.09999999999999998,
bukan 0.1. Integer disimpan dengan
akurasi penuh. Oleh karena itu, kalkulasi yang melibatkan angka-angka integer
akan menghasilkan keluaran yang tepat.
|
2.8.2 Literal
Numerik
Literal merupakan suatu nilai
konstan yang muncul secara langsung dalam program. Sebagai contoh, 34 dan 0.305
adalah dua literal dalam kode berikut ini:
int jumlahTahun = 34;
double berat = 0.305;
Literal
Integer
Suatu literal integer dapat
ditugaskan kepada suatu variabel integer. Error kompilasi akan diberikan
kompiler bila literal terlalu besar untuk ditampung oleh variabel yang
bersangkutan. Statemen byte b = 128,
misalnya, akan menyebabkan error kompilasi, karena nilai 128 tidak bisa
ditampung oleh variabel bertipe byte.
(Perhatikan bahwa rentang nilai tipe byte
adalah -128 sampai 127).
Suatu literal integer diasumsikan
bertipe int, yang memiliki rentang
nilai
(-2147483648) sampai
(2147483647). Untuk menandai suatu literal bertipe long, tambahkan huruf L atau l, misalnya 2147483647L. Huruf L lebih diinginkan dari l (huruf kecil dari L), karena l mirip sekali dengan angka 1. Untuk menuliskan 2147483648 dalam program JAVA, maka Anda harus menuliskannya
sebagai 2147483648L,
karena 2147483648 melebihi daya tampung variabel int.
Secara default, suatu integer lateral adalah suatu
angka desimal integer. Untuk menandai suatu literal integer oktal, gunakan 0 (nol)
di depan, dan untuk menandai suatu literal integer heksadesimal, gunakan 0x
atau 0X di depan. Misalnya, kode berikut ini menampilkan nilai desimal 65535:
System.out.println(0xFFFF);
|
Literal Pecahan
Literal pecahan ditulis dengan
titik desimal. Secara default, suatu literal pecahan diperlakukan sebagai suatu
nilai bertipe double. Misalnya, 5.0
dianggap sebagai suatu nilai double,
bukan float. Anda bisa menambahkan
huruf f atau F untuk menciptakan suatu literal float, dan Anda bisa menambahkan huruf d atau D untuk
menciptakan suatu literal double. Misalnya,
Anda bisa menggunakan 100.2f atau 100.2F untuk suatu literal float, dan 100.2d atau 100.2D untuk
suatu literal double.
Nilai-nilai bertipe double lebih akurat daripada yang bertipe float.
Misalnya,
System.out.println("1.0
/ 3.0 adalah " + 1.0 / 3.0);
menampilkan
1.0 / 3.0 is 0.3333333333333333.
System.out.println("1.0F
/ 3.0F adalah " + 1.0F / 3.0F);
menampilkan 1.0F / 3.0F is 0.33333334.
|
Notasi
Spesifik
Literal pecahan dapat pula
dispesifikasi dalam notasi spesifik; misalnya, 1.23456e+2 sama dengan
1.23456e2, ekivalen dengan
,
dan 1.23456e-2
ekivalen dengan
.
E atau e merepresentasikan eksponen dapat digunakan dengan huruf besar
atau huruf kecil.
2.8.3 Mengevaluasi
Ekspresi JAVA
Menulis
ekspresi numerik dalam JAVA melibatkan penerjemahan secara langsung atas suatu
ekspresi aritmatik menggunakan operator-operator JAVA. Sebagai contoh, ekspresi
aritmatik
dapat
diterjemahkan langsung menjadi suatu ekspresi JAVA sebagai
Meskipun
JAVA memiliki caranya sendiri dalam mengevaluasi suatu ekspresi di balik layar,
hasil atas suatu ekspresi JAVA dan ekspresi aritmatik adalah sama. Oleh karena
itu, Anda dapat dengan aman menerapkan aturan aritmatik dalam mengevaluasi
suatu ekspresi JAVA. Operator-operator yang berada di dalam kurung dievaluasi
terlebih dahulu. Operator perkalian, pembagian, dan modulus dievaluasi kemudian.
Jika suatu ekspresi memuat beberapa operator perkalian, pembagian, dan modulus,
maka dievaluasi dari kiri ke kanan. Operator penjumlahan dan pengurangan
dievaluasi belakangan. Jika suatu ekspresi memuat beberapa operator penjumlahan
dan pengurangan, maka dievaluasi dari kiri ke kanan. Berikut adalah suatu
contoh bagaimana suatu ekspresi dievaluasi:
Kode2.5 memberikan suatu program
yang mengubah derajat Fahrenheit menjadi derajat Celcius menggunakan formula
.
Kode2.5 TampilWaktu.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.Scanner;
public class FahrenheitKeCelsius {
public static void main(String[]
args) {
Scanner masukan
= new Scanner(System.in);
System.out.print("Masukkan derajat Fahrenheit: ");
double
fahrenheit = masukan.nextDouble();
// Konversi Fahrenheit menjadi
Celsius
double
celsius = (5.0 / 9)*
(fahrenheit - 32);
System.out.println("Fahrenheit " + fahrenheit
+ " adalah " +
celsius + " dalam Celsius");
}
}
|
Keluaran
Masukkan derajat Fahrenheit: 100
Fahrenheit 100.0 adalah 37.77777777777778 dalam Celsius
Hati-hati dalam melakukan operasi
pembagian. Pembagian dua integer akan menghasilkan suatu integer dalam JAVA.
diterjemahkan menjadi
pada baris 11, karena
akan menghasilkan 0 dalam JAVA.
2.9 Masalah:
Menampilkan Waktu Saat Ini
Tantangan di sini adalah membuat
suatu program untuk menampilkan waktu saat ini dalam GMT (Greenwich Mean Time) dalam format jam:menit:detik, seperti
19:23:55.
Metode CurrentTimeMillis dalam kelas System
memberikan nilai balik berupa waktu saat ini dalam milidetik terhitung sejak
00:00:00 pada 1 Januari 1970 GMT, seperti yang ditampilkan pada Gambar 2.2. Waktu
ini dikenal dengan Unix Epoch, karena tahun 1970 merupakan tahun ketika sistem
operasi UNIX secara formal dikenalkan.
Anda bisa menggunakan metode ini
untuk mendapatkan waktu saat ini, dan kemudian menghitung detik, menit, dan jam
saat ini sebagai berikut:
- Mendapatkan total milidetik sejak tengah malam 1 Januari 1970, dalam totalMillidetik dengan memanggil CurrentTimeMillis() (misalnya, 1203183086328 milidetik).
- Mendapatkan total detik totalDetik dengan membagi totalMillidetik dengan 1000 (misalnya, 1203183086328 milidetik / 1000 = 1203183086 detik).
- Mendapatkan detik saat ini dari totalDetik % 60 (misalnya, 1203183086 detik % 60 = 26, yang merupakan detik saat ini).
- Mendapatkan total menit totalMenit dengan membagi totalDetik dengan 60 (misalnya, 1203183086 detik / 60 = 20053051 menit).
- Mendapatkan menit saat ini dari totalMenit % 60 (misalnya, 20053051 menit % 60 = 31, yang merupakan menit saat ini).
- Mendapatkan total jam totalJam dengan membagi totalMenit dengan 60 (misalnya, 20053051 menit / 60 = 334217 jam).
- Mendapatkan jam saat ini dari totalJam % 24 (misalnya, 334217 jam % 24 = 17, yang merupakan jam saat ini).
Kode2.6
memberikan program yang utuh.
Kode2.6 TampilWaktuSekarang.java
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
|
public class TampilWaktuSekarang {
public static void main(String[] args) {
// Mendapatkan total
milidetik sejak tengah malam 1 Januari 1970
long totalMillidetik = System.currentTimeMillis();
// Mendapatkan total
detik sejak tengah malam 1 Januari 1970
long totalDetik = totalMillidetik / 1000;
// Menghitung detik
saat ini
long detikSekarang = (int)(totalDetik % 60);
// Mendapatkan total
menit
long totalMenit = totalDetik / 60;
// Menghitung menit
saat ini
long menitSekarang = totalMenit % 60;
// Mendapatkan total
jam
long totalJam = totalMenit / 60;
// Menghitung jam
saat ini
long jamSekarang = totalJam % 24;
// Menampilkan hasil
System.out.println("Waktu
saat ini adalah " + jamSekarang + ":"
+ menitSekarang +
":" + detikSekarang + " GMT");
}
}
|
Keluaran
Waktu saat ini adalah 14:22:22 GMT
2.10 Operator-Operator
Shorthand
Sering
ditemukan bahwa nilai sekarang dari suatu variabel digunakan, dimodifikasi dan
kemudian ditugaskan kembali ke variabel tersebut. Sebagai contoh, statemen
berikut ini menambahkan nilai sekarang dari i dengan 8 dan
menugaskan hasilnya kembali kepada i:
i = i +
8;
JAVA
mengijinkan Anda untuk menggabungkan penugasan dengan operator penjumlahan
menggunakan suatu operator shorthand.
Sebagai contoh, statemen di atas dapat dituliskan kembali sebagai:
i += 8;
Operator
+= disebut dengan operator penugasan
penjumlahan. Operator-operator shorthand
lainnya ditampilkan pada Tabel 2.4.
Tabel 2.4 Operator-Operator Shorthand
Operator
|
Nama
|
Contoh
|
Ekivalen
|
+=
-=
*=
/=
%=
|
Penugasan
penjumlahan
Penugasan
pengurangan
Penugasan
perkalian
Penugasan
pembagian
Penugasan
modulus
|
i += 8
i -= 8
i *= 8
i /= 8
i %= 8
|
i = i + 8
i = i – 8
i = i * 8
i = i / 8
i = i % 8
|
Tidak boleh ada spasi dalam operator shorthand.
Misalnya, + = seharusnya +=.
Sama seperti operator penugasan (=), operator-operator
shorthand (+=, -=, *=, /=, dan %=) dapat dijadikan statemen penugasan dan
juga sebagai ekspresi. Sebagai contoh, kode berikut ini, x += 2 adalah suatu
statemen dalam baris pertama dan sebagai suatu ekspresi pada baris kedua:
x += 2; // statemen
System.out.println(x += 2);
// ekspresi
|
Tabel 2.5 Operator-Operator Inkremen dan
Dekremen
Operator
|
Nama
|
Penjelasan
|
Contoh
(asumsi i = 1)
|
++var
var++
--var
var--
|
Prainkremen
Postinkremen
Pradekremen
Postdekremen
|
Menginkremen
var sebanyak 1dan menggunakan
nilai var yang baru
Menginkremen
var sebanyak 1 tetapi menggunakan
nilai var yang asli
Mendekremen
var sebanyak 1dan menggunakan
nilai var yang baru
Menginkremen
var sebanyak 1 tetapi menggunakan
nilai var yang asli
|
int j = ++i
// j = 2, i = 2
int j = i++
// j = 1, i = 2
int j = --i
// j = 0, i = 0
int j = i--
// j = 1, i = 0
|
Terdapat
dua operator shorthand untuk
menginkremen dan mendekremen suatu variabel dengan 1. Kedua operator tersebut adalah ++ dan --. Sebagai contoh, kode
berikut menginkremen i dengan 1 dan
mendekremen j dengan 1:
int
i = 3,
j = 3;
i++;
// i menjadi 4
j--; // j menjadi 2
Operator
++ dan -- dapat digunakan dalam mode prefiks dan suffiks, seperti ditampilkan
pada Tabel 2.5.
Jika
operator berada sebelum (prefiks) variabel, maka variabel diinkremen atau
didekremen sebanyak 1, dan nilai variabel yang baru diberikan sebagai nilai
balik. Jika operator berada setelah (suffiks) variabel, maka maka variabel
diinkremen atau didekremen sebanyak 1, tetapi nilai variabel yang asli
diberikan sebagai nilai balik. Oleh karena itu, kedua prefiks ++x dan --x disebut dengan operator preinkremen dan operator predekremen,
dan kedua suffiks x++ dan x-- disebut dengan operator
postinkremen dan operator postdekremen. Kode berikut ini mengilustrasikan
fenomena ini:
Pada
kasus ini, i diinkremen dengan 1,
kemudian nilai lama dari i dijadikan
nilai balik dan digunakan untuk perkalian. Jadi newNum menjadi 100. Jika i++
digantikan dengan ++i, maka
Pada
kasus ini, i diinkremen dengan 1,
kemudian nilai baru dari i dijadikan
nilai balik dan digunakan untuk perkalian. Jadi newNum menjadi 110. Berikut ini diberikan contoh lain:
double
x = 1.0;
double
y = 5.0;
double z = x–– +
(++y);
Setelah
tiga baris kode di atas dieksekusi, maka y
menjadi 6.0, z menjadi 7.0, dan x menjadi 0.0.
Operator
inkremen dan dekremen dapat diterapkan baik untuk integer maupun untuk pecahan.
Kedua operator tersebut seringkali digunakan di dalam loop. Statemen loop
merupakan suatu konstruksi yang mengendalikan berapa kali suatu operasi atau
suatu runtun operasi dilakukan secara berurutan. Topik tentang loop akan
dibahas pada Bab. 4.
2.11 Konversi
Tipe Numerik
Dapatkah
Anda melakukan operasi-operasi biner terhadap dua operand yang berbeda tipe?
Ya. Jika suatu integer dan suatu pecahan dilibatkan dalam suatu operasi biner,
maka JAVA secara otomatis mengkonversi integer menjadi nilai pecahan. Jadi, 3 * 4.5 sama dengan 3.0 * 4.5.
Anda
juga bisa menugaskan suatu nilai kepada suatu variabel numerik yang memiliki
rentang nilai yang lebih besar, misalnya, Anda bisa menugaskan suatu nilai long kepada suatu variabel float. Namun, Anda tidak bisa
menugaskan suatu nilai kepada suatu variabel numerik yang memiliki rentang
nilai yang lebih kecil, kecuali jika Anda melakukan type casting. Casting
merupakan suatu operasi yang mengkonversi suatu nilai menjadi bertipe lain.
Melakukan casting terhadap suatu
variabel dengan rentang nilai kecil menjadi suatu variabel dengan rentang nilai
lebih besar disebut juga dengan pelebaran tipe. Melakukan casting terhadap suatu variabel dengan rentang nilai besar menjadi
suatu variabel dengan rentang nilai lebih kecil disebut juga dengan penyempitan
tipe. Pelebaran tipe dapat dilakukan secara otomatis tanpa memerlukan casting eksplisit, sedangkan penyempitan
tipe harus dilakukan dengan casting
eksplisit.
Sintaks
untuk tipe target berada di dalam kurung, diikuti dengan nama variabel atau
nilai yang akan dicast. Misalnya,
statemen berikut
System.out.println((int)1.7);
menampilkan
nilai 1. Ketika suatu nilai double
dicast menjadi suatu nilai int, maka bagian fraksional akan
dibuang. Statemen berikut
System.out.println((double)1
/ 2);
menampilkan
nilai 0.5, karena pertama-tama 1 dicast menjadi 1.0, kemudian 1.0 dibagi dengan
2. Namun, statemen berikut
System.out.println(1 / 2);
menampilkan
0, karena 1 dan 2 keduanya integer, jadi nilai yang dihasilkan berupa suatu
integer.
Casting penting bila Anda menugaskan suatu nilai
kepada suatu variabel dengan rentang tipe yang lebih kecil, seperti
menugaskan suatu nilai double kepada suatu variabel int. Error
kompilasi akan terjadi bila casting digunakan pada situasi yang tidak seperti
ini. Perlu berhati-hati bila melakukan casting, karena kehilangan informasi
bisa mengakibatkan hasil tidak akurat.
Casting tidak mengubah variabel yang sedang dicast.
Sebagai contoh, d tidak berubah setelah casting dalam kode berikut
ini:
double
d = 4.5;
int i = (int)d; // i menjadi 4, tetapi d tidak berubah,
masih 4.5
Untuk menugaskan suatu variabel bertipe int kepada
suatu variabel bertipe short atau byte, casting eksplisit diperlukan. Sebagai contoh,
statemen berikut ini mengakibatkan error kompilasi:
int
i = 1;
byte b = i; // error, karena casting eksplisit
diperlukan
|
Kode2.7
memberikan suatu program untuk menampilkan pajak penjualan dengan resolusi dua
dijit setelah titik desimal.
Kode2.7 PajakPenjualan.java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Scanner;
public class PajakPenjualan {
public static void main(String[] args) {
Scanner masukan = new Scanner(System.in);
System.out.print("Masukkan Jumlah Pembelian: ");
double jumlahBeli = masukan.nextDouble();
double pajak = jumlahBeli * 0.06;
System.out.println("Pajak Penjualan adalah "+(int)(pajak*100)/100.0);
}
}
|
Keluaran
Masukkan Jumlah Pembelian: 197.55
Pajak Penjualan adalah 11.85
Variabel
jumlahBeli adalah 197.55 pada baris
8. Pajak penjualan adalah 6% dari pembelian, sehingga pajak yang dihasilkan sebesar 11.85
(baris 10). Perhatikan bahwa
pajak
* 100 adalah 1185.3
(int)(pajak
* 100) adalah 1185
(int)(pajak
* 100) / 100.0 adalah 11.85
Jadi,
statemen pada baris 11 menampilkan pajak
sebesar 11.85, dengan dua dijit setelah titik desimal.
2.12 Masalah:
Menghitung Pembayaran Pinjaman
Masalah
yang dicoba untuk diselesaikan di sini adalah menghitung pembayaran pinjaman. Pinjaman
bisa jadi cicilan mobil, rumah, atau hutang di bank. Program meminta pengguna
untuk memasukkan laju suku bunga, jumlah tahun, dan jumlah pinjaman, dan menampilkan
pembayaran total dan bulanan.
Formula
untuk menghitung pembayaran bulanan adalah sebagai berikut:
Anda
tidak perlu tahu bagaimana formula di atas didapatkan. Jika diberikan suku
bunga bulanan, jumlah tahun, dan jumlah pinjaman, maka Anda bisa menggunakan
formula itu untuk menghitung pembayaran bulanan.
Di
dalam formula, Anda diminta untuk menghitung
. Metode pow(a, b) dalam kelas Math
dapat digunakan untuk menghitung
. Kelas Math, yang berasal dari JAVA API, tersedia untuk seluruh program
JAVA. Misalnya,
System.out.println(Math.pow(2,
3)); // menampilkan 8
System.out.println(Math.pow(4,
0.5)); // menampilkan 4
Berikut
adalah langkah-langkah untuk mengembangkan program:
- Minta pengguna untuk memasukkan laju suku buka tahunan, jumlah tahun, dan jumlah pinjaman.
- Dapatkan suku bunga bulanan dari suku bunga tahunan.
- Hitung pembayaran bulanan menggunakan formula yang diberikan.
- Hitung total pembayaran, yaitu pembayaran bulanan dikalikan dengan 12 dan dikalikan dengan jumlah tahun.
- Tampilkan pembayaran bulanan dan total pembayaran.
Kode2.8 memberikan program utuh.
Kode2.8 HitungHutang.java
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
|
import java.util.Scanner;
public class HitungHutang {
public static void main(String[] args) {
// Ciptakan
Scanner
Scanner masukan = new Scanner(System.in);
// Masukkan suku
bunga tahunan
System.out.print("Masukkan
laju suku bunga tahunan, misalnya 11.25: ");
double
sukuBungaTahunan = masukan.nextDouble();
// Dapatkan suku
bunga bulanan
double sukuBungaBulanan =
sukuBungaTahunan / 1200;
// Masukkan jumlah
tahun
System.out.print(
"Masukkan jumlah
tahun (sebagai integer), misalnya 5: ");
int
jumlahTahun = masukan.nextInt();
// Masukkan jumlah
pinjaman
System.out.print("Masukkan
jumlah pinjaman, misalnya 1234.95: ");
double
jumlahPinjaman = masukan.nextDouble();
// Hitung
pembayaran
double pembayaranBulanan= jumlahPinjaman *
sukuBungaBulanan / (1 –
1 / Math.pow(1 + sukuBungaBulanan,
jumlahTahun * 12));
double pembayaranTotal= pembayaranBulanan * jumlahTahun *
12;
// Tampilkan hasil
System.out.println("Pembayaran bulanan adalah "
+
(int)(pembayaranBulanan * 100) /
100.0);
System.out.println("Total pembayaran adalah "
+
(int)(pembayaranTotal * 100) / 100.0);
}
}
|
Keluaran
Masukkan laju suku bunga tahunan, misalnya 11.25: 5.75
Masukkan jumlah tahun (sebagai integer), misalnya 5: 15
Masukkan jumlah pinjaman, misalnya 1234.95: 250000
Pembayaran bulanan adalah 2076.02
Total pembayaran adalah 373684.53
Baris
10 membaca suku bunga tahunan, yang dikonversi menjadi suku bunga bulanan pada
baris 13. Jika Anda masukkan suatu masukan yang bukan numerik, maka error runtime akan terjadi.
Pilih
tipe data variabel yang sesuai dengan kebutuhan. Misalnya, jumlahTahun paling baik dideklarasikan sebagai int (baris 18), meskipun bisa saja dideklarasikan sebagai float, long, atau double.
Perhatikan bahwa byte mungkin yang
paling cocok untuk jumlahTahun,
tetapi demi penyederhanaan, maka di buku ini digunakan int untuk integer dan double
untuk pecahan.
Formula
untuk menghitung pembayaran bulanan diterjemahkan menjadi kode JAVA pada baris
25 sampai baris 27. Casting digunakan
pada baris 31 dan 33 untuk mendapatkan pembayaranBulanan
dan pembayaranTahunan dengan dua
dijit setelah titik desimal.
2.13 Operasi
dan Tipe Data Karakter
Tipe
data karakter, char, digunakan untuk merepresentasikan suatu karakter tunggal.
Suatu literal karakter diapit oleh tanda kutip tunggal. Perhatikan kode
berikut:
char
huruf = 'A';
char angKar = '4';
Statemen
pertama menugaskan karakter A kepada
suatu variabel char, huruf. Statemen kedua menugaskan
karakter dijit 4 kepada suatu
variabel char, angKar.
2.13.1 Kode
Unicode dan ASCII
Komputer
menggunakan biner secara internal. Suatu karakter disimpan dalam komputer
sebagai runtun 0 dan 1. Memetakan suatu karakter menjadi representasi binernya
disebut dengan pengkodean. Ada berbagai cara untuk mengkodekan suatu karakter.
Bagaimana karakter-karakter dikodekan didefinisikan oleh suatu skema
pengkodean.
JAVA
mendukung Unicode, suatu skema
pengkodean yang dibuat oleh Unicode Consortium untuk mendukung saling-tukar,
pemrosesan, dan penampilan teks tertulis dari berbagai bahasa di dunia. Unicode pertama kali dirancang sebagai
pengkodean karakter 16-bit. Tetapi, ternyata bahwa 65.536 jenis karakter yang
mungkin dalam pengkodean 16-bit tidak cukup untuk merepresentasikan semua
karakter di dunia. Oleh karena itu, Unicode
standar diperluas sehingga sampai 1.112.064 karakter. Karakter-karater yang
melebihi batas 16-bit disebut pula dengan karakter-karakter tambahan atau
suplementer. JAVA mendukung karakter-karakter suplementer. Pemrosesan dan
representasi karakter-karakter suplementer tidak dirangkum dalam buku ini.
Untuk penyederhanaan, buku ini hanya mendiskusikan karakter-karakter Unicode 16-bit saja, yang disimpan dalam
suatu variabel bertipe char.
Suatu
Unicode 16-bit memerlukan dua byte,
diawali dengan \u, diekspresikan
dengan empat dijit heksadesimal yang memiliki rentang dari ‘\u0000’ sampai ‘\uFFFF’.
Berikut diberikan Kode2.9 yang menampilkan dua karakter Chinese dan dua
karakter Yunani:
Kode2.9 TampilUnicode.java
1
2
3
4
5
6
7
8
9
10
|
import javax.swing.JOptionPane;
public class TampilUnicode {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"\u6B22\u8FCE \u03b1 \u03b2
\u03b3",
"\u6B22\u8FCE JAVA",
JOptionPane.INFORMATION_MESSAGE);
}
}
|
Keluaran
Jika
font Chinese tidak terinstall di komputer Anda, maka Anda tidak akan bisa
melihat karakter-karakter keluaran di atas. Unicode
untuk huruf Yunani
adalah \u03b1
\u03b2 \u03b3.
Kebanyakan
komputer menggunakan ASCII (American
Standard Code for Information Interchange), skema pengkodean untuk
merepresentasikan semua huruf-huruf besar/kecil, dijit, tanda baca, dan
karakter-karakter kontrol. Unicode memuat kode ASCII, dengan ‘\u0000’ sampai ‘\u007F’, karena berkaitan dengan 128 buah karakter ASCII. Anda
dapat menggunakan karakter-karakter ASCII seperti ‘X’, ‘1’, dan ‘$’ dalam suatu
program JAVA, sama halnya seperti Unicode. Jadi, sebagai contoh,
statemen-statemen berikut ini adalah ekivalen:
char
huruf = 'A';
char huruf = '\u0041';
// Unicode untuk Karakter untuk A adalah 0041
Kedua
statemen di atas sama-sama menugaskan karakter A kepada variabel char, huruf.
Operator-operator inkremen dan dekremen dapat juga
diterapkan pada variabel char untuk mendapatkan karakter Unicode sebelum atau
sesudahnya. Sebagai contoh, statemen-statemen berikut ini menampilkan
karakter b:
char
ch = 'a';
System.out.println(++ch);
|
2.13.2 Runtun
Escape untuk Karakter Spesial
Seandainya
Anda ingin menampilkan suatu pesan dengan tanda-tanda baca pada keluaran.
Dapatkah Anda menuliskan statemen seperti ini?
System.out.println("Saya
mengatakan "Java itu Tangguh"");
Jawabannya
Anda tidak bisa, karena statemen di atas mempunya error sintaks. Kompiler
berpikir bahwa karakter kutip ganda kedua adalah akhir dari string dan tidak
mengetahui apa yang harus dilakukan terhadap sisa karakter yang lain.
Untuk
mengatasi hal ini, JAVA mendefinisikan beberapa runtun escape untuk merepresentasikan karakter-karakter spesial seperti
tertampil pada Tabel 2.6. Suatu runtun escape
dimulai dengan karakter backslash (\)
yang diikuti dengan suatu karakter yang memiliki arti spesial bagi kompiler.
Jadi,
Anda dapat menampilkan pesan terkutip menggunakan statemen berikut ini:
System.out.println("Saya
mengatakan \"Java itu Tangguh\"");
Keluarannya
adalah
Saya mengatakan "Java itu
Tangguh”
Tabel 2.6 Runtun-Runtun Escape JAVA
Runtun
escape
|
Nama
|
Kode Unicode
|
\b
\t
\n
\f
\r
\\
\’
\”
|
Backspace
Tab
Linfeed
Formfeed
Carriage Return
Backslash
Single Quote
Double Quote
|
\u0008
\u0009
\u000A
\u000C
\u000D
\u005C
\u0027
\u0022
|
2.13.3 Casting
antara char dan Tipe-Tipe Numerik
Suatu
char dapat dicast menjadi sembarang tipe numerik, dan sebaliknya. Ketika suatu
integer dicast menjadi suatu char, hanya 16 bit terbawah saja yang
digunakan. Sisa bit yang lain diabaikan. Sebagai contoh:
char
ch = (char)0XAB0041;
// 16 bit terbawah dari kode hex 0041
// ditugaskan kepada ch
System.out.println(ch);
// ch adalah karakter A
Ketika
suatu nilai pecahan dicast menjadi
suatu char, maka nilai pecahan
tersebut pertama-tama dicast menjadi
suatu int, yang kemudian dicast kembali menjadi suatu char:
char
ch = (char)65.25;
// desimal 65 ditugaskan kepada ch
System.out.println(ch);
// ch adalah karakter A
Ketika
suatu char dicast menjadi suatu tipe numerik, Unicode dari karakter dicast menjadi tipe numerik yang
dispesifikasi:
int
i = (int)'A';
// Unicode dari karakter A ditugaskan
kepada i
System.out.println(i);
// i adalah 65
Casting
implisit dapat digunakan jika hasil suatu casting
cocok dengan variabel target. Di luar itu, casting
eksplisit harus digunakan. Sebagai contoh, karena Unicode dari ‘u’ adalah 97, yang masih berada dalam
rentang tipe byte, maka casting implisit baik-baik saja:
byte
b = 'a';
int i = 'a';
Tetapi
casting berikut ini tidak benar,
karena Unicode \uFFF4 tidak cocok menjadi byte:
byte b = '\uFFF4';
Untuk
memaksa penugasan, gunakan casting
eksplisit, sebagai berikut:
byte b = (byte)'\uFFF4';
Sembarang
integer positif antara 0 sampai FFFF dalam heksadesimal dapat dicast menjadi suatu karakter secara
implisit. Sembarang nilai yang berada di luar rentang tersebut harus dicast secara eksplisit.
Semua operator numerik bisa diterapkan pada operand char.
Operand char secara otomatis dicast menjadi suatu angka bila
operand yang lain berupa angka atau karakter. Jika operand yang lain berupa
suatu string, maka karakter tersebut akan disambung di belakang string.
Sebagai contoh, statemen-statemen berikut
int
i = '2'
+ '3'; // (int)'2' adalah 50 dan (int)'3' adalah 51
System.out.println("i
adalah " + i); // i adalah 101
int
j = 2 +
'a'; // (int)'a' adalah 97
System.out.println("j
adalah " + j); // j adalah 99
System.out.println(j
+ " adalah Unicode untuk karakter "
+
(char)j);
System.out.println("Bab
" + '2');
menampilkan
i
adalah 101
j
adalah 99
99
adalah Unicode untuk karakter
c
Bab 2
|
2.14 Masalah:
Menghitung Unit Moneter
Seandainya
Anda ingin mengembangkan suatu program yang dapat mengklasifikasikan sejumlah
uang menjadi unit-unit moneter yang lebih kecil. Program mengijinkan penggunan
untuk memasukkan sejumlah uang sebagai suatu nilai double yang merepresentasikan total dalam dollar dan sen, dan
keluaran program melaporkan unit-unit moneter dalam dolar, quarter, dime,
nickel, dan penny.
Program
Anda juga harus melaporkan jumlah maksimum dolar, jumlah maksimum quarter, dan
seterusnya. Berikut adalah langkah-langkah untuk mengembangkan program
tersebut:
- Minta pengguna untuk memasukkan suatu angka desimal, seperti 11.56.
- Konversi angka tersebut (misal, 11.56) menjadi sen (1156).
- Bagi sen tersebut dengan 100 untuk mendapatkan jumlah dollar. Dapatkan sisa sen menggunakan modulus 100.
- Bagi sisa sen dengan 25 untuk menemukan jumlah quarter. Dapatkan sisa sen menggunakan modulus 25.
- Bagi sisa sen dengan 10 untuk menemukan jumlah dime. Dapatkan sisa sen menggunakan modulus 10.
- Bagi sisa sen dengan 5 untuk menemukan jumlah nickel. Dapatkan sisa sen menggunakan modulus 5.
- Sen yang tersisa adalah jumlah penny.
- Tampilkan hasil.
Program
seutuhnya ditampilkan pada Kode2.10.
Kode2.10 TampilUnicode.java
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
38
39
40
41
42
43
|
import java.util.Scanner;
public class HitungKembalian {
public static void main(String[] args) {
// Ciptakan
Scanner
Scanner masukan = new Scanner(System.in);
// Terima jumlah dolar
System.out.print(
"Masukkan sejumlah nilai dalam
double, misalnya 11.56: ");
double
jumlah = masukan.nextDouble();
int sisaJumlah = (int)(jumlah * 100);
// Cari jumlah satu dolar
int jumlahSatuDolar = sisaJumlah /
100;
sisaJumlah = sisaJumlah % 100;
// Cari jumlah quarter dalam sisa jumlah
int jumlahQuarter = sisaJumlah / 25;
sisaJumlah = sisaJumlah % 25;
// Cari jumlah dime dalam sisa jumlah
int jumlahDime = sisaJumlah / 10;
sisaJumlah = sisaJumlah % 10;
// Cari jumlah nickel dalam sisa jumlah
int jumlahNickel = sisaJumlah / 5;
sisaJumlah = sisaJumlah % 5;
// Cari jumlah penny dalam sisa jumlah
int jumlahPenny = sisaJumlah;
// Tampilkan hasil
System.out.println("Nilai yang Anda masukkan " + jumlah +
" terdiri-dari \n" +
"\t" + jumlahSatuDolar + " dolar\n" +
"\t" + jumlahQuarter + " quarter\n" +
"\t" + jumlahDime + " dime\n" +
"\t" + jumlahNickel + " nickel\n" +
"\t" + jumlahPenny + " penny");
}
}
|
Keluaran
Masukkan sejumlah nilai dalam double, misalnya 11.56: 11.56
Nilai yang Anda masukkan 11.56 terdiri-dari
11 dolar
2 quarter
0 dime
1 nickel
1 penny
Variabel
jumlah menyimpan angka yang
dimasukkan dari konsol (baris 11). Variabel ini tidak berubah, karena jumlah digunakan pada akhir program
untuk ditampilkan. Program mengintroduksi variabel sisaJumlah (baris 13) untuk menyimpan pengubahan nilai-nilai sisaJumlah.
Variabel
jumlah bertipe double yang merepresentasikan dolar dan sen, yang dikonversi
menjadi suatu variabel int, sisaJumlah, untuk merepresentasikan
sen. Misalnya, jika jumlah adalah
11.56, maka nilai sisaJumlah awalnya
adalah 1156. Operator pembagian menghasilkan bagian integer saja dari hasil
pembagian. Jadi 1156/100 adalah 11. Operator modulus mendapatkan sisa dari
hasil pembagian. Jadi 1156 % 100 adalah 56.
2.15 Tipe
String
Tipe
char merepresentasikan hanya satu
karakter. Untuk merepresentasikan suatu string, dapat digunakan tipe data String. Sebagai contoh, kode berikut
ini mendeklarasikan pesan menjadi suatu string dengan nilai “JAVA itu
Tangguh!”.
String
message = " JAVA itu Tangguh!";
String
merupakan kelas yang telah terdefinisi dalam pustaka JAVA sama seperti kelas System, JOptionPane, dan Scanner.
Tipe String bukanlah tipe primitif,
namun dikenal sebagai tipe referensi. Sembarang kelas JAVA dapat digunakan
sebagai tipe referensi bagi suatu variabel. Tipe data referensi akan
didiskusikan pada Bab. 8. Untuk sementara ini, Anda hanya perlu tahu bagaimana
mendeklarasikan suatu variabel String,
bagaimana menugaskan suatu string kepada suatu variabel, dan bagaimana
menyambung beberapa string.
Sebelumnya
pada Kode2.1, dua string dapat disambungkan. Tanda plus (+) adalah operator penyambungan
jika salah satu operandnya adalah string. Jika salah satu operandnya adalah
tak-string (misalnya, angka), maka nilai tak-string tersebut diubah menjadi
suatu string dan disambungkan dengan string lainnya. Berikut beberapa contoh:
//
Tiga string disambungkan
String
pesan = "JAVA " + "itu " + "Tangguh!";
//
String Bab disambungkan dengan angka 2
String
s = "Bab" + 2; // s menjadi Bab2
//
String Bagian disambungkan dengan karakter B
String s1 = "Bagian"
+ 'B'; // s1 menjadi BagianB
Jika
tidak ada satupun operand string, maka tanda plus (+) akan menjadi operator
penjumlahan yang menjumlahkan dua angka.
Operator
shorthand += dapat juga digunakan
untuk penyambungan string. Misalnya, kode berikut ini menyambungkan string “
dan JAVA itu Menyenangkan” dengan string “JAVA itu Tangguh!” yang ditugaskan
kepada string pesan.
pesan += “ dan JAVA itu
Menyenangkan”;
Jadi
string pesan yang baru akan memuat “JAVA itu Tangguh! dan JAVA itu
Menyenangkan”.
Dimisalkan
bahwa i = 1 dan j = 2, apakah keluaran statemen berikut ini?
System.out.println("i
+ j adalah " + i + j);
Keluarannya
adalah “i + j adalah 12” karena pertama-tama “i + j adalah “ disambungkan
dengan nilai i. Untuk memaksa i + j dieksekusi terlebih dahulu, maka
apit i + j dengan sepasang kurung,
sebagai berikut:
System.out.println("i
+ j adalah " + (i
+ j) );
Untuk
membaca string dari konsol, panggil metode next()
pada suatu objek Scanner. Sebagai
contoh, kode berikut ini membaca tiga string dari keyboard:
Kode2.11 TampilString.java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Scanner;
public class TampilString {
public static void main(String[] args) {
Scanner masukan = new Scanner(System.in);
System.out.println("Masukkan
tiga string: ");
String s1 = masukan.next();
String
s2 = masukan.next();
String
s3 = masukan.next();
System.out.println("s1
adalah " + s1);
System.out.println("s2
adalah " + s2);
System.out.println("s3 adalah
" + s3);
}
}
|
Keluaran
Masukkan tiga string:
Horas Danau Toba
s1 adalah Horas
s2 adalah Danau
s3 adalah Toba
Metode
next() membaca suatu string yang
berakhir dengan spasi putih (misalnya, ‘
‘, ‘\t’, ‘\f’, ‘\r’, atau ‘\n’). Anda bisa menggunakan metode nextLine() untuk membaca keseluruhan
baris teks. Metode nextLine() membaca
suatu string yang berakhir dengan penekanan ENTER. Sebagai contoh,
statemen-statemen berikut ini membaca satu baris teks:
Kode2.12 BacaSebarisString.java
1
2
3
4
5
6
7
8
9
10
|
import java.util.Scanner;
public class BacaSebarisString {
public static void main(String[] args) {
Scanner masukan = new Scanner(System.in);
System.out.println("Masukkan
tiga string: ");
String s = masukan.nextLine();
System.out.println("String
yang Anda masukkan adalah " + s);
}
}
|
Keluaran
Masukkan tiga string:
Teknik Elektro Universitas Gadjah Mada adalah Almamater Penulis.
Di sana dia menimba ilmu selama 5 tahun.
String yang Anda masukkan adalah Teknik Elektro Universitas Gadjah
Mada adalah Almamater Penulis. Di sana dia menimba ilmu selama 5 tahun.
2.16 Gaya
Pemrograman dan Dokumentasi
Gaya
pemrograman sangat terkait dengan penampilan suatu program. Suatu program dapat
dikompilasi dan dijalankan, meski ditulis dalam satu baris, tetapi menuliskan
program dalam suatu baris yang panjang merupakan gaya pemrograman yang buruk
karena sudah pasti susah dibaca dan dipahami. Dokumentasi adalah tubuh catatan
dan komentar penjelasan atas suatu program. Gaya pemrograman dan dokumentasi
sama pentingnya dengan pengkodean (penulisan program). Gaya pemrograman yang
baik dan dokumentasi yang layak akan mengurangi probabilitas kesalahan dan
tentu saja membuat program menjadi lebih mudah dibaca. Sejauh ini, Anda telah
mempelajari gaya pemrograman yang baik. Bagian ini akan merangkum beberapa
panduan singkat mengenai gaya pemrograman dan dokumentasi.
2.16.1 Gaya
Komentar
Hal
ini mencakup komentar pada awal program yang menjelaskan apa yang dilakukan
program, fitur-fitur kunci, dan teknik-teknik khusus yang digunakan. Dalam
suatu program yang panjang, Anda harus menyertakan komentar yang mengenalkan
setiap langkah penting dan menjelaskan apa-apa yang sulit untuk dipahami
pembaca program. Sangatlah penting untuk membuat komentar menjadi ringkas dan
deskriptif sehingga tidak membuat program kelihatan lebih panjang dan terlalu
padat komentar.
Sebagai
tambahan dari komentar baris // dan komentar blok /*, JAVA juga mendukung komentar
dengan tipe spesial, yang dikenal dengan komentar javadoc, yang diawali dengan /** dan diakhiri dengan */. Komentar
tersebut dapat diekstrak menjadi suatu file HTML menggunakan perintah javadoc. Untuk lebih jelasnya tentang
hal ini, silahkan kunjungi java.sun.com/j2se/javadoc.
2.16.2 Konvensi
Penamaan
Pastikan
Anda memilih nama yang deskriptif dengan pengertian jelas untuk variabel,
konstanta, kelas, dan metode dalam program Anda. Penamaan di dalam JAVA
sensitif terhadap huruf besar dan huruf kecil. Berikut ini adalah konvensi
penamaan untuk menamai variabel, kelas, dan metode:
- Gunakan huruf kecil untuk variabel dan metode. Jika nama variabel dan metode terdiri-dari beberapa kata, maka sambungkan, dan buat huruf kecil pada kata pertama dan huruf besar untuk karakter pertama pada kata kedua. Contohnya adalah radius, luas, dan showInputDialog.
- Buat huruf besar untuk karakter pertama nama kelas, misalnya, nama-nama kelas HitungLuas, Matematika, dan JOptionPane.
- Buat huruf besar setiap huruf untuk konstanta, dan gunakan garis-bawah untuk menghubungkan antar kata, misalnya PI dan NILAI_MAKS.
Adalah hal yang penting bagi Anda
untuk mengikuti konvensi penamaan agar program Anda lebih mudah dibaca dan
dipahami.
2.16.3 Spasi
dan Identasi
Gaya
identasi yang konsisten membuat program lebih jelas, gampang dibaca, didebug,
dan dirawat. Identasi digunakan untuk mengilustrasikan hubungan struktural
komponen-komponen atau statemen-statemen suatu program. JAVA dapat memahami
program meskipun semua statemen ditulis dalam satu baris. Tetapi manusia merasa akan lebih nyaman bila
statemen-statemen ditata dengan layak dengan baris yang berbeda. Lakukan
identasi pada tiap subkomponen atau statemen minimal dua spasi.
Spasi
tunggal perlu ditambahkan pada kedua sisi operator, seperti yang ditampilkan
pada statemen ini:
2.16.4 Gaya
Blok
Suatu
blok merupakan sekelompok statemen yang dikelilingi oleh kurung kurawal. Ada
dua gaya blok yang populer, gaya next-line
dan gaya end-of-line, seperti yang
ditunjukkan di bawah ini:
Gaya
next-line mensejajarkan kurung kurawal secara vertikal sehingga program
lebih mudah dibaca, sedangkan gaya next-of-line
menghemat tempat. Kedua gaya blok ini dapat diterima. Pilihannya terletak pada
selera pribadi maupun organisasi. Mencampur kedua gaya blok ini tidak
direkomendasikan. Buku ini menggunakan gaya end-of-line
agar konsisten dengan kode sumber JAVA API.
2.17 Error
Pemrograman
Error
pemrograman tak bisa dihindari, meski untuk programmer yang berpengalaman.
Error dapat dikategorikan menjadi tiga: error sintaks, error runtime, dan error logika.
2.17.1
Error Sintaks
Error
yang terjadi selama kompilasi disebut dengan error sintaks atau error
kompilasi. Error sintaks berasal dari error selama konstruksi kode, seperti
kesalahan ketik, pengabaian beberapa tanda baca, atau kesalahan penggunaan
kurung. Error ini biasanya mudah dideteksi, karena kompiler akan memberitahu
Anda dimana dan apa yang menyebabkannya. Sebagai contoh, program berikut ini memiliki
error kompilasi, seperti yang ditampilkan pada Gambar 2.3.
// TampilSintaksError.java: Program yang memuat error sintaks
public class TampilSintaksError {
public
static void main(String[] args) {
i = 30;
System.out.println(i + 4);
}
}
Ada
tiga error yang terdeteksi. Ketiganya akibat tidak mendeklarasikan variabel i. Dengan mendeklarasikan variabel i, ketiga error akan teratasi.
2.17.2
Error Runtime
Error
runtime merupakan kesalahan yang
menyebabkan program berhenti secara abnormal. Hal ini terjadi pada saat program
sedang berjalan dan kompiler mendeteksi suatu operasi yang tidak mungkin
dilakukan.
Suatu
error masukan terjadi ketika pengguna memasukkan nilai masukan yang tidak
terduga dan tidak bisa diatasi oleh program. Misalnya, jika program
mengharapkan masukan suatu angka, tetapi pengguna malah mengentri suatu string,
maka hal ini menyebabkan error masukan. Untuk mengatasi error masukan, program
harus mendesak pengguna untuk memasukkan nilai-nilai dengan tipe yang tepat.
Salah
satu sumber error runtime adalah
pembagian oleh nol. Hal ini terjadi bila divisor atau pembagi adalah nol.
Misalnya, program berikut ini akan menyebabkan error runtime, seperti tertampil pada Gambar 2.4.
// TampilRuntimeError.java: Program memuat runtime error
public class TampilRuntimeError {
public
static void main(String[] args) {
int
i = 1 / 0 ;
}
}
2.17.3
Error Logika
Error
logika terjadi bila suatu program tidak mengerjakan apa yang diperintahkan.
Error jenis ini terjadi karena berbagai alasan. Sebagai contoh, dimisalkan Anda
menulis program untuk menambahkan angka1
dan angka2:
// TampilErrorLogika.java: Program memuat error logika
public class TampilErrorLogika {
public static void main(String[] args) {
// Tambahkan angka1
ke angka2
int angka1 = 3;
int angka2 = 3;
angka2 += angka1 + angka2;
System.out.println("angka2 adalah " + angka2);
}
}
Program
di atas tidak mempunyai error runtime
maupun error sintaks, tetapi keluaran untuk angka2 sama sekali tidak tepat, karena seharusnya yang tertampil
adalah angka2 adalah 6, bukan angka2 adalah 9.
2.18 Masukan dari GUI
Anda
bisa menerima masukan dari konsol. Selain dari konsol, Anda juga bisa membaca
masukan dari kotak dialog masukan dengan memanggil metode JOptionPane.showInputDialog, seperti pada Gambar 2.5.
Ketika
metode ini dieksekusi, maka suatu dialog ditampilkan untuk memampukan pengguna
untuk mengentri masukan. Setelah memasukkan suatu string, klik OK untuk membaca
masukan dari dialog. Ada beberapa cara untuk memanggil metode showInputDialog. Untuk sementara ini,
Anda hanya perlu mengetahui dua cara:
Cara
pertama adalah menggunakan statemen seperti ini:
JOptionPane.showInputDialog(x);
dimana
x adalah suatu string untuk pesan.
Cara kedua adalah menggunakan statemen seperti ini:
String
string = JOptionPane.showInputDialog(null, x, y,
JOptionPane.QUESTION_MESSAGE);
dimana
x adalah suatu string untuk pesan
dan y adalah suatu string untuk
judul kotak dialog, seperti tertampil pada Gambar 2.6.
2.18.1 Konversi String Menjadi Angka
Masukan
yang dijadikan nilai balik kotak dialog masukan adalah suatu string. Jika Anda
mengentri suatu nilai numerik, misalnya 123, maka akan dijadikan nilai balik
berupa string “123”. Anda harus melakukan konversi dari string menjadi angka
untuk memperoleh masukan sebagai angka. Untuk mengkonversi string menjadi suatu
nilai int, Anda bisa menggunakan
metode parseInt dalam kelas Integer, seperti berikut:
int intNilai =
Integer.parseInt(intString);
dimana
intString adalah suatu string
numerik, misalnya “123”.
Untuk
mengkonversi string menjadi suatu nilai double,
Anda bisa menggunakan metode parseDouble
dalam kelas Double, seperti berikut:
double doubleNilai
= Double.parseDouble(doubleString);
dimana
doubleString adalah suatu string
numerik, misalnya “123.45”.
Kedua
kelas Integer dan Double berada dalam paket java.lang,
jadi keduanya secara otomatis diimpor.
2.18.2 Menggunakan Kotak Dialog Masukan
Kode2.8,
HitungHutang.java, membaca masukan dari konsol. Dengan cara yang berbeda, Anda
bisa membaca masukan dari kotak dialog. Kode2.13 memberikan program utuh,
dimana pada Gambar 2.7 ditampilkan hasil keluaran program.
Gambar 2.7 Program menerima suku bunga
tahunan (a), jumlah tahun (b), jumlah pinjaman (c), dan kemudian menampilkan
pembayaran bulanan dan total pembayaran
Kode2.13 HitungHutangDenganDialog.java
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
38
39
40
41
42
43
44
|
import javax.swing.JOptionPane;
public class HitungHutangDenganDialog {
public static void main(String[] args) {
// Masukkan suku
bunga tahunan
String
sukuBungaTahunanString = JOptionPane.showInputDialog(
"Masukkan suku bunga tahunan, misal
8.25:");
// Konversi ke
double
double sukuBungaTahunan =
Double.parseDouble(sukuBungaTahunanString);
// Dapatkan suku
bunga bulanan
double sukuBungaBulanan =
sukuBungaTahunan / 1200;
//Masukkan jumlah
tahun
String
jumlahTahunString = JOptionPane.showInputDialog(
"Masukkan jumlah tahun sebagai
integer, \nmisalnya 5:");
// Konversi string
ke int
int jumlahTahun =
Integer.parseInt(jumlahTahunString);
//Masukkan jumlah
pinjaman
String
pinjamanString = JOptionPane.showInputDialog(
"Masukkan jumlah pinjaman, misalnya
120000.95:");
// Konversi string
ke double
double jumlahPinjaman =
Double.parseDouble(pinjamanString);
// Hitung
pembayaran
double pembayaranBulanan=
jumlahPinjaman * sukuBungaBulanan / (1
- 1 / Math.pow(1 +
sukuBungaBulanan, jumlahTahun * 12));
double pembayaranTotal=
pembayaranBulanan * jumlahTahun * 12;
//Untuk menetapkan
dua dijit di belakang titik desimal
pembayaranBulanan
= (int)(pembayaranBulanan * 100) /
100.0;
pembayaranTotal =
(int)(pembayaranTotal * 100) /
100.0;
// Tampilkan hasil
String keluaran
="Pembayaran bulanan adalah " + pembayaranBulanan +
"\nTotal
pembayaran adalah " + pembayaranTotal;
JOptionPane.showMessageDialog(null,keluaran);
}
}
|
No comments:
Post a Comment