Saturday, December 17, 2016

Bab 2. Java Teori dan Implementasi



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
Isu kedua yang didiskusikan terlebih dahulu. Agar bisa menyimpan radius, program perlu mendeklarasikan suatu simbol yang dinamakan variabel. Suatu variabel memiliki nama yang bisa digunakan untuk mengakses lokasi memori.

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.

Gambar 2.1 Program menampilkan luas suatu lingkaran


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
 sampai

 sampai

 sampai

 sampai
(-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 . Jadi,  melebihi kapasitas penyimpanan variabel int tersebut.

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 . Jadi,  melebihi kapasitas penyimpanan variabel int tersebut.

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.

Gambar 2.2 Metode CurrentTimeMillis() memberikan nilai balik jumlah milidetik sejak Unix Epoch


Anda bisa menggunakan metode ini untuk mendapatkan waktu saat ini, dan kemudian menghitung detik, menit, dan jam saat ini sebagai berikut:

  1. Mendapatkan total milidetik sejak tengah malam 1 Januari 1970, dalam totalMillidetik dengan memanggil CurrentTimeMillis() (misalnya, 1203183086328 milidetik).
  2. Mendapatkan total detik totalDetik dengan membagi totalMillidetik dengan 1000 (misalnya, 1203183086328 milidetik / 1000 = 1203183086 detik).
  3. Mendapatkan detik saat ini dari totalDetik % 60 (misalnya, 1203183086 detik % 60 = 26, yang merupakan detik saat ini).
  4. Mendapatkan total menit totalMenit  dengan membagi totalDetik dengan 60 (misalnya, 1203183086 detik / 60 = 20053051 menit).
  5. Mendapatkan menit saat ini dari totalMenit % 60 (misalnya, 20053051 menit % 60 = 31, yang merupakan menit saat ini).
  6. Mendapatkan total jam totalJam dengan membagi totalMenit dengan 60 (misalnya, 20053051 menit / 60 = 334217 jam).
  7. 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

 dapat dihitung menggunakan Math.pow(1+bungaBulanan, jumlahTahun * 12).

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.

Gambar 2.3 Kompiler melaporkan error sintaks


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 ;
   }
}

Gambar 2.4 Error runtime menyebabkan program berhenti secara abnormal


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.

Gambar 2.5 Kotak dialog masukan memampukan pengguna untuk memasukkan suatu string

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:

Gambar 2.6 Kotak dialog masukan dengan judul

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