Anda di halaman 1dari 297

Buku Petunjuk Praktikum

Praktikum Pemrograman Berbasis Obyek

Oleh:
Ali Ridho Barakbah S.Kom., Ph.D.
Rizky Yuniar Hakkun S.Kom., M.T.
Tita Karlita, S.Kom., M.Kom.
Yuliana Setiowati, S.Kom., M.Kom.

Program Studi D3 Teknik Informatika


Departemen Teknik Informatika dan Komputer
Politeknik Elektronika Negeri Surabaya
2012

Kata Pengantar
Puji syukur kami panjatkan kehadirat Tuhan Yang Maha Esa atas segala rahmat dan
karunia-Nya sehingga Buku Praktikum Pemrograman Berbasis Obyek dapat diwujudkan.
Buku Praktikum Pemrograman Berbasis Obyek ini dirasa sangat diperlukan untuk
diterbitkan sebagai pedomam bagi mahasiswa dan dosen yang berkaitan dengan kegiatan
belajar dan mengajar di Jurusan Teknik Informasi Politeknik Elektronika Negeri
Surabaya.
Buku Praktikum Pemrograman Berbasis Obyek ini berisi penjelasan konsep
pemrograman berbasis obyek disertai contoh penerapannya dengan menggunakan bahasa
Java. Materi yang diajarkan meliputi prinsip-prinsip pemrograman berorientasi obyek
seperti kelas, obyek, method, enkapsulasi, pewarisan, polimorfisme, serta topik tentang
penanganan kesalahan, tipe data koleksi, dan membuat antar muka grafis menggunakan
Java. Dengan modul-modul praktikum yang ada di buku ini diharapkan mahasiswa
mampu merancang dan mengimplementasikan permasalahan ke dalam konsep
pemrograman berbasis obyek dengan diberikan latihan-latihan dan tugas-tugas
pemrograman. Diakhir kuliah mahasiswa membuat tugas proyek akhir yang
dipresentasikan di kelas.
Akhirnya dengan ini kami mengharapkan Buku Praktikum ini dapat dijadikan
petunjuk dan dipergunakan dengan sebaik-baiknya. Dan tentu tidak lupa kami harapkan
kritik dan saran demi makin sempurnanya buku ini.

Surabaya, 30 Nopember 2012

Daftar Isi
Kata Pengantar
Daftar Isi
Praktikum 1
Praktikum 2
Praktikum 3
Praktikum 4
Praktikum 5
Praktikum 6
Praktikum 7
Praktikum 8
Praktikum 9
Praktikum 10
Praktikum 11
Praktikum 12
Praktikum 13
Praktikum 14
Praktikum 15
Praktikum 16
Praktikum 17
Praktikum 18
Praktikum 19
Praktikum 20
Praktikum 21
Praktikum 22
Praktikum 23
Praktikum 24
Praktikum 25
Praktikum 26
Praktikum 27
Praktikum 28
Praktikum 29
Praktikum 30
Praktikum 31
Praktikum 32

Pengenalan Lingkungan Kerja Java


Dasar Pemrograman Java
Operator
Pengambilan Keputusan dan Perulangan
Array
String
Pengenalan Pemrograman Berbasis Obyek
Enkapsulasi
Mengelola Kelas
Inheritance 1
Inheritance 2
Overriding dan Overloading
Polimorfisme
Nested Class
Type Wrapper
Type Enum
Menangani Exception
Melempar Exeption dan Membuat Exception Sendiri
Java Collection Framework: Set dan List
Java Collection Framework: Map
Comparable
Comparator
Generics: Membuat Class Generic dan Generic pada Collection
Generics: Bounded Type Parameter dan WildCard
Input dan Output 1
Input dan Output 2
Antar Muka Grafis
Penanganan Event
GUI: Kalkulator Mini
Proyek 1
Proyek 2
Presentasi

i
ii
1
7
15
25
35
44
53
63
71
81
89
96
105
113
122
134
145
153
164
177
185
197
211
222
237
246
257
267
279
291
292
293

ii

PRAKTIKUM 1
PENGENALAN LINGKUNGAN KERJA
JAVA
A. TUJUAN PEMBELAJARAN
1. Mengenal dan mempersiapkan lingkungan kerja Java
2. Mampu menerapkan langkah-langkah dalam menginstall Java Development Kit
3. Membuat program sederhana dengan Java
4. Mengkompilasi dan menjalankan program Java
5. Menganalisa beberapa problem yang terjadi saat pemrograman dan memberikan
solusi

B. DASAR TEORI
Untuk bisa bekerja dengan Java, maka kita perlu melakukan instalasi Java
Development Kit (JDK) atau Java 2 Software Development Kit (J2SDK). Setelah proses
instalasi selesai, selanjutnya adalah melakukan penyetingan PATH dan CLASSPATH di
dalam sistem. Penyetingan PATH sangat berguna untuk memberitahu sistem dimana
kita meletakkan file-file utama Java (diantaranya java, javac, jdb, dan lain-lain).
Sedangkan penyetingan CLASSPATH sangat berguna untuk memberitahu sistem
dimana kita meletakkan file-file class yang akan kita libatkan dalam program kita.
Penyetingan CLASSPATH ini biasa melibatkan dua item, yaitu tanda . (titik) yang
menandakan direktori kerja dan tools.jar yang berisikan kumpulan file-file library
standar yang disediakan oleh Java.

C. TUGAS PENDAHULUAN
Buatlah makalah yang berisi tentang perkembangan teknologi Java dan uraikan
berbagai macam teknologi Java serta aplikasinya saat ini.

D. PERCOBAAN
Percobaan 1 : Instalasi JDK
Pilih dan tentukan file instalasi JDK sesuai dengan operating system yang dipakai oleh
komputer anda. Jalankan file instalasi JDK dan ikuti proses instalasi tahap demi tahap.
Pilihlah direktori penginstallan secara default (biasanya ini akan membuat direktori baru
atau c:\jdkxxx atau c:\j2sdkxxx dimana xxx adalah versi JDK yang di-install.

Percobaan 2 : Pengesetan PATH


Masuk ke system setting OS anda melalui control panel dan lakukan penambahan
PATH dengan cara sebagai berikut:
set PATH=%PATH%;%JAVA_HOME%\bin

Percobaan 3 : Pengesetan CLASSPATH


Masuk ke system setting OS anda melalui control panel dan lakukan penambahan atau
membuat baru CLASSPATH dengan cara sebagai berikut:
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar

Percobaan 4 : Menampilkan suatu tulisan ke layar


Hallo.java
public class Hallo {
public static void main(String args[]) {
System.out.println("Hallo...");
}
}

Percobaan 5 : Melibatkan class lain dalam program


Buatlah class TestGreeting dan Greeting dalam dua file sumber berbeda.

TestGreeting.java
public class TestGreeting {
public static void main (String[] args) {
Greeting hello = new Greeting();
hello.greet();
}
}

Greeting.java
public class Greeting {
public void greet() {
System.out.println("hi");
}
}

E. LATIHAN
Latihan 1 : Menganalisa dan membenahi kesalahan pada program
Tulislah program berikut ini dan simpanlah dengan nama Test.java
Test.java
public class Testing {
public static void main(String[] args) {
System.out.println("What's wrong with this program?");
}
}

Lakukan kompilasi pada file tersebut dan amati hasilnya. Kenapa terjadi kegagalan pada
saat kompilasi?. Benahilah kesalahan diatas sehingga program tersebut dapat berjalan
dengan baik.

Latihan 2 : Menganalisa dan membenahi kesalahan pada program


Tulislah program dibawah ini dan simpanlah dengan nama tertentu sesuai pilihan anda.

public class Test {


public static void main(String[] args) {
System.out.println("What's wrong with this program?");
}
}
public class TestAnother {
public static void main(String[] args) {
System.out.println("What's wrong with this program?");
}
}

Lakukan kompilasi pada file tersebut dan amati hasilnya. Kenapa terjadi kegagalan pada
saat kompilasi? Benahilah kesalahan diatas sehingga program tersebut dapat berjalan
dengan baik.

Latihan 3 : Menganalisa dan membenahi kesalahan pada program


Tulislah program berikut ini dan simpanlah.
public class Test {
public static void main(String args) {
System.out.println("What's wrong with this program?");
}
}

Lakukan kompilasi pada program tersebut dan jalankan. Kenapa terjadi kesalahan pada
saat menjalankan program tersebut. Benahilah kesalahan diatas sehingga program
tersebut dapat berjalan dengan baik.

Latihan 4 : Menganalisa dan membenahi kesalahan pada program


Tulislah program berikut ini dan simpanlah.

public class Test {


public void main(String args[]) {
System.out.println("What's wrong with this program?");
}
}

Lakukan kompilasi pada program tersebut dan jalankan. Kenapa terjadi kesalahan pada
saat menjalankan program tersebut. Benahilah kesalahan diatas sehingga program
tersebut dapat berjalan dengan baik.

F. TUGAS
Tugas 1 : Menghitung luas dan keliling lingkaran
Buatlah program untuk menghitung luas dan keliling lingkaran. Untuk nilai PI gunakan
konstanta PI yang ada di java.lang.Math.PI

Rumus :

Luas lingkaran = PI x jari-jari2


Keliling lingkaran = 2 x PI x jari-jari

Tugas 2 : Mengkonversi suatu nilai dari Celcius ke Fahrenheit atau sebaliknya


Buatlah suatu program untuk mengkonversi suatu nilai dari Celcius ke Fahrenheit atau
sebaliknya.

Rumus :

Lampiran
Cara memasukkan input melalui JOptionPane.
import javax.swing.JOptionPane;
public class InputPane {
public static void main(String args[]) {
int nilai;
String str = JOptionPane.showInputDialog("Masukkan nilai :");
nila i= Integer.parseInt(str);
System.out.println(nilai);
System.exit(0);
}
}

LAPORAN RESMI
Kumpulkan hasil percobaan di atas, tambahkan dalam laporan resmi flow chart untuk
menghitung nilai rata-rata dari n bilangan yang diinputkan, hitung jumlah totalnya,
hitung maksimal dan minimal bilangan.

PRAKTIKUM 2
DASAR PEMROGRAMAN JAVA
A. TUJUAN PEMBELAJARAN
1. Mengetahui aturan penamaan identifier
2. Mengenal kata-kata kunci yang ada di Java
3. Mengetahui tipe-tipe dasar yang ada di Java
4. Mengetahui pemberian nilai default untuk masing-masing tipe dasar
5. Memahami bagaimana melakukan casting dan promotion

B. DASAR TEORI
Identifier adalah nama yang diberikan untuk variabel, class atau method.
Penamaan identifier tidak boleh mengandung spasi dan harus diawali dengan karakter
unicode, tanda $ (dollar) atau tanda _ (underscore). Penamaan identifier ini bersifat
case-sensitive dan tidak dibatasi panjang maksimum.
Java mempunyai 48 kata kunci, seperti if, int, void, dan lain-lain. Kata-kata
kunci tersebut tidak bisa dipakai sebagai identifier. Selain kata kunci, Java juga
mempunyai 3 kata literal, yaitu true, false dan null, yang juga tidak bisa dipakai untuk
penamaan identifier juga terdapat 2 reserved words yang tidak bisa digunakan sebagai
nama identifier yaitu const dan goto.
Java mempunyai 8 tipe dasar, yaitu boolean, char, byte, short, int, long, float,
dan double. Dari 8 tipe data dasar tersebut bisa dikelompokkan menjadi 4 kelompok
data yaitu, integral, floating point, character, dan logical. Yang termasuk dalam
kelompok data integral atau bilangan bulat adalah byte, short, int dan long. Nilai default
untuk kelompok data integral adalah int. Yang termasuk dalam kelompok data floating
point adalah float dan double dengan nilai default double. Sedang yang termasuk dalam
7

tipe data character adalah char yang direpresentasikan dengan Unicode leter. Dan
kelompok data yang terakhir adalah logical yaitu boolean dengan hanya dua buah nilai
saja yang diijinkan yaitu true dan false. Spesifikasi panjang bit dan range serta nilai
default untuk masing-masing tipe data bisa dilihat pada Tabel 2.1.
Casting diperlukan untuk mengkonversi dari suatu tipe ke tipe data yang lebih
kecil panjang bitnya. Sedangkan promotion terjadi pada saat mengkonversi dari suatu
tipe data ke tipe data yang lebih panjang bitnya.
Contoh :

int p = (int) 10L;


long i = 10;

Tabel 2.1 Spesifikasi panjang bit dan nilai default tipe data dasar
Tipe

Panjang bit

Range

Nilai Default

boolean

16

false

char

16

0 216-1

\u0000

byte

-27 27-1

short

16

-215 215-1

int

32

-231 231-1

long

64

-263 263-1

0L

float

32

0.0F

double

64

0.0

C. TUGAS PENDAHULUAN
1. Buatlah uraian yang berisi tentang spesifikasi 8 tipe data dasar !
2. Apakah yang dimaksud dengan casting (narrowing conversion) ?
3. Apakah yang dimaksud dengan konversi (widening conversion) ?

D. PERCOBAAN
Percobaan 1 : Memberikan nilai ke suatu tipe data
public class Assign {
public static void main(String args[]) {
boolean b = true;

System.out.println("Value b = " + b);

char c = 'C';
System.out.println("Value c = " + c);

byte bt = 10;
System.out.println("Value bt = " + bt);

short s = 20;
System.out.println("Value s = " + s);

int i = 30;
System.out.println("Value i = " + i);

long l = 40L;
System.out.println("Value l = " + l);

float f = 3.14F;
System.out.println("Value f = " + f);

double d = 3.14;
System.out.println("Value d = " + d);
}
}

Percobaan 2 : Mencetak nilai default dari tipe dasar


public class DefaultValue {
static boolean b;
static char c;
static byte bt;
static short s;
static int i;
static long l;
static float f;
static double d;

public static void main(String args[]) {

System.out.println("Default value b = " + b);


System.out.println("Default value c = " + c);
System.out.println("Default value bt = " + bt);
System.out.println("Default value s = " + s);
System.out.println("Default value i = " + i);
System.out.println("Default value l = " + l);
System.out.println("Default value f = " + f);
System.out.println("Default value d = " + d);
}
}

Percobaan 3 : Mengamati hasil perubahan nilai dari suatu operasi matematis


public class Divide {
public static void main(String[] arguments) {
float number1 = 15;
float number2 = 6;
float result = number1 / number2;
float remainder = number1 % number2;
System.out.println(number1 + " divided by " + number2);
System.out.println("\nResult\tRemainder");
System.out.println(result + "\t" + remainder);
}
}

Percobaan 4 : Mengamati hasil perubahan nilai dari suatu operasi matematis


class Invest {
public static void main(String[] arguments) {
float total = 14000;
System.out.println("Original investment: $" + total);

// Increases by 40 percent the first year


total = total + (total * .4F);
System.out.println("After one year: $" + total);

// Loses $1,500 the second year

10

total = total - 1500F;


System.out.println("After two years: $" + total);

// Increases by 12 percent the third year


total = total + (total * .12F);
System.out.println("After three years: $" + total);
}
}

Percobaan 5 : Menampilkan bilangan oktal ke format desimal


public class Octal {
public static void main(String args[]) {
int six=06;
int seven=07;
int eight=010;
int nine=011;

System.out.println("Octal six = " + six);


System.out.println("Octal seven = " + seven);
System.out.println("Octal eight = " + eight);
System.out.println("Octal nine = " + nine);
}
}

Percobaan 6 : Menampilkan bilangan heksadesimal ke format desimal


public class Hexadecimal {
public static void main(String args[]) {
int x=0x0001;
int y=0x7fffffff;
int z=0xDeadCafe;

System.out.println("x = " + x);


System.out.println("y = " + y);
System.out.println("z = " + z);

11

}
}

Percobaan 7 : Mengamati perubahan nilai pada suatu tipe


public class Plus {
public static void main(String args[]) {
int x;
int y;

x=2147483647;

//(2^31)-1

System.out.println("x = " + x);

y=x+1;
System.out.println("y = " + y);
}
}

Percobaan 8 : Memahami pemakaian Unicode


public class CobaUnicode {
public static void main(String args[]) {
ch\u0061r a='a';
char \u0062 = 'b';
char c= '\u0063';
String kata="\u0061\u0062\u0063";

System.out.println("a: " + a);


System.out.println("a: " + b);
System.out.println("a: " + c);
System.out.println("kata: " + kata);
}
}

12

E. LATIHAN
Latihan 1 : Membuat formulasi proses casting dari tipe-tipe primitif
Lakukan percobaan casting antar tipe-tipe primitif. Lalu amati dan catatlah konversi dari
suatu tipe ke tipe lainnya yang memerlukan suatu casting. Dari hasil analisa anda,
buatlah suatu skema casting diantara tipe-tipe primitif.

Latihan 2 : Membuat formulasi proses promotion dari tipe-tipe primitif


Lakukan percobaan promotion antar tipe-tipe primitif. Lalu amati dan catatlah konversi
dari suatu tipe ke tipe lainnya yang menyebabkan terjadinya suatu promotion. Dari hasil
analisa anda, buatlah suatu skema promotion diantara tipe-tipe primitif.

F. TUGAS
Tugas 1 : Menganalisa batasan maksimum dari suatu tipe
Amatilah dan tulislah program berikut ini:
public class BigInteger {
public static void main(String args[]) {
long p=2147483648;
}
}

Lakukan kompilasi pada file tersebut dan amati pesan kesalahannya. Lakukan analisa
mengapa bisa terjadi kesalahan padahal batasan nilai maksimum dari suatu bilangan
bertipe long adalah 263-1 (9223372036854775807)?. Kemudian berikanlah solusi yang
tepat untuk mengatasi persoalan diatas.

Tugas 2 : Mencari panjang menit dari durasi waktu


Input: jam awal, menit awal, jam akhir, menit akhir
Output: durasi waktu (dalam menit) antara jam awal menit awal dengan jam akhir menit
akhir.

13

LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan,
latihan, dan tugas yang telah dibuat.

14

PRAKTIKUM 3
OPERATOR
A. TUJUAN PEMBELAJARAN
1.

Mengenal berbagai macam bentuk operator

2.

Memahami penggunaan berbagai macam jenis operator yang ada di Java

B. DASAR TEORI
Operator dapat diklasifikasikan menjadi 2 bentuk, yaitu unary operator dan
binary operator. Unary operator adalah operator yang hanya melibatkan 1 operan.
Sedangkan binary operator adalah operator yang melibatkan 2 operan. Java mempunyai
berbagai macam jenis operator yang dapat digolongkan menjadi operator aritmatika,
increment-decrement, bitwise, boolean, logik, shift (geser), penugasan, kombinasi dan
kondisi.
Arithmatic operator (operator aritmatika) adalah operator yang berfungsi untuk
operasi aritmatika. Yang termasuk dalam arithmatic operator bisa dilihat pada Tabel 3.1.

Tabel 3.1. Arithmatic operator


Arithmatic Operator

Keterangan

Operasi penambahan

Operasi pengurangan

Operasi perkalian

Operasi pembagian

Operasi modulus

Increment decrement operator adalah operator yang berguna untuk menaikkan


1 nilai (increment) dan menurunkan 1 nilai (decrement). Yang termasuk increment16

decrement operator bisa dilihat pada Tabel 3.2. Berdasarkan urutan eksekusi penaikkan
dan penurunan nilainya, increment-decrement operator ini dapat diklasifikasikan
menjadi 2 macam, yaitu pre-increment/decrement dan post-increment/decrement.

Tabel 3.2. Arithmatic operator


Increment-Decrement Operator

Keterangan

++

increment

--

decrement

Bitwise operator adalah operator yang dipakai untuk operasi bit pada nilai
operan. Yang termasuk bitwise operator bisa dilihat pada Tabel 3.3.

Tabel 3.3. Bitwise Operator


Bitwise Operator

Keterangan

Operasi complement

&

Operasi AND

Operasi OR

Operasi XOR

Boolean operator (operator boolean) adalah operator yang mengharuskan


operannya bertipe boolean (true atau false). Yang termasuk boolean operator bisa dilihat
pada Tabel 3.4.

Tabel 3.4. Boolean Operator


Logical Operator

Keterangan

Operasi negasi (NOT)

&

Operasi AND

Operasi OR

Operasi XOR

&&

Operasi AND (short circuit)

17

||

Operasi OR (short circuit)

Operator !, &, | dan ^ mempunyai implementasi yang sama sebagaimana ketika


ia menjadi bitwise operator. Hanya saja di logical operator, operan yang dilibatkan
disini harus bertipe boolean, yang hanya mempunyai nilai true atau false.
Logical operator (operator logika) adalah operator yang sering dipakai untuk
operasi perbandingan dan selalu menghasilkan suatu nilai bertipe boolean (true atau
false). Yang termasuk logical operator bisa dilihat pada Tabel 3.5.

Tabel 3.5. Logical Operator


Logical Operator

Keterangan

==

Operasi perbandingan sama dengan

!=

Operasi perbandingan tidak sama dengan

>

Operasi perbandingan lebih besar

>=

Operasi perbandingan lebih besar sama dengan

<

Operasi perbandingan lebih kecil

<=

Operasi perbandingan lebih kecil sama dengan

Shift operator (operator geser) adalah operator yang berfungsi untuk menggeser
susunan bit pada suatu nilai. Yang termasuk dalam shift operator dapat dilihat pada
Tabel 3.6.

Tabel 3.6. Shift Operator


Shift Operator

Keterangan

>>

right shift

>>>

unsigned right shift

<<

left shift

Combination operator (operator kombinasi) adalah operator yang terdiri dari


gabungan 2 operator. Biasanya combination operator ini dipakai untuk mempersingkat
waktu penulisan program. Yang termasuk operator combination bisa dilihat pada Tabel
18

3.7.

Tabel 3.7. Combination Operator


Combination Operator

Keterangan

+=

Gabungan dari operator = dan +

-=

Gabungan dari operator = dan -

*=

Gabungan dari operator = dan *

/=

Gabungan dari operator = dan /

%=

Gabungan dari operator = dan %

>>=

Gabungan dari operator = dan >>

>>>=

Gabungan dari operator = dan >>>

<<=

Gabungan dari operator = dan <<

&=

Gabungan dari operator = dan &

|=

Gabungan dari operator = dan |

^=

Gabungan dari operator = dan ^

Conditional operator (operator konditional) adalah operator yang dipakai untuk


operasi kondisi (persyaratan), sama sebagaimana if-then-else dan hanya berlaku untuk
pernyataan tunggal. Operator ini mengembalikan suatu nilai yang benar sesuai dengan
kondisi yang diberikan. Conditional operator (operator konditional) ini hanya ada 1
macam, yaitu ? disertai dengan tanda : (titik dua). Jika kondisi persyaratan yang terletak
di sebelah kiri tanda ? bernilai benar, maka pernyataan yang berada di sebelah kiri tanda
: yang akan diambil. Demikian juga sebaliknya, jika kondisi persyaratan bernilai salah,
maka pernyataan yang berada di sebelah kanan tanda : yang akan diambil.

C. TUGAS PENDAHULUAN
Buatlah makalah yang berisi tentang berbagai macam operator dengan disertai contoh
penggunaan dan outputnya.

19

D. PERCOBAAN
Percobaan 1 : Melakukan increment dan decrement nilai
class IncDec {
public static void main (String args[]) {
int x = 8, y = 13;
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("x = " + ++x);
System.out.println("y = " + y++);
System.out.println("x = " + x--);
System.out.println("y = " + --y);
}
}

Percobaan 2 : Melakukan operasi bit


class Bitwise {
public static void main (String args[]) {
int x = 5, y = 6;
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("x & y = " + (x & y));
System.out.println("x | y = " + (x | y));
System.out.println("x ^ y = " + (x ^ y));
}
}

Percobaan 3 : Melakukan operasi komplemen


class BitwiseComplement {
public static void main (String args[]) {
int x = 8;
System.out.println("x = " + x);
int y = ~x;
System.out.println("y = " + y);
}
}

20

Percobaan 4 : Melakukan operasi shift


class Shift {
public static void main (String args[]) {
int x = 7;
System.out.println("x = " + x);
System.out.println("x >> 2 = " + (x >> 2));
System.out.println("x << 1 = " + (x << 1));
System.out.println("x >>> 1 = " + (x >>> 1));
}
}

Percobaan 5 : Menggunakan logical operator


class LogicalOperator {
public static void main (String args[]) {
int x = 7, y = 11, z = 11;
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("z = " + z);
System.out.println("x < y = " + (x < y));
System.out.println("x > z = " + (x > z));
System.out.println("y <= z = " + (y <= z));
System.out.println("x >= y = " + (x >= y));
System.out.println("y == z = " + (y == z));
System.out.println("x != y = " + (x != z));
}
}

Percobaan 6 : Menggunakan operator boolean and


public class BooleanAnd {
public static void main(String args[]) {
int a=5, b=7;
if ((a<2) & (b++<10)) b+=2;
System.out.println(b);
}
}

21

Percobaan 7 : Menggunakan operator boolean and short-circuit


public class ShortCircuitBooleanAnd {
public static void main(String args[]) {
int a=5, b=7;
if ((a<2) && (b++<10)) b+=2;
System.out.println(b);
}
}

Percobaan 8 : Menggunakan boolean or


public class BooleanOr {
public static void main(String args[]) {
int a=5, b=7;
if ((a>2) | (b++<10)) b+=2;
System.out.println(b);
}
}

Percobaan 9 : Menggunakan boolean or short-circuit


public class ShortCircuitBooleanOr {
public static void main(String args[]) {
int a=5, b=7;
if ((a>2) || (b++<10)) b+=2;
System.out.println(b);
}
}

Percobaan 10 : Menggunakan operator kondisi


class Conditional {
public static void main (String args[]) {
int x = 0;
boolean isEven = false;
System.out.println("x = " + x);
x = isEven ? 4 : 7;
System.out.println("x = " + x);
}
}

22

E. LATIHAN
Latihan 1 : Menampilkan representasi biner dari bilangan desimal bertipe int

Buatlah suatu program untuk menampilkan susunan bit dari suatu bilangan desimal.
Nilai bilangan input yang dimasukkan adalah bertipe int.

Contoh tampilan:
Masukkan nilai desimal: 13
Susunan bit dari 13 adalah 00000000000000000000000000001101

Masukkan nilai desimal: 612


Susunan bit dari 13 adalah 00000000000000000000001001100100

Masukkan nilai desimal: -1


Susunan bit dari 13 adalah 11111111111111111111111111111111

Masukkan nilai desimal: -13


Susunan bit dari 13 adalah 11111111111111111111111111110011

Latihan 2 : Menampilkan representasi biner dari bilangan desimal bertipe byte

Buatlah suatu program seperti diatas untuk menampilkan susunan bit dari suatu
bilangan desimal, akan tetapi nilai bilangan input yang dimasukkan adalah bertipe byte.

F. TUGAS
Tugas 1 : Mencari representasi biner dari suatu bilangan

Tuliskan representasi bit dari nilai 19? Jelaskan.

Tugas 2 : Menganalisa pergeseran bit dari operasi shift

23

Jelaskan apa yang terjadi pada potongan program berikut ini:

byte a=-1;
a=(byte) (a >>> 2);

LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan,
latihan, dan tugas yang telah dibuat.

24

PRAKTIKUM 4
PERCABANGAN DAN PERULANGAN
A. TUJUAN PEMBELAJARAN
1. Memahami logika percabangan
2. Memahami logika perulangan
3. Memakai percabangan dan perulangan yang tepat
4. Memahami pemberian kondisi untuk perulangan

B. DASAR TEORI
Percabangan di dalam Java terdapat 2 macam, yaitu dengan memakai if dan
switch. Percabangan if dipakai jika kita menginginkan suatu pernyataan itu dilakukan
dengan syarat tertentu yang bernilai benar. Sintaks dari if adalah sebagai berikut:

if (ekspresi_boolean) {
Pernyataan1;
}

Pernyataan1 akan dikerjakan kalau ekspresi_boolean bernilai true. Percabangan if-else


dipakai untuk mengeksekusi salah satu dari 2 pernyataan dari syarat tertentu yang pada
pada if yang dapat bernilai benar atau salah. Sintaks dari if-else adalah sebagai berikut:

if (ekspresi_boolean) {
Pernyataan1;
} else {
Pernyataan2;
}
25

Pernyataan1

akan

dikerjakan

kalau

ekspresi_boolean

bernilai

true.

Kalau

ekspresi_boolean bernilai false, maka Pernyataan2 akan dikerjakan. Percabangan else-if


dipakai untuk memberikan kondisi tertentu pada bagian else. Sintaks dari else-if adalah
sebagai berikut:

if (ekspresi_boolean1) {
Pernyataan1;
} else if (ekspresi_boolean2) {
Pernyataan2;
}

Ketika ekspresi_boolean bernilai false, maka alur program akan menuju ke bagian else.
Selanjutnya Pernyataan2 diatas akan dikerjakan kalau ekspresi_boolean2 bernilai true.
Percabangan switch dipakai pada saat kita ingin memberikan kondisi denga
beberapa syarat yang identik yang masing-masing mempunyai pernyataan yang
berbeda-beda. Pada Java, nilai yang dilewatkan pada switch harus bertipe int, short,
byte atau char. Sintaks dari switch adalah sebagai berikut:

switch (ekspresi) {
case nilai1: Pernyataan1;
break;
case nilai2: Pernyataan2;
break;
default: Pernyataan3;
}

Ketika ekspresi bernilai nilai1, maka alur program akan mengeksekusi Pernyataan1.
Selanjutnya break menyebabkan alur program keluar dari daerah switch. Kalau ekspresi
bernilai nilai2, maka alur program akan mengeksekusi Pernyataan2. Apabila ekspresi
mempunyai nilai yang tidak sama dengan nilai1 dan nilai2, maka alur program akan
menuju ke bagian default dan kemudian mengeksekusi Pernyataan3. Tipe data yang
26

diperbolehkan untuk ekspresi adalah byte, short, int dan char saja. Tetapi untuk Java
diatas versi 7 ditambahkan tipe data String.

Perulangan di dalam Java terdapat 3 macam, yaitu for, while dan do-while.
Perulangan for dipakai pada saat kita melakukan perulangan dengan jumlah yang sudah
diketahui pasti. Sintaks dari for adalah sebagai berikut:

for (inisialisasi; kondisi; perubah) {


Pernyataan;
}

Perulangan while dipakai pada saat kita melakukan perulangan dengan jumlah
yang belum diketahui pasti. Pernyataan pada while akan dikerjakan setelah pengecekan
kondisi pada while bernilai true. Sintaks dari while adalah sebagai berikut:

while (kondisi) {
Pernyataan;
}

Perulangan do-while dipakai pada saat kita melakukan perulangan dengan


jumlah yang belum diketahui pasti. Pernyataan pada do akan dikerjakan terlebih dahulu,
baru setelah itu dilakukan pengecekan kondisi pada while. Sintaks dari do-while adalah
sebagai berikut:
do {
Pernyataan;
} while (kondisi);

Kita dapat memberikan kondisi tertentu pada saat terjadi perulangan. Kondisi
yang mungkin terjadi pada perulangan terdapat 2 macam, yaitu break dan continue.
Break menyebabkan suatu kondisi untuk keluar dari perulangan. Sedangkan continue
memyebabkan suatu kondisi untuk melanjutkan ke tahapan selanjutnya pada
perulangan.
27

C. TUGAS PENDAHULUAN
1. Sebutkan dan jelaskan berbagai macam sintaks percabangan yang digunakan di Java!
2. Sebutkan dan jelaskan berbagai macam sintaks perulangan yang digunakan di Java!

D. PERCOBAAN
Percobaan 1 : Percabangan menggunakan if, if-else dan else-if
class IfElseName {
public static void main (String args[]) {
char firstInitial = 'a';
System.out.println("Masukkan huruf awal nama anda: ");
try {
firstInitial = (char)System.in.read();
} catch (Exception e) {
System.out.println("Error: " + e.toString());
}

if (firstInitial == 'a')
System.out.println("Nama anda pasti Asep!");
else if (firstInitial == 'b')
System.out.println("Nama anda pasti Brodin!");
else if (firstInitial == 'c')
System.out.println("Nama anda pasti Cecep!");
else
System.out.println("Nama anda tidak terkenal!");
}
}

Percobaan 2 : Percabangan menggunakan switch


class SwitchName {
public static void main (String args[]) {
char firstInitial = 'a';
System.out.println("Masukkan huruf awal nama anda:");
try {
firstInitial = (char)System.in.read();
} catch (Exception e) {

28

System.out.println("Error: " + e.toString());


}

switch (firstInitial) {
case 'a':
System.out.println("Nama anda pasti Asep!");
case 'b':
System.out.println("Nama anda pasti Brodin!");
case 'c':
System.out.println("Nama anda pasti Cecep!");
default:
System.out.println("Nama anda tidak terkenal!");
}
}
}

Percobaan 3 : Percabangan menggunakan switch dengan break


class SwitchNameBreak {
public static void main (String args[]) {
char firstInitial = 'a';
System.out.println("Masukkan huruf awal nama anda:");
try {
firstInitial = (char)System.in.read();
} catch (Exception e) {
System.out.println("Error: " + e.toString());
}

switch (firstInitial) {
case 'a':
System.out.println("Nama anda pasti Asep!");
break;
case 'b':
System.out.println("Nama anda pasti Brodin!");
break;

case 'c':
System.out.println("Nama anda pasti Cecep!");
break;

29

default:
System.out.println("Nama anda tidak terkenal!");
}
}
}

Percobaan 4 : Perulangan menggunakan for


class ForCount {
public static void main (String args[]) {
int count=1;
for (int i=0; i<9; i++) {
for (int j=0; j<i+1; j++) {
System.out.print(count);
}
count++;
System.out.println();
}
}
}

Percobaan 5 : Perulangan menggunakan while


class WhileCoun
t {
public static void main (String args[]) {
int count=1;
int i=0;
while (i<9) {
int j=0;
while (j<i+1) {
System.out.print(count);
j++;
}
count++;
System.out.println();
i++;

30

}
}
}

Percobaan 6 : Perulangan dengan break


class BreakLoop {
public static void main (String args[]) {
int i = 0;
do {
System.out.println("Iterasi ke " + i);
i++;
if (i > 10) break;
}
while (true);
}
}

Percobaan 7 : Perulangan dengan continue


public class ContinueLoop {
public static void main(String args[]) {
int a, b;
for(a=0;a<2;a++)
for(b=0;b<3;b++) {
if (b==1) continue;
System.out.println("a=" + a + " ; b=" + b);
}
}
}

Percobaan 8 : Pemakaian label pada kondisi break


public class BreakLabel {
public static void main(String args[]) {
int a, b;

31

Mulai:
for(a=0;a<2;a++)
for(b=0;b<3;b++) {
if (b==1) break Mulai;
System.out.println("a=" + a + " ; b=" + b);
}
}
}

Percobaan 9 : Pemakaian label pada kondisi continue


public class ContinueLabel {
public static void main(String args[]) {
int a, b;
Mulai:
for(a=0;a<2;a++)
for(b=0;b<3;b++) {
if (b==1) continue Mulai;
System.out.println("a=" + a + " ; b=" + b);
}
}
}

E. LATIHAN
Latihan 1 : Pengecekan kelompok karakter

Buatlah program untuk menentukan kelompok suatu karakter yang dimasukkan melalui
keyboard. Kelompok karakter tersebut adalah huruf kecil, huruf besar, angka, dan
karakter khusus (tanda baca, operator dan sebagainya).

Latihan 2 : Menampilkan bilangan faktorial


Bilangan bulat faktorial n, ditulis dengan n! adalah dihasilkan dari mengalikan dari 1
sampai dengan n. Contohnya 5! = 1 x 2 x 3 x 4 x 5 =120. Buatlah program untuk
menampilkan tabel hasil faktorial dari suatu bilangan yang diinputkan (tampilan
bilangan rata kanan)
32

Contoh tampilan :

Masukkan bilangan faktorial: 7


n

n!

-----------------------------1

24

120

720

5040

---------------------------

Latihan 3 : Deret Fibonacci


Buatlah program untuk menampilkan deret Fibonacci
Contoh tampilan :
Masukkan berapa deret Fibonacci? 8
8 deret Fibonacci = 1 1 2 3 5 8 13 21

Latihan 4 : Menampilkan deret bilangan genap


Buatlah program untuk menampilkan deret bilangan genap dari 2 sampai dengan 20
kecuali kelipatan 6.
Contoh tampilan :
2 4 8 10 14 16 20

F. TUGAS
Tugas 1 : Menghitung nilai determinan dan mencari akar persamaan kuadrat
Buatlah program untuk menghitung determinan dan mencari akar-akar dari persamaan
kuadrat : ax2 + bx + c = 0 , dengan ketentuan sebagai berikut :
D = b2 - 4ac

Jika D = 0 , maka terdapat 2 akar real yang kembar, yaitu : x1 = x2 = -b / 2a


33

Jika D > 0 , maka terdapat 2 akar real yang berlainan, yaitu :


x1 = (-b + D) / 2a
x2 = (-b - D) / 2a

Jika D < 0 , maka terdapat 2 akar imaginer yang berlainan, yaitu :


x1 = -b / 2a + (D / 2a) i
x2 = -b / 2a - (D / 2a) i

Input

: a, b, c (int)

Output : Nilai Determinan serta nilai akar-akar persamaan tsb (x1 dan x2).

Petunjuk : Gunakan Math.pow(x,0.5) untuk mencari akar dari x.

Tugas 2 : Menentukan tahun kabisat


Buatlah program untuk menentukan suatu tahun kabisat atau bukan dimana tahun
dibatasi mulai dari tahun 1900 sampai dengan tahun 2005.
Contoh tampilan:
Masukkan tahun (1900-2005) : 1923
1923 bukan tahun kabisat

Masukkan tahun (1900-2005) : 1898


Maaf, tahun input dibawah 1900

Masukkan tahun (1900-2005) : 1996


1996 adalah tahun kabisat

Masukkan tahun (1900-2005) : 2008


Maaf, tahun input diatas 2005

LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan,
latihan, dan tugas yang telah dibuat.
34

PRAKTIKUM 5
ARRAY
A. TUJUAN PEMBELAJARAN
1. Membuat dan menggunakan array
2. Berinteraksi dengan array multi dimensi
3. Mengkopi elemen array
4. Memahami konsep referensi array

B. DASAR TEORI
Array adalah suatu kumpulan data pada suatu variabel. Cara mendeklarasikan suatu
array adalah sebagai berikut :
tipe_array nama_array[];
tipe_array[] nama_array;
Contoh : int nilai[];
char[] huruf;

Agar kita dapat memesan tempat di memori untuk menampung elemen-elemen


array, kita perlu membuat array. Adapun caranya adalah dengan memakai new karena di
dalam Java suatu array adalah dianggap suatu obyek. Format penulisannya adalah
sebagai berikut :
nama_array = new tipe_array[total_elemen_array];
Contoh :

int nilai[];
nilai = new int[5];

Untuk dapat mengakses elemen array dapat dilakukan dengan menyebutkan


elemen ke berapa dari array yang akan diakses, seperti berikut ini:
nama_array[elemen_array]
35

Kita juga dapat melakukan deklarasi dan pembuatan array hanya pada satu baris
statement. Adapun format penulisannya adalah sebagai berikut :
tipe_array nama_array[] = new tipe_array[total_elemen_array];
Contoh :

int nilai[] = new int[5];

Inisialisasi array dapat dilakukan dengan format penulisan sebagai berikut:


tipe_array nama_array[] = {nilai_indeks_0, nilai_indeks_1, , nilai_indeks_n};

Contoh : int nilai[] = {70, 65, 85};

Kita dapat membuat array multi dimensi dengan cara menambahkan tanda []
sebanyak dimensi yang ingin dibuat. Sebagai contoh adalah sebagai berikut:
int x[][] = new int[3][4];
Baris statement diatas berarti kita ingin membuat array berdimensi 2, dengan 3 elemen
di dimensi ke-1 dan 4 elemen di dimensi ke-2. Untuk mengetahui panjang dari suatu
array yang telah kita buat, kita dapat memakai properti length. Adapun format untuk
menggunakan length adalah sebagai berikut:
var_array.length

total elemen array pada dimensi 1

var_array[i].length total elemen array pada dimensi 2 untuk indeks ke-i


pada dimensi 1
var_array[i][j].length total elemen array pada dimensi 3 untuk indeks ke-i
pada dimensi 1 dan indeks ke-j pada dimensi 2
dan seterusnya.

Isi dari suatu array dapat kita kopi pada array yang lain dengan memanfaatkan
method arraycopy() pada class System. Format penulisannya sebagai berikut :
System.arraycopy(array1, p1, array2, p2, n);
dimana : array1 = array asal/sumber pengkopian
array2 = array tujuan pengkopian
p1 = posisi indeks awal pengkopian pada array asal
p2 = posisi indeks awal pengkopian pada array tujuan
n = banyaknya elemen array yang akan dikopi
36

Suatu array juga dapat me-refer (merujuk) ke array yang lain, dengan kata lain
merujuk pada alamat memori yang sama. Sebagai contoh adalah program berikut ini :
int nilai[] = {10, 20, 30};
int result[];
result = nilai;

Di baris ketiga, kita meng-assign array nilai ke array result. Akibatnya, array
result akan me-refer (merujuk) pada array nilai, sehingga kedua array tersebut merujuk
alamat memori yang sama.

C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan array?
2. Buatlah contoh mendeklarasikan, memberi nilai dan mengakses elemen array!
3. Bagaimana cara mengetahui panjang array?
4. Uraikan pengetahuan anda mengenai array multidimensi!
5. Bagaimana cara mengkopi isi array?
6. Apakah yang dimaksud dengan referensi array. Beri contoh!

D. PERCOBAAN

Percobaan 1 : Mengakses elemen array


public class Array1 {
public static void main(String args[]) {
int nilai[]=new int[3];
nilai[0]=70;
nilai[1]=80;
nilai[2]=65;

double ratarata=0.0;

37

for(int i=0; i<nilai.length; i++) ratarata+=nilai[i];


ratarata/=nilai.length;

System.out.println("Nilai rata-rata = " + ratarata);


}
}

Percobaan 2 : Mengakses elemen array berdimensi 2


import java.text.NumberFormat;

public class Array2 {


public static void main(String args[]) {
NumberFormat nf=NumberFormat.getInstance();
nf.setMaximumFractionDigits(3);

int nilai[][]=new int[2][3];


nilai[0][0]=85;
nilai[0][1]=81;
nilai[0][2]=78;
nilai[1][0]=65;
nilai[1][1]=73;
nilai[1][2]=71;

String MK[]={"RPL", "PBO"};


double ratarataMK[]=new double[nilai.length];

for (int i=0; i<nilai.length; i++) {


for (int j=0; j<nilai[0].length; j++) {
ratarataMK[i]+=nilai[i][j];
}
ratarataMK[i]/=nilai[0].length;
}

System.out.println("Nilai Mata Kuliah\n");


System.out.println("MK \tMinggu1\tMinggu2\tMinggu3\tRataRata");

38

for (int i=0; i<nilai.length; i++) {


System.out.print(MK[i] + "\t");
for (int j=0; j<nilai[0].length; j++) {
System.out.print(nilai[i][j] + "\t");
}
System.out.print(nf.format(ratarataMK[i])+"\n");
}
}
}

Percobaan 3 : Mendapatkan informasi panjang elemen array multi dimensi


public class CariPanjangElemen {
public static void main(String args[]) {
int x[][][][]=new int[2][][][];

x[0]=new int[1][][];
x[0][0]=new int[2][];
x[0][0][0]=new int[3];
x[0][0][1]=new int[2];

x[1]=new int[2][][];
x[1][0]=new int[1][];
x[1][0][0]=new int[2];
x[1][1]=new int[2][];
x[1][1][0]=new int[1];
x[1][1][1]=new int[3];

System.out.println(x.length);
System.out.println(x[0].length);
System.out.println(x[0][0].length);
System.out.println(x[0][0][0].length);
System.out.println(x[0][0][1].length);
System.out.println();
System.out.println(x[1].length);
System.out.println(x[1][0].length);
System.out.println(x[1][0][0].length);
System.out.println(x[1][1].length);

39

System.out.println(x[1][1][0].length);
System.out.println(x[1][1][1].length);
}
}

Percobaan 4 : Menangkap daftar argumen


public class GetArguments {
public static void main(String args[]) {
System.out.println("Tanggal : " + args[0]);
System.out.println("Bulan : " + args[1]);
System.out.println("Tahun : " + args[2]);
}
}

Percobaan 5 : Melakukan pengkopian array


public class CopyArray {
public static void main(String args[]) {
int[] array1 = { 7, 4, 8, 1, 4, 1, 4 };
int[] array2 = new int[3];
System.arraycopy(array1,0,array2,0,3);

System.out.print("Array1 : ");
for (int i=0; i<array1.length; i++)
System.out.print(array1[i] + "

");

System.out.println();

System.out.print("Array2 : ");
for (int i=0; i<array2.length; i++)
System.out.print(array2[i] + "

");

}
}

40

E. LATIHAN
Latihan 1 : Mencari nilai rata-rata mata kuliah dari daftar nilai siswa

Diketahui daftar nilai siswa sebagai berikut:


NRP

Nama Mhs

RPL

BD

PBO

Ahmad

81

90

62

Adang

50

83

87

Dani

89

55

65

Edi

77

70

92

Buatlah program untuk menampilkan laporan sebagai berikut:

NRP

Rata-rata

-------------------------1

77.67

73.33

69.67

79.67

---------------------------

Latihan 2 : Menampilkan deret Fibonacci

Deret fibonanci adalah deret dimana dimulai dengan dua angka, dimana bernilai 0 dan
1, kemudian deret ketiga ditentukan dari penjumlahan kedua angka tersebut, sedangkan
deret keempat ditentukan dari dua angka sebelumnya begitu seterusnya. Sehingga
didapatkan deret fibonanci sebagai berikut: 0 1 1 2 3 5 8 13 21 dan seterusnya. Buatlah
program untuk menampilkan bilangan Fibonacci yang banyaknya sesuai dengan input.

Contoh tampilan:
Masukkan jumlah deretan Fibonacci? 8
0 1 1 2 3 5 8 13
41

Masukkan jumlah deretan Fibonacci? 10


0 1 1 2 3 5 8 13 21 34

Latihan 3 : Mendeteksi bilangan prima


Buatlah suatu program untuk mendeteksi suatu bilangan itu termasuk bilangan prima
atau bukan.

Contoh tampilan:
Masukkan bilangan? 8
8 bukan termasuk bilangan prima

Masukkan bilangan? 11
11 adalah bilangan prima

F. TUGAS
Tugas 1: Mencari posisi suatu angka di array
Misal terdapat array dua dimensi sebagai berikut:
int[][] arrayOfInts = { { 32, 87, 3, 589 }, { 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }};
Tugas : Carilah posisi angka 12 pada array tersebut. Silakan menggunakan looping,
branching, label, break, atau continue bila diperlukan.
Contoh output program: Found 12 at 1, 0

Tugas 2: Hitung jumlah huruf a yang terdapat pada array berikut ini !
char [ ] matKul =
{p,e,m,r,o,g,r,a,m,a,n,b,e,r,b,a,s,i,s,o,b,y,e,k};

42

Tugas 3. Mengakses elemen array


Di bawah ini adalah contoh program yang mengakses dan menampilkan elemen array
ke layar dengan menggunakan looping for.

class ForDemo {
public static void main(String[] args){
int x [] = {1,2,3,4,5,6,7,8,9,10};
for(int i=0; i<10; i++){
System.out.println("Count is: " + x[i]);
}
}
}

Temukan dan sebutkan cara lain dengan menggunakan loop for untuk mengakses dan
menampilkan elemen array!

LAPORAN RESMI
Kumpulkan hasil percobaan di atas, tambahkan analisa untuk tiap latihan dan tugas!

43

PRAKTIKUM 6
STRING
A. TUJUAN PEMBELAJARAN
1. Memahami sifat dan cara menggunakan dan operasi String.
2. Memahami sifat dan cara menggunakan dan operasi StringBuffer
3. Memahami sifat dan cara menggunakan dan operasi StringBuilder

B. DASAR TEORI
Objek dari String sering sekali kita gunakan sehari-hari, bahkan mungkin di
setiap class dari Java kita terdapat rutin yang menangani String. Class String
merepresentasikan suatu teks. Class String berisi string yang tetap (immutable string).
Artinya sekali intance String dibuat maka isinya tidak bisa diubah. Kelas String
memiliki 13 konstruktor yang memungkinkan kita membuat obyek String dan
menginisialisasi nilainya dengan menggunakan berbagai macam sumber data yang
berbeda. Cara membuat obyek string adalah sebagai berikut:
String str = "abc";

Sama dengan
char data[] = {'a', 'b', 'c'};
String str = new String(data);

Berikut ini adalah beberapa contoh penggunaan String:


System.out.println("abc");
String cde = "cde";
System.out.println("abc" + cde);
String c = "abc".substring(2,3);
String d = cde.substring(1, 2);

Class String memiliki method untuk menangani individual karakter dari suatu string,
membandingkan string, mencari string, mendapatkan substring, membuat kopi isi string
44

dan dijadikan lowercase atau uppercase. Java menyediakan operator spesial untuk
menggabungkan dua string yaitu operator plus (+).
Class StringBuffer mirip dengan String tetapi bersifat mutable, atau dapat
diubah atau dimodifikasi dengan menggunakan beberapa method yang dimilikinya.
String buffer aman digunakan oleh beberapa thread. Method-methodnya bersifat
synchronized sehingga beberapa operasi yang terjadi pada suatu obyek string buffer
akan diselesaikan secara serial sesuai urutan pemanggilan.
Operasi utama class StringBuffer adalah method append dan insert. Method
append

selalu menambahkan teks diakhir string, sedang method insert menembahkan

teks di posisi tertentu. Sebagai contoh:


StringBuffer sb1 = new StringBuffer(start);
sb1.append(le);

maka isi sb1 adalah startle

StringBuffer sb2 = new StringBuffer(start);


sb2. insert(4,le);

maka isi sb1 adalah starlet

Secara umum, jika sb adalah obyek dari StringBuffer, maka sb.append(x) sama
dengan operasi sb.insert(sb.length(),x). StringBuilder adalah string yang
bersifat mutable. Operasi yang dimiliki class StringBuilder mirip dengan class
StringBuffer.

Perbedaannya adalah StringBuilder tidak mendukung sinkronisasi.

C. TUGAS PENDAHULUAN
1. Apakah perbedaan class String, StringBuffer dan StringBuilder?
2. Apakah yang dimaksud dengan sifat mutable dan immutable? Beri contoh!
3. Jelaskan operasi utama append dan insert yang dimiliki oleh StringBuffer!

D. PERCOBAAN
Percobaan 1. Karakter escape
Di dalam String kita dapat memasukkan sekuen dari karakter escape yang terdiri dari
satu karakter back slash (\) diikuti oleh karakter escape tersebut.
Beberapa escape character yang sering digunakan adalah :
- \n untuk baris baru
45

- \t untuk tab
- \\ untuk karakter back slash (\) itu sendiri
Cobalah kode dibawah ini. Apakah outputnya?
class Str1{
public static void main(String [] args){
String str1 = "PENS";
String str2 = "pens";
System.out.println(str1 + "\n" + str2);
}
}

Percobaan 2. Membandingkan String


Membandingkan String di java tidak bisa menggunakan operator equals (==) tetapi kita
harus menggunakan method dari String yaitu equals dan equalsIgnoreCase. Sesuai
dengan nama methodnya, equals digunakan untuk membandingkan objek String secara
case-sensitive (huruf kecil dan besar dibedakan) dan sebaliknya equalsIgnoreCase
digunakan untuk membandingkan String secara case-insensitive (huruf besar dan kecil
tidak dibedakan).
Cobalah kode dibawah ini. Apakah outputnya?
class Str2{
public static void main(String [] args){
String str1 = "PENS";
String str2 = "pens";
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2);
}
}

Percobaan 3. Menggabungkan String (Concatenation)


Untuk menggabungkan string kita bisa menggunakan beberapa cara yaitu dengan
menggunakan method concat maupun dengan operator + (plus) dan += (plus sama
dengan).
Cobalah kode dibawah ini. Apakah outputnya?

46

class Str3{
public static void main(String [] args){
String str1 = "Monas";
System.out.println(str1);

String str2 = "monas";


System.out.println(str2);

String str3 = str1 + str2;


System.out.println(str3);

String str4 = str1.concat(str2);


System.out.println(str4);

str1 +=

str2;

System.out.println(str1);
}
}

Percobaan 4. Konversi Otomatis (Automatic Conversion)


Pada saat kita menggunakan concatenation (penggabungan) antara objek string dengan
suatu nilai atau variable yang bertipe primitive (int, char, float, dsbnya) maka secara
otomatis data primitif tersebut akan dikonversi menjadi string.
Cobalah kode dibawah ini. Apakah outputnya?
class Str4{
public static void main(String [] args){
int nilai = 100;
nilai = nilai * 2;
System.out.println("Angka " + 1 + " adalah angka perta
ma bilangan bulat positif");
System.out.println("100 x 2 = " + nilai);
}
}

47

Percobaan 5. Mengganti Nilai String Sederhana


Untuk mengganti nilai text dari String cukup menggunakan method replace dari String.
Cobalah kode dibawah ini. Apakah outputnya?
class Str5{
public static void main(String [] args){
String nama = "Dora";
nama = nama.replace("Dor", "Ti");
System.out.println(nama);
}
}

E. LATIHAN
Latihan 1. Apakah output program dibawah ini?
class Str1{
public static void main(String [] args){
String s=new String("Bicycle");
int iBegin=1;
char iEnd=3;
System.out.println(s.substring(iBegin,iEnd));
}
}

Latihan 2. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class Conv{
public static void main(String argv[]){
Conv c = new Conv();
String s = new String("ello");
c.amethod(s);
}
public void amethod(String s){
char c = 'H';
c += s;
System.out.println(c);
}
}

48

Latihan 3. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class EqTest3{
public static void main(String argv[]){
EqTest e = new EqTest();
}
EqTest(){
String s1 = "Java";
String s2 = "Java";
String s3 = "java";
if(s1 == s2)) {
System.out.println("Equal");
}else{
System.out.println("Not equal");
}
if(s1 == s3)) {
System.out.println("Equal");
}else{
System.out.println("Not equal");
}
}
}

Latihan 4. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class EqTest4{
public static void main(String argv[]){
EqTest e = new EqTest();
}
EqTest(){
String s1 = new String("Java");
String s2 = new String("Java");
String s3 = new String("java");
if(s1 == s2)) {
System.out.println("Equal");
}else{
System.out.println("Not equal");
}
if(s1 == s3)) {
System.out.println("Equal");
}else{
System.out.println("Not equal");
}
}
}

49

Latihan 5. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class EqTest5{
public static void main(String argv[]){
EqTest e = new EqTest();
}
EqTest(){
String s = "Java";
String s2 = "java";
if(s.equalsIgnoreCase(s2)) {
System.out.println("Equal");
}else{
System.out.println("Not equal");
}
}
}

Latihan 6. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class EqTest6{
public static void main(String argv[]){
String str = "Java";
StringBuffer buffer = new StringBuffer(str);
if(str.equals(buffer)){
System.out.println("Both are equal");
}
else{
System.out.println("Both are not equal");
}
}
}

Latihan 7. Apa yang terjadi bila kode berikut ini dikompile dan dijalankan?
Jelaskan!
public class Test {
public static void main(String args[]) {
String str1="abc";
String str2="def";
String str3=str1.concat(str2);
str1.concat(str2);
System.out.println(str1);
}
}

50

F. TUGAS
Tugas 1.
Buatlah sebuah program yang menampikan indek-indek karakter pada suatu kalimat.
Contoh:
Input :

Output:

Kalimat

: Politeknik Elektronika Negeri Surabaya

Karakter

: o

Karakter o terdapat pada indek 1, 17

Tugas 2.
Desain dan implementasikan program Java yang mampu melakukan beberapa operasi
terhadap string Selamat Datang di PENS :
a. Konversikan semua karakter menjadi huruf kapital dan tampilkan ke layar
b. Konversikan semua karakter menjadi huruf kapital dan tampilkan ke layar
c. Tampilkan panjang string
d. Tampilkan indek kata PENS

Tugas 3.
Buatlah sebuah program yang mengubah huruf pertama suatu string dengan huruf
terakhir string tersebut dan sebaliknya!
Contoh:

String masukan

: Amanda Ace

String hasil

: Emende Eca

Program harus bisa berjalan untuk semua inputan string.

Tugas 4.
Buatlah sebuah program yang menukar family name dari dua buah string.
Contoh:

Input

: String nama pertama : Katy Perry


String nama kedua

Output

: Taylor Swift

: String nama pertama : Katy Swift


String nama kedua

: Taylor Perry

Program harus bisa berjalan untuk semua inputan string.

51

Tugas 5.
Buatlah sebuah program yang mampu mengganti kata tertentu suatu string.
Contoh:
Input

: String kalimat utama

: Praktikum di laboratorium Database

String yang diganti

: Database

String pengganti

: Sistem Informasi

Output : Kalimat utama menjadi

: Praktikum di laboratorium Sistem Informasi

Program harus bisa berjalan untuk semua inputan string.

H. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

52

PRAKTIKUM 7
PENGENALAN PEMROGRAMAN
BERBASIS OBYEK
A. TUJUAN PEMBELAJARAN
1.

Mendeklarasikan suatu class

2.

Mendeklarasikan suatu atribut

3.

Mendeklarasikan suatu metod

4.

Mengakses anggota suatu obyek

B. DASAR TEORI
Deklarasi class dapat dilakukan dengan sintaks sebagai berikut:
<modifier> class <nama_class> {
[deklarasi_atribut]
[deklarasi_konstruktor]
[deklarasi_metode]
}

Contoh:
public class Siswa {

Deklarasi atribut dapat dilakukan dengan sintaks sebagai berikut:


<modifier> <tipe> <nama_atribut> ;

Contoh:
public class Siswa {
public int nrp;
53

public String nama;


}

Deklarasi metode dapat dilakukan dengan sintaks sebagai berikut:


<modifier> <return_type> <nama_metode> ([daftar_argumen]) {
[<statement>]
}

Contoh:
public class Siswa {
public int nrp;
public String nama;
public void info() {
System.out.println(Ini siswa PENS);
}
}

Untuk dapat mengakses anggota-anggota dari suatu obyek, maka harus dibuat
instance dari class tersebut terlebih dahulu. Berikut ini adalah contoh pengaksesan
anggota-anggota dari class Siswa:
public class Siswa {
public static void main(String args[]) {
Siswa it=new Siswa();
it.nrp=5;
it.nama=Andi;
it.info();
}
}

C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan kelas, method, atribut dan obyek?
2. Buatlah contoh suatu kelas dan definisikan atribut dan methodnya!
3. Buatlah kode program soal no. 2 diatas!

54

4. Buatlah kelas yang berisi main method yang membuat obyek dari kelas yang telah
dibuat di soal no. 3. Selanjutnya obyek tersebut mengakses atribut dan methodnya.

D. PERCOBAAN
Percobaan 1 : Mengakses anggota suatu class
Amati program dibawah ini:
public class Siswa {
int nrp;
public void setNrp(int i) {
nrp=i;
}
}

public class Test {


public static void main(String args[]) {
Siswa anak=new Siswa();
anak.setNrp(5);
System.out.println(anak.nrp);
}
}

Percobaan 2 : Mengakses anggota suatu class


Amati program dibawah ini:
public class Siswa {
int nrp;
String nama;

public void setNrp(int i) {


nrp=i;
}

public void setNama(String i) {


nama=i;
}
}

55

Percobaan 3 : Mengimplementasikan UML class diagram dalam program


Berikut adalah sebuah UML class diagram dari suatu kasus:

Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai


berikut:
public class Siswa {
public int nrp;

public Siswa(int i) {
nrp=i;
}

public void setNrp(int i) {


nrp=i;
}
public int getNrp() {
return nrp;
}
}

56

E. LATIHAN

Latihan 1 : Mengimplementasikan UML class diagram dalam program untuk class


Tabungan.

Transformasikan class diagram diatas ke dalam bentuk program. Tulislah listing


program berikut ini sebagai pengetesan.
public class TesLatihan1{
public static void main(String args[]){
Tabungan tabungan = new Tabungan(5000);
System.out.println("Saldo awal : " + tabungan.saldo);
tabungan.ambilUang(2300);
System.out.println("Jumlah uang yang diambil : 2300");
System.out.println("Saldo sekarang : " + tabungan.saldo);
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Saldo awal : 5000
Jumlah uang yang diambil : 2300
Saldo sekarang : 2700

57

Latihan 2 :

Mengimplementasikan UML class diagram dalam program untuk

class Mahasiswa

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
public class TesLatihan2{
public static void main(String args[]){
Mahasiswa mhs = new Mahasiswa(12345, "Jono");
System.out.println("NRP : " + mhs.getNrp());
System.out.println("Nama : " + mhs.getnama());
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.

NRP : 12345
Nama : Jono

58

Latihan 3 :

Mengimplementasikan UML class diagram dalam program untuk

class Truk

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
public class TesLatihan3{
public static void main(String args[]){
Truk truk = new Truk(1000);
System.out.println("Muatan maksimal = "+truk.getMuatanMaks());
truk.tambahMuatan(500.0);
System.out.println("Tambah muatan : 500 ");
truk.tambahMuatan(350.0);
System.out.println("Tambah muatan : 350 ");
truk.tambahMuatan(100.0);
System.out.println("Tambah muatan : 100 ");
truk.tambahMuatan(150.0);
System.out.println("Tambah muatan : 150 ");
System.out.println("Muatan sekarang = " + truk.getMuatan());
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Muatan maksimal : 1000.0
Tambah muatan : 500
Tambah muatan : 350
Tambah muatan : 100
Tambah muatan : 150
Muatan sekarang = 950.0

59

F. TUGAS
Tugas 1 :

Mengimplementasikan UML class diagram dalam program untuk

class Tabungan

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
public class TesTugas1 {
public static void main (String srt[]){
boolean status;
Tabungan tabungan = new Tabungan(5000);
System.out.println("Saldo awal :"+tabungan.getSaldo());

tabungan.simpanUang(3000);
System.out.println("Jumlah uang yang disimpan : 3000");

status = tabungan.ambilUang(6000);
System.out.println("Jumlah uang yang diambil : 6000");
if (status)
System.out.println("Ok");
else
System.out.println("Gagal");

tabungan.simpanUang(3500);
System.out.println("Jumlah uang yang disimpan :3500");

status = tabungan.ambilUang(4000);
System.out.println("Jumlah uang yang diambil : 4000");

60

if (status)
System.out.println("Ok");
else
System.out.println("Gagal");

status = tabungan.ambilUang(1600);
System.out.println("Jumlah uang yang diambil : 1600");
if (status)
System.out.println("Ok");
else
System.out.println("Gagal");

tabungan.simpanUang(2000);
System.out.println("Jumlah uang yang disimpan :2000");
System.out.println("Saldo sekarang = " + tabungan.getSaldo());
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Saldo awal : 5000
Jumlah uang yang disimpan : 3000
Jumlah uang yang diambil : 6000

ok

Jumlah uang yang disimpan : 3500


Jumlah uang yang diambil : 4000

ok

Jumlah uang yang diambil : 1600

gagal

Jumlah uang yang disimpan : 2000


Saldo sekarang = 3500

Tugas 2 : Menganalisa, membuat UML class diagram dan implementasi program


Seorang pengusaha rental mobil kesulitan mengingat armada kendaraan yang
dimilikinya. Oleh karena itu pengusaha tersebut menugaskan pegawainya untuk
mengidentifikasi tersebut. Hasil identifikasi dicatat dalam suatu table sebagaimana bisa

61

dilihat pada Tabel 7.1. Sayangnya karena merupakan pegawai baru maka ia tidak
memahami nama hal yang diidentifikasi (A,B,C, D, dan E).
a. Bantulah pegawai tersebut dalam menentukan nama hal yang diidentifikasi (A,B,C,
D, dan E).
b. Bantulah pengusaha tersebut dalam membuat UML class diagram Mobil.
Tambahkan method infoMobil() yang bertujuan untuk menampilkan semua
karakteristik mobil (A,B,C, D, dan E).
c. Buatlah kelas Mobil.java yang mengimplementasikan desain UML class diagram
anda!
d. Buatlah kelas TesMobil.java yang berisi pembuatan 4 (empat) buah obyek bernama
mobil1, mobil2, mobil3, mobil4. Mengeset karakteristik masing-masing dan
menampilkan info karakteristik mobil.

Tabel 7.1. Data karakteristik mobil


Obyek

B
Biru

minibus

2000

mobil1

Toyota

mobil2

Daihatsu Hitam

pick up

1500

mobil3

Suzuki

Silver

suv

1800

mobil4

Honda

Merah

sedan

1300

H. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

62

PRAKTIKUM 8
ENKAPSULASI
A. TUJUAN PEMBELAJARAN
1. Menerapkan konsep enkapsulasi pada class
2. Mendeklarasikan suatu constructor

B. DASAR TEORI
Kita dapat menyembunyikan information dari suatu class sehingga anggotaanggota class tersebut tidak dapat diakses dari luar. Adapun caranya adalah cukup
dengan memberikan akses kontrol private ketika mendeklarasikan suatu atribut atau
method. Contoh:
private int nrp;

Encapsulation (Enkapsulasi) adalah suatu cara untuk menyembunyikan


implementasi detail dari suatu class. Enkapsulasi mempunyai dua hal mendasar, yaitu :
1. information hiding
2. menyediakan suatu perantara (method) untuk pengaksesan data
Contoh:
public class Siswa {
private int nrp;

public void setNrp(int n) {


nrp=n;
}
}

Contructor (konstruktor) adalah suatu method yang pertama kali dijalankan pada
63

saat pembuatan suatu obyek. Konstruktor mempunyai ciri yaitu :


1. mempunyai nama yang sama dengan nama class
2. tidak mempunyai return type (seperti void, int, double dll)
Contoh:
public class Siswa {
private int nrp;
private String nama;

public Siswa(int n, String m) {


nrp=n;
nama=m;
}
}

Suatu class dapat mempunyai lebih dari 1 konstruktor dengan syarat daftar
parameternya tidak boleh ada yang sama. Contoh :
public class Siswa {
private int nrp;
private String nama;

public Siswa(String m) {
nrp=0;
nama=;
}

public Siswa(int n, String m) {


nrp=n;
nama=m;
}
}

C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan enkapsulasi?
2. Apakah yang dimaksud dengan constructor?
2. Apakah yang dimaksud dengan overloading constructor?
64

D. PERCOBAAN
Percobaan 1 : Melakukan enkapsulasi pada suatu class
Implementasikan UML class diagram Mahasiswa sebelum dan setelah dilakukan
enkapsulasi!

Jika enkapsulasi dilakukan pada class diagram diatas, maka akan berubah menjadi:

Percobaan 2 : Melakukan overloading constructor

Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai


berikut:
public class Mahasiswa {
private int nrp;

65

private String nama;

public Mahasiswa() {
nrp=0;
nama=;
}

public Mahasiswa(String nama) {


nrp=0;
this.nama=nama;
}

public Mahasiswa(int nrp, String nama) {


this.nrp=nrp;
this.nama=nama;
}
}

E. LATIHAN
Latihan 1: Mengimplementasikan UML class diagram dalam program untuk class
Kalender

Dari class diagram diatas, desainlah suatu class yang memenuhi konsep enkapsulasi.
Untuk nilai inisialisasi, dipakai 1-1-2000. Pakailah kata kunci this untuk mempersingkat
pengkodean. Tulislah listing program berikut ini sebagai pengetesan.

66

public class TesKalender {


public static String getTime(Kalender kal) {
String tmp;
tmp = kal.getTanggal() + "-" +
kal.getBulan() + "-" +
kal.getTahun();
return tmp;
}
public static void main(String args[]) {
Kalender kal = new Kalender(8);
System.out.println("Waktu awal : " + getTime(kal));
kal.setTanggal(9);
System.out.println("1 hari setelah waktu awal : "+getTime(kal));
kal = new Kalender(6, 2003);
System.out.println("Waktu berubah : " + getTime(kal));
kal.setBulan(7);
System.out.println("1 bulan setelah itu : " + getTime(kal));
kal = new Kalender(20, 10, 2004);
System.out.println("Waktu berubah : " + getTime(kal));
kal.setTahun(2005);
System.out.println("1 tahun setelah itu : " + getTime(kal));
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda.
Waktu awal : 8-1-2000
1 hari setelah waktu awal : 9-1-2000
Waktu berubah : 1-6-2003
1 bulan setelah itu : 1-7-2003
Waktu berubah : 20-10-2004
1 tahun setelah itu : 20-10-2005

67

Latihan 2 : Mengimplementasikan UML class diagram dalam program untuk class


Truk

Keterangan : 1 kilogram = 9,8 newtons

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
public class TesTugas2{
public static void main(String args[]){
boolean status;

Truk truk = new Truk(900);


System.out.println("Muatan maksimal = "+truk.getMuatanMaks());
status = truk.tambahMuatan(500.0);
System.out.println("Tambah muatan : 500");
if (status)
System.out.println("Ok");
else
System.out.println("Gagal");

status = truk.tambahMuatan(300.0);
System.out.println("Tambah muatan : 300");
if (status)
System.out.println("Ok");

68

else
System.out.println("Gagal");

status = truk.tambahMuatan(150.0);
System.out.println("Tambah muatan : 150");
if (status)
System.out.println("Ok");
else
System.out.println("Gagal");

status = truk.tambahMuatan(50.0);
System.out.println("Tambah muatan : 50");
if (status)
System.out.println("Ok");
else
System.out.println("Gagal");
System.out.println("Muatan sekarang = " + truk.getMuatan());
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Muatan
Tambah
Tambah
Tambah
Tambah
Muatan

maksimal
muatan :
muatan :
muatan :
muatan :
sekarang

: 900.0
500 ok
300 ok
150 gagal
50 ok
= 849.9999999999999

F. TUGAS
Tugas 1. Menerapkan konsep enkapsulasi pada kelas Tabungan yang terdapat di
Tugas 1. Bab 7. Pengenalan Pemrograman Berbasis Obyek.

69

Kembangkan kelas Tabungan diatas sehingga memungkinkan pengguna untuk memilih


satuan mata uang yang berbeda (USD, AUD, IDR) ketika mengambil atau menyimpan
uang. Saldo tabungan disimpan dalam satuan IDR oleh sistem. Beri nama kelas anda
dengan nama MultiTabungan.java. Diasumsikan bahwa:
1 AUD = 10.000 IDR
1 USD = 9.000 IDR
Buat kelas baru untuk mengetes kelas MultiTabungan yang anda buat!

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

70

PRAKTIKUM 9
MENGELOLA KELAS
A. TUJUAN PEMBELAJARAN
1. Memahami konsep package dan import
2. Menggunakan kata kunci this

B. DASAR TEORI
Package adalah suatu cara untuk memenej class-class yang kita buat. Package
akan sangat bermanfaat jika class-class yang kita buat sangat banyak sehingga perlu
dikelompokkan berdasarkan kategori tertentu. Contoh:
package it;

package telkom;

public class Siswa {

public class Siswa {

Yang perlu kita perhatikan pada saat deklarasikan package, bahwa class tersebut harus
disimpan pada suatu direktori yang sama dengan nama package-nya. Suatu class dapat
meng-import class lainnya sesuai dengan nama package yang dipunyainya. Contoh:
import it.Siswa;
public class IsiData {

Satu hal yang perlu kita ketahui, pada saat kita ingin meng-import suatu class dalam
suatu package, pastikan letak package tersebut satu direktori dengan class yang ingin
meng-import.
Kata kunci this sangat berguna untuk menunjukkan suatu member dalam classnya sendiri. This dapat digunakan baik untuk data member maupun untuk function
71

member, serta dapat juga digunakan untuk konstruktor. Adapun format penulisannya
adalah:
this.data_member

merujuk pada data member

this.function_member()

merujuk pada function member

this()

merujuk pada konstruktor

Contoh:
class Parent {
public int x = 5;
}

class Child extends Parent {


public int x = 10;
public void Info() {
System.out.println(super.x);
}
}

Ketika kita memakai konsep inheritance, maka yang harus kita ketahui adalah
konstruktor dari parent class tidak dapat diwariskan ke subclass-nya. Sebagai
konsekuensinya adalah setiap kali kita membuat suatu subclass, maka kita harus
memanggil konstruktor parent class di konstruktor subclass. Jika kita tidak
mendeklarasikannya secara eksplisit, maka kompiler Java akan menambahkan deklarasi
pemanggilan kontruktor parent class di konstruktor subclass.

C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan package?
2. Apakah kegunaan kata kunci import?
3. Apakah kegunaan kata kunci this?

72

D. PERCOBAAN
Percobaan 1 : Menggunakan kata kunci this

Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai


berikut:
public class Mahasiswa {
public int nrp;
public String nama;

public Mahasiswa(int nrp, String nama) {


this.nrp=nrp;
this.nama=nama;
}
}

Percobaan 2 : Memakai kata kunci this pada overloading constructor

Dari class diagram tersebut, dapat diimplementasikan ke dalam program sebagai


berikut:

73

public class Mahasiswa {


private int nrp;
private String nama;

public Mahasiswa() {
this(0,);
}

public Mahasiswa(String nama) {


this(0,nama);
}

public Mahasiswa(int nrp, String nama) {


this.nrp=nrp;
this.nama=nama;
}
}

Percobaan 3 : Menggunakan package dan import

74

Dari class diagram tersebut, dapat diimplementasikan ke dalam program dibawah ini.
Sebelum melakukan kompilasi, daftarkan direktori tempat package diatas disimpan.
package sekolah;

package sekolah;

public class Kelas {

public class Mahasiswa {

private int kodekelas;

private int nrp;

private String namakelas;

private String nama;

private Mahasiswa mahasiswa;


public Mahasiswa(int nrp,
public Kelas(int kode,

String nama) {

String nama) {

this.nrp=nrp;

this.kodekelas=kode;

this.nama=nama;

this.namakelas=nama;
}

}
}

public void setMhs


(Mahasiswa mhs) {
this.mahasiswa=mhs;
}
}

75

E. LATIHAN
Latihan 1: Mengimplementasikan UML class diagram dalam program untuk
package perbankan

import perbankan.*;

public class TesLatihan {


public static void main(String[] args) {
int tmp;
boolean status;

Nasabah nasabah = new Nasabah("Agus","Daryanto");


System.out.println("Nasabah atas nama
"+nasabah.getNamaAwal()+nasabah.getNamaAkhir());

nasabah.setTabungan(new Tabungan (5000));


tmp = nasabah.getTabungan().getSaldo();
System.out.println("Saldo awal : "+tmp);

nasabah.getTabungan().simpanUang(3000);
System.out.println("Jumlah uang yang disimpan 3000");

status=nasabah.getTabungan().ambilUang(6000);

76

System.out.println("Jumlah uang yang diambil 6000");


if(status)
System.out.println("

OK");

else
System.out.println(" Gagal");

nasabah.getTabungan().simpanUang(3500);
System.out.println("Jumlah uang yang disimpan 3500");

status=nasabah.getTabungan().ambilUang(4000);
System.out.println("Jumlah uang yang diambil 4000");

if(status)
System.out.println("

OK");

else
System.out.println(" Gagal");

status=nasabah.getTabungan().ambilUang(1600);
System.out.println("Jumlah uang yang diambil 1600");
if(status)
System.out.println("

OK");

else
System.out.println(" Gagal");

nasabah.getTabungan().simpanUang(2000);
System.out.println("Jumlah uang yang disimpan 2000");

tmp=nasabah.getTabungan().getSaldo();
System.out.println("Saldo sekarang = "+tmp);
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.

77

Nasabah atas nama : Agus Daryanto


Saldo awal : 5000
Jumlah uang yang disimpan : 3000
Jumlah uang yang diambil : 6000

ok

Jumlah uang yang disimpan : 3500


Jumlah uang yang diambil : 4000

ok

Jumlah uang yang diambil : 1600

gagal

Jumlah uang yang disimpan : 2000


Saldo sekarang = 3500

F. TUGAS
Tugas 1 : Perhatikan program dibawah ini. Apa yang terjadi bila dikompile dan
dijalankan? Jelaskan jawaban anda!
public class Pegawai{
int nip;
String nama;

public Pegawai(int nip_pegawai){


this(nip_pegawai,NoName);
}

public Pegawai(int nip_pegawai, String nama_pegawai){


this.nip = nip_pegawai;
this.nama = nama_pegawai;
}
}

78

Tugas 2. Mengembangkan package perbankan dengan tambahan class Bank

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
import perbankan.*;

public class TesTugas {


public static void main(String arg []){
Bank bank = new Bank();
bank.tambahNasabah("Agus", "Daryanto");
bank.getNasabah(0).setTabungan(new Tabungan(5000));
bank.tambahNasabah("Tuti", "Irawan");
bank.getNasabah(1).setTabungan(new Tabungan(7000));
bank.tambahNasabah("Ani", "Ratna");
bank.getNasabah(2).setTabungan(new Tabungan(4000));
bank.tambahNasabah("Bambang", "Darmawan");
bank.getNasabah(3).setTabungan(new Tabungan(6500) );
System.out.println("Jumlah Nasabah = "+

79

bank.getJumlahNasabah());
for(int i =0; i<bank.getJumlahNasabah(); i++){
System.out.println("Nasabah ke-" + (i+1) + " : " +
bank.getNasabah(i).getNamaAwal() + " " +
bank.getNasabah(i).getNamaAkhir() + " ; Saldo = " +
bank.getNasabah(i).getTabungan().getSaldo());
}
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.

Jumlah nasabah = 4
Nasabah ke-1 : Agus Daryanto ; Saldo = 5000
Nasabah ke-2 : Tuti Irawan ; Saldo = 7000
Nasabah ke-3 : Ani Ratna ; Saldo = 4000
Nasabah ke-4 : Bambang Darwaman ; Saldo = 6500

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

80

PRAKTIKUM 10
INHERITANCE 1
A. TUJUAN PEMBELAJARAN
1. Memahami dan menerapkan konsep inheritance dalam pemrograman
2. Memahami pengaksesan member pada parent class
3. Memahami konsep single inheritance
4. Memahami konsep multi level inheritance

B. DASAR TEORI
Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat
mempunyai entitas/obyek turunan. Dengan konsep inheritance, sebuah class dapat
mempunyai class turunan. Suatu class yang mempunyai class turunan dinamakan parent
class atau base class. Sedangkan class turunan itu sendiri seringkali disebut subclass
atau child class. Suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent classnya, sehingga member dari suatu subclass adalah terdiri dari apa-apa yang ia punyai dan
juga apa-apa yang ia warisi dari class parent-nya. Kesimpulannya, boleh dikatakan
bahwa suatu subclass adalah tidak lain hanya memperluas (extend) parent class-nya.
Di dalam Java untuk mendeklarasikan suatu class sebagai subclass dilakukan
dengan cara menambahkan kata kunci extends setelah deklarasi nama class, kemudian
diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu
kompiler Java bahwa kita ingin melakukan perluasan class. Berikut adalah contoh
deklarasi inheritance. Contoh:
public class B extends A {
...
}

81

Contoh diatas memberitahukan kompiler Java bahwa kita ingin meng-extend class A ke
class B. Dengan kata lain, class B adalah subclass (class turunan) dari class A,
sedangkan class A adalah parent class dari class B.
Java hanya memperkenankan adanya single inheritance. Konsep single
inheritance hanya memperbolehkan suatu sublass mempunyai satu parent class. Dengan
konsep single inheritance ini, masalah pewarisan akan dapat diamati dengan mudah.
Konsep single inheritance bisa dilihat pada Gambar 11.1. Pada gambar tersebut bisa
dilihat bahwa tiap class pasti memiliki hanya satu perant class. Java mengijinkan suatu
sub class untuk memiliki anak lagi. Hal ini disebut dengan konsep multi level
inheritance. Contohnya class Kendaraan memiliki class anak yaitu Bermotor, dan class
Bermotor memiliki class anak lagi yaitu Mobil dan Pesawat.

Kendaraan

Tidak Bermomotor

Bermotor

Mobil

Pesawat

Delman

Andong

Becak

Gambar 11.1 Gambaran konsep single dan multi level inheritance

Dalam konsep dasar inheritance dikatakan bahwa suatu subclass adalah tidak
lain hanya memperluas (extend) parent class-nya. Contoh :

public class Pegawai {


public String nama;
public double gaji;

public class Manajer extends Pegawai {


public String departemen;
}

82

Pada saat class Manajer menurunkan atau memperluas (extend) class Pegawai,
maka ia mewarisi data member yang dipunyai oleh class Pegawai. Dengan demikian,
class Manajer mempunyai data member yang diwarisi oleh Pegawai (nama, gaji),
ditambah dengan data member yang ia punyai (departemen).
Pengaksesan member yang ada di parent class dari subclass-nya tidak jauh
berbeda dengan pengaksesan member subclass itu sendiri. Contoh:
public class Manajer extends Pegawai {
public String departemen;

public void IsiData(String n, String d) {


nama = n;
departemen = d;
}
}

C. TUGAS PENDAHULUAN
1. Apa yang dimaksud dengan inheritance?
2. Buatlah contoh kasus yang menerapkan konsep inheritance !
3. Adakah perbedaan cara mengakses member class milik parent dan member class
milik sendiri? Jelaskan melalui contoh ! (Silahkan memanfaatkan jawaban soal
nomor 2.)
4. Apa yang dimaksud dengan konsep single inheritance ?
5. Apa yang dimaksud dengan konsep multi level inheritance ?

D. PERCOBAAN
Penyembunyian informasi
Buatlah class Pegawai seperti dibawah ini:
public class Pegawai {
private String nama;
public double gaji;
}

83

Kemudian buatlah class Manajer seperti ini dibawah ini.


public class Manajer extends Pegawai {
public String departemen;

public void IsiData(String n, String d) {


nama=n;
departemen=d;
}
}

Sekarang cobalah untuk mengkompilasi class Manajer diatas. Apa yang terjadi?. Pesan
kesalahan akan muncul seperti ini:
Manajer.java:5: nama has private access in Pegawai
nama=n;

Ini membuktikan bahwa class Manajer tidak mewarisi data member nama dari parent
class-nya (Pegawai).

E. LATIHAN
Latihan 1. Tempatkan class Base dan class Class1 di direktori yang sama. Apa
yang terjadi ketika Class1.java dikompile dan dijalankan jika sebelumnya
Base.java belum dikompile? Jelaskan !
//Base.java
package Base;
class Base{
protected void amethod(){
System.out.println("amethod");
}//End of amethod
}//End of class base

84

package Class1;
//Class1.java
public class Class1 extends Base{
public static void main(String argv[]){
Base b = new Base();
b.amethod();
}//End of main
}//End of Class1

Latihan 2. Aturan overriding


a. Berdasarkan kode di bawah ini, akses modifier (public, protected atau private)
apa yang diijinkan di tambahkan sebelum myMethod() baris 3?
b. Jika baris 3 seperti kode di bawah (apa adanya tanpa perubahan) keywords apa
yang diijinkan ditambahkan sebelum myMethod baris 8?
1.
2.
3.
4.
5.
6.
7.
8.
9.

class HumptyDumpty
{
void myMethod() {}
}
class HankyPanky extends HumptyDumpty
{
void myMethod() {}
}

Latihan 3.
a. Apa yang terjadi bila kedua kode dibawah ini dikompile dan dijalankan dalam
satu direktori? Jelaskan !
b. Bagaimana solusi supaya tidak terjadi error?
//File P1.java
package MyPackage;
class P1{
void aFancyMethod(){
System.out.println("What a fancy method");
}
}
//File P2.java
public class P2 extends P1{
public static void main(String argv[]){
P2 p2 = new P2();
p2.aFancyMethod();
}
}

85

Latihan 4. Mengimplementasikan UML class diagram dalam program untuk


package perbankan

Ubahlah mode akses atribut saldo pada Tabungan menjadi protected. Lalu
Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing
program berikut ini sebagai pengetesan.
import perbankan.*;

public class TesLatihan{


public static void main(String args[]){
PenyimpananUang tabungan = new PenyimpananUang(5000, 8.5/100);
System.out.println("Uang yang ditabung : 5000");
System.out.println("Tingkat bunga sekarang : 8.5%");
System.out.println("Total uang anda sekarang : " +
tabungan.cekUang());
}
}

86

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Uang yang ditabung : 5000
Tingkat bunga sekarang : 8.5%
Total uang anda sekarang : 5425.0

F. TUGAS
Mengimplementasikan UML class diagram dalam program untuk package
perbankan

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
import perbankan.*;

public class TesTugas{


public static void main(String args[]){

87

PengambilanUang tabungan = new PengambilanUang(5000, 1000);


System.out.println("Uang yang ditabung : 5000");
System.out.println("Uang yang diproteksi : 1000");
System.out.println("-----------------------------");
System.out.println("Uang yang akan diambil : 4500 " +
tabungan.ambilUang(4500));
System.out.println("Saldo sekarang : " + tabungan.getSaldo());
System.out.println("-----------------------------");
System.out.println("Uang yang akan diambil : 2500 " +
tabungan.ambilUang(2500));
System.out.println("Saldo sekarang : " + tabungan.getSaldo());
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Uang yang ditabung : 5000
Uang yang diproteksi : 1000
----------------Uang yang akan diambil : 4500 false
Saldo sekarang : 5000
----------------Uang yang akan diambil : 2500 true
Saldo sekarang : 2500

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

88

PRAKTIKUM 11
INHERITANCE 2
A. TUJUAN PEMBELAJARAN
1. Melakukan pengontrolan akses pada pengkodean
2. Menggunakan kata kunci super
3. Menghindari kesalahan pada pewarisan konstruktor

B. DASAR TEORI
Suatu parent class dapat tidak mewariskan sebagian member-nya kepada
subclass-nya. Sejauh mana suatu member dapat diwariskan ke class lain, ataupun suatu
member dapat diakses dari class lain, sangat berhubungan dengan access control
(kontrol pengaksesan). Di dalam java, kontrol pengaksesan dapat digambarkan dalam
Tabel 9.1.
Tabel 9.1. Akses modifier
Modifier

class

package

yang sama

yang sama

subclass

class
manapun

private

default

protected

public

Kata kunci super dipakai untuk merujuk pada member dari parent class,
sebagaimana kata kunci this yang dipakai untuk merujuk pada member dari class itu
sendiri. Adapun format penulisannya adalah sebagai berikut:
super.data_member

merujuk pada data member pada parent class

super.function_member() merujuk pada function member pada parent class


89

super()

merujuk pada konstruktor pada parent class

Dalam inheritance, member kelas yang diwariskan hanyalah variabel dan


method saja. Sedangkan konstruktorparent class tidak diwariskan ke sub class. Tetapi
ketika suatu obyek anak dibuat dalam artian ketika konstruktor anak dijalankan maka
konstruktor parent class dijalankan terlebih dahulu dan selanjutnya menyelesaikan
konstruktor anak.

C. TUGAS PENDAHULUAN
1. Ada berapa modifier untuk pengontrolan akses? Jelaskan masing-masing!
2. Apakah kegunaan kata kunci super? Jelaskan !
3. Apakah yang dimaksud dengan konstruktor tidak diwariskan?

D. PERCOBAAN
Percobaan 1 : Menggunakan kata kunci super
Berikut ini listing penggunaan kata kunci super.
class Parent {
public int x = 5;
}

class Child extends Parent {


public int x = 10;
public void Info(int x) {
System.out.println("Nilai x sebagai parameter = " + x);
System.out.println("Data member x di class Child = " + this.x);
System.out.println("Data member x di class Parent = " + super.x);
}
}

public class NilaiX {


public static void main(String args[]) {
Child tes = new Child();
tes.Info(20);
}

90

Ketika program tersebut dijalankan, akan tampak hasil seperti dibawah ini :
Nilai x sebagai parameter = 20
Data member x di class Child = 10
Data member x di class Parent = 5

Percobaan 2 : Konstruktor tidak diwariskan


Buatlah class kosong bernama Parent seperti dibawah:
public class Parent {

Buatlah class Child yang menurunkan class Parent seperti dibawah ini:
public class Child extends Parent {
int x;
public Child() {
x = 5;
super();
}
}

Lakukan kompilasi pada Child diatas. Apa yang terjadi?. Pasti disana terjadi error.
Sekarang ubahlah sedikit class Child diatas seperti dibawah ini:
public class Child extends Parent {
int x;
public Child() {
super();
x = 5;
}
}

91

Setelah dikompilasi, anda tidak mendapatkan error sebagaimana yang sebelumnya. Ini
yang harus kita perhatikan bahwa untuk pemanggilan konstruktor parent class, kita
harus melakukan pemanggilan tersebut di baris pertama pada konstruktor subclass.
E. LATIHAN
Latihan 1. Konstruktor tidak diwariskan
Buatlah class berikut ini
class Base{
Base(int i){
System.out.println("base constructor");
}
Base(){
}
}
public class Sup extends Base{
public static void main(String argv[]){
Sup s= new Sup();
//baris 1
}

Sup(){
// baris 2
}

public void derived(){


// baris 3
}
}

Modifikasilah class Sup (di bagian //baris 1, //baris 2 atau //baris 3) sedemikian hingga
konstruktor kelas Base (konstruktor Base(int i)) dipanggil dan menampilkan string
base constructor ke layar!

92

Latihan 2. Konstruktor tidak diwariskan


private class Base{
Base(){
int i = 100;
System.out.println(i);
}
}

public class Pri extends Base{


static int i = 200;
public static void main(String argv[]){
Pri p = new Pri();
System.out.println(i);
}
}

Kompile dan jalankan program diatas! Apa yang terjadi? Jelaskan !

Latihan 3. Apa yang tampil di layar bila kode dibawah ini dijalankan?
class X{
Y b = new Y();
X(){
System.out.print("X");
}
}
class Y{
Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y = new Y();
Z(){
System.out.print("Z");
}
public static void main(String[] args){
new Z();
}
}

93

Latihan 4. Kompile dan jalankan program berikut! Apa yang terjadi? Jelaskan !
public class Hope{
public static void main(String argv[]){
Hope h = new Hope();
}
protected Hope(){
for(int i =0; i <10; i ++){
System.out.println(i);
}
}
}

F. TUGAS
Mengimplementasikan UML class diagram dalam program.
a. Buatlah kelas-kelas berdasarkan UML class diagram dibawah ini!

94

b. Selanjutnya buatlah kelas Tes.java yang membuat obyek-obyek serta mengeset nilai
variabel seperti pada Tabel 9.2.dan tampilkan data per obyek.
Tabel 9.2. Data obyek
Obyek
truk1
truk2

jmlRoda warna
4 kuning
6 merah

taksi1
taksi1

4 oranye
4 biru

sepeda1
sepeda2

3 hitam
2 putih

bahanBakar kapasitasMesin muatanMaks


solar
1500
1000
solar
2000
5000
tarifAwal
tarifPerKm
bensin
1500
10000
5000
bensin
1300
7000
3500
jmlSadel
jmlGir
1
2
2
5

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

95

PRAKTIKUM 12
OVERLOADING DAN OVERRIDING
A. TUJUAN PEMBELAJARAN
1. Memahami tentang overloading
2. Memahami tentang overriding
3. Memahami aturan tentang overridden

B. DASAR TEORI
Overloading adalah suatu keadaan dimana beberapa method sekaligus dapat
mempunyai nama yang sama, akan tetapi mempunyai fungsionalitas yang berbeda.
Contoh penggunaan overloading dilihat dibawah ini:

Gambar(int t1)

1 parameter titik, untuk menggambar titik

Gambar(int t1,int t2)

2 parameter titik, untuk menggambar garis

Gambar(int t1,int t2,int t3)3

parameter titik, untuk menggambar segitiga

Gambar(int t1,int t2,int t3,int t4)4 parameter titik, untuk

menggambar

persegi empat
Overloading ini dapat terjadi pada class yang sama atau pada suatu parent class dan
subclass-nya. Overloading mempunyai ciri-ciri sebagai berikut:
1. Nama method harus sama
2. Daftar parameter harus berbeda
3. Return type boleh sama, juga boleh berbeda

Overriding adalah suatu keadaan dimana method pada subclass menolak method
pada parent class-nya. Overriding mempunyai ciri-ciri sebagai berikut :
1. Nama method harus sama
2. Daftar parameter harus sama
96

3. Return type harus sama


Berikut ini contoh terjadinya overriding dimana method Info() pada class Child mengoverride method Info() pada class parent:
class Parent {
public void Info() {
System.out.println(Ini class Parent);
}
}

class Child extends Parent {


public void Info() {
System.out.println(Ini class Child);
}
}

Method yang terkena override (overridden method) diharuskan tidak boleh


mempunyai modifier yang lebih luas aksesnya dari method yang meng-override
(overriding method).

C. TUGAS PENDAHULUAN
1. Memahami tentang overloading
2. Memahami tentang overriding
3. Memahami aturan tentang overridden

D. PERCOBAAN
Melakukan overloading pada method
Tulislah listing program berikut ini dan amati yang terjadi pada saat terjadinya
overloading pada method.
import java.awt.Point;

public class Segiempat {


int x1 = 0;

97

int y1 = 0;
int x2 = 0;
int y2 = 0;

public void buatSegiempat(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}

public void buatSegiempat(Point topLeft, Point bottomRight) {


x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
}

public void buatSegiempat(Point topLeft, int w, int h) {


x1 = topLeft.x;
y1 = topLeft.y;
x2 = (x1 + w);
y2 = (y1 + h);
}

void cetakSegiempat(){
System.out.print("Segiempat: <" + x1 + ", " + y1);
System.out.println(", " + x2 + ", " + y2 + ">");
}

public static void main(String[] arguments) {


Segiempat rect = new Segiempat();
System.out.println("Buat segiempat dengan koordinat (25,25)
dan (50,50)");
rect.buatSegiempat(25, 25, 50, 50);
rect.cetakSegiempat();
System.out.println();
System.out.println("Buat segiempat dengan point (10,10) dan

98

point (20,20):");
rect.buatSegiempat(new Point(10,10), new Point(20,20));
rect.cetakSegiempat();
System.out.println();
System.out.print("Buat segiempat dengan 1 point (10,10),
koodinat (50,50)");
rect.buatSegiempat(new Point(10,10), 50, 50);
rect.cetakSegiempat();
}
}

E. LATIHAN
Latihan 1. Overriding
Apa yang terjadi bila program berikut ini dikompile dan dijalankan? Jelaskan !
class Base{
private void amethod(int iBase){
System.out.println("Base.amethod");
}
}

class Over extends Base{


public static void main(String argv[]){
Over o = new Over();
int iBase=0;
o.amethod(iBase);
}
public void amethod(int iOver){
System.out.println("Over.amethod");
}
}

Latihan 2. Overloading
Apa yang terjadi bila program berikut ini dikompile dan dijalankan? Jelaskan !

99

class MyParent {
int x, y;
MyParent(int x, int y){
this.x = x;
this.y = y;
}
public int addMe(int x, int y){
return this.x + x + y + this.y;
}
public int addMe(MyParent myPar){
return addMe(myPar.x, myPar.y);
}
}

class MyChild extends MyParent{


int z;
MyChild (int x, int y, int z) {
super(x,y);
this.z = z;
}
public int addMe(int x, int y, int z){
return this.x + x + this.y + y + this.z + z;
}
public int addMe(MyChild myChi){
return addMe(myChi.x, myChi.y, myChi.z);
}
public int addMe(int x, int y){
return this.x + x + this.y + y;
}
}
public class MySomeOne{
public static void main(String args[])
MyChild myChi = new MyChild(10, 20, 30);
MyParent myPar = new MyParent(10, 20);
int x = myChi.addMe(10, 20, 30);
int y = myChi.addMe(myChi);
int z = myPar.addMe(myPar);
System.out.println(x + y + z);
}
}

100

Latihan 3. Overloading
Apa yang terjadi bila program berikut ini dikompile dan dijalankan? Jelaskan !
class MyClass{
void myMethod(int i) {
System.out.println("int version");
}
void myMethod(String s) {
System.out.println("String version");
}
public static void main(String args[]){
MyClass obj = new MyClass();
char ch = 'c';
obj.myMethod(ch);
}
}

Latihan 4. Mengimplementasikan UML class diagram dalam program

101

Transformasikan class diagram diatas ke dalam bentuk program? Tulislah listing


program berikut ini sebagai pengetesan.
public class TesLatihan{
public static void main(String args[]){
System.out.println("Memasukkan identitas dosen 1 : Agus");
Dosen dosen1 = new Dosen("Agus");

System.out.println("Memasukkan identitas dosen 2 : Budi,


NIP.

1458");

Dosen dosen2 = new Dosen("Budi", 1458);

System.out.println("Memasukkan identitas dosen 3 : Iwan,


NIP.

1215, umur 47");

Dosen dosen3 = new Dosen("Iwan", 1215, 47);

System.out.println();
dosen1.Info();
System.out.println();
dosen2.Info();
System.out.println();
dosen3.Info();
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Masukkan identitas dosen 1 : Agus
Masukkan identitas dosen 2 : Budi, NIP. 1458
Masukkan identitas dosen 3 : Iwan, NIP. 1215, umur 47
Nama : Agus
NIP : Umur : Nama : Budi
NIP : 1458
Umur : Nama : Iwan
NIP : 1215
Umur : 47

102

F. TUGAS
Tugas 1: Mengimplementasikan UML class diagram dalam program
RerataNilai
+ int average(int, int)
+ double average(double, double)
+ int average(int, int, int)

Transformasikan class diagram diatas ke dalam bentuk program? Tulislah listing


program berikut ini sebagai pengetesan
public class TesTugas1{
public static void main(String args[]){
RerataNilai rn = new RerataNilai();
System.out.println("Rerata nilai 21 dan 13 adalah : " +
rn.average(21, 13));
System.out.println("Rerata nilai 19.3 dan 39.5 adalah : " +
rn.average(19.3, 39.5));
System.out.println("Rerata nilai 123, 567 dan 744
adalah : " + rn.average(123, 567, 744));
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti dibawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.
Rerata nilai 21 dan 13 adalah : 27
Rerata nilai 19.3 dan 39.5 adalah : 39.05
Rerata nilai 123, 567 dan 744 adalah : 938

103

Tugas 2: Mengimplementasikan UML class diagram dalam program


Katak
umur : int
nama : String
+ Katak(int, String)
+ String caraBergerak()

Kecebong
panjangEkor : double
+ Kecebong(int, String, double)

Transformasikan

class

diagram

diatas

ke

dalam

bentuk program?

Buatlah

TesTugas2.java yang membuat obyek dengan karakteristik sebagaimana Tabel 13.1.


Selanjutnya tampilkan informasi nama, umur dan cara bergerak obyek-obyek tersebut!

Tabel 13.1 Karakteristik obyek


Obyek

umur

nama

panjangEkor

caraBergerak

O1

Froggy

melompat

O2

Junior Frog 10

berenang

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

104

PRAKTIKUM 13
POLIMORFISME
A. TUJUAN PEMBELAJARAN
1. Memahami dan menerapkan konsep polimorfisme dalam pemrograman
2. Memahami proses terjadinya Virtual Method Invocation
3. Memahami dan menerapkan polymorphic arguments dalam pemrograman
4. Memahami penggunaan instanceof dan cara melakukan casting object

B. DASAR TEORI
Polymorphism (polimorfisme) adalah kemampuan untuk mempunyai beberapa
bentuk class yang berbeda. Polimorfisme ini terjadi pada saat suatu obyek bertipe parent
class, akan tetapi pemanggilan constructornya melalui subclass. Misalnya deklarasi
pernyataan berikut ini:
Employee employee=new Manager();

dimana Manager() adalah kontruktor pada class Manager yang merupakan subclass dari
class Employee.
Virtual Method Invocation (VMI) bisa terjadi jika terjadi polimorfisme dan
overriding. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method
pada parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap
overriding method pada subclass, dimana yang seharusnya dipanggil adalah overridden
method. Berikut contoh terjadinya VMI:
class Parent {
int x = 5;
public void Info() {
105

System.out.println(Ini class Parent);


}
}

class Child extends Parent {


int x = 10;
public void Info() {
System.out.println(Ini class Child);
}
}

public class Tes {


public static void main(String args[]) {
Parent tes=new Child();
System.out.println(Nilai x = + tes.x);
tes.Info();
}
}

Hasil dari running program diatas adalah sebagai berikut:


Nilai x = 5
Ini class Child

Polymorphic arguments adalah tipe suatu parameter yang menerima suatu nilai
yang bertipe subclass-nya. Berikut contoh dari polymorphics arguments:
class Pegawai {

class Manajer extends Pegawai {

public class Tes {


public static void Proses(Pegawai peg) {

106

public static void main(String args[]) {


Manajer man = new Manajer();
Proses(man);
}
}

Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu
polymorphic arguments. Untuk lebih jelasnya, misalnya dari contoh program
sebelumnya, kita sedikit membuat modifikasi pada class Tes dan ditambah sebuah class
baru Kurir, seperti yang tampak dibawah ini:

class Kurir extends Pegawai {

public class Tes {


public static void Proses(Pegawai peg) {
if (peg instanceof Manajer) {
lakukan tugas-tugas manajer
} else if (peg instanceof Kurir) {
lakukan tugas-tugas kurir
} else {
lakukan tugas-tugas lainnya
}
}

public static void main(String args[]) {


Manajer man = new Manajer();
Kurir kur = new Kurir();
Proses(man);
Proses(kur);
}
}

Seringkali pemakaian instanceof

diikuti dengan casting object dari tipe


107

parameter ke tipe asal. Misalkan saja program kita sebelumnya. Pada saat kita sudah
melakukan instanceof dari tipe Manajer, kita dapat melakukan casting object ke tipe
asalnya, yaitu Manajer. Caranya adalah seperti berikut:

if (peg instanceof Manajer) {


Manajer man = (Manajer) peg;
lakukan tugas-tugas manajer
}

C. TUGAS PENDAHULUAN
1. Apakah yang dimaksud dengan polimorfisme ?
2. Jelaskan proses terjadinya Virtual Method Invocation !
3. Apakah yang dimaksud dengan polymorphic arguments ?
4. Apakah kegunaan kata kunci instanceof ?

D. PERCOBAAN
Memahami proses terjadinya Virtual Method Invocation
Tulislah listing program berikut ini dan amati yang terjadi pada saat terjadinya Virtual
Method Invocation.
class Parent {
int x = 5;
public void Info() {
System.out.println(Ini class Parent);
}
}

class Child extends Parent {


int x = 10;
public void Info() {
System.out.println(Ini class Child);
}
}

108

public class Tes {


public static void main(String args[]) {
Parent tes=new Child();
System.out.println(Nilai x = + tes.x);
tes.Info();
}
}

Apakah output program diatas? Jelaskan !

E. LATIHAN
Latihan 1. Apa yang terjadi bila kode dibawah ini dikompile dan dijalankan jika
sebelumnya Base.java belum dikompile? Jelaskan !
// Filename; SuperclassX.java
package packageX;

public class SuperclassX{


int superclassVarX;

protected void superclassMethodX(){


}
}
// Filename SubclassY.java
package packageX.packageY;

public class SubclassY extends SuperclassX{


SuperclassX objX = new SubclassY();
SubclassY objY = new SubclassY();

void subclassMethodY(){
objY.superclassMethodX();
int i;
i = objY.superclassVarX;
}
}

109

Latihan 2. Apa yang tampil di layar jika kode dibawah ini dijalankan? Jelaskan !
class Base {
int i = 99;
Base(){
amethod();
}
public void amethod(){
System.out.println("Base.amethod()");
}
}
public class Derived extends Base{
int i = -1;
public static void main(String argv[]){
Base b = new Derived();
System.out.println(b.i);
b.amethod();
}
public void amethod(){
System.out.println("Derived.amethod()");
}
}

Latihan 3. Apa yang tampil di layar jika kode dibawah ini dijalankan? Jelaskan !
class Parent{
private void method1(){
System.out.println("Parent's method1()");
}
public void method2(){
System.out.println("Parent's method2()");
method1();
}
}
class Child extends Parent{
public void method1()
System.out.println("Child's method1()");
}
public static void main(String args[]){
Parent p = new Child();
p.method2();
}
}

110

Latihan 4. Mengimplementasikan UML class diagram dalam program


Suatu program terdiri dari class Pegawai sebagai parent class, class Manajer dan class
Kurir sebagai subclass. Buatlah suatu program yang menerapkan konsep polymorphic
argument sebagaimana yang telah disinggung dalam pembahasan sebelumnya.

F. TUGAS
Mengimplementasikan UML class Diagram dalam program

Transformasikan class diagram diatas ke dalam bentuk program! Tulislah listing


program berikut ini sebagai pengetesan.
public class Bayaran{
public int hitungbayaran(Pegawai peg){
int uang = peg.infoGaji();
if (peg instanceof Manajer)
uang += ((Manajer) peg).infoTunjangan();
else if (peg instanceof Programmer)

111

uang += ((Programmer) peg).infoBonus();


return uang;
}

public static void main(String args[]){


Manajer man = new Manajer("Agus", 800, 50);
Programmer prog = new Programmer("Budi", 600, 30);
Bayaran hr = new Bayaran();

System.out.println("Bayaran untuk Manajer : " +


hr.hitungbayaran(man));
System.out.println("Bayaran untuk Programmer : " +
hr.hitungbayaran(prog));
}
}

Lakukan kompilasi pada program diatas dan jalankan. Jika tampilan di layar tampak
seperti di bawah ini, maka program anda sudah benar. Jika tidak sama, benahi kembali
program anda dan lakukan hal yang sama seperti diatas.

Bayaran untuk Manajer : 850


Bayaran untuk Programmer : 630

G. LAPORAN RESMI
Kumpulkan hasil latihan dan tugas di atas. Tambahkan analisa dalam laporan resmi.

112

PRAKTIKUM 14
NESTED CLASS
A.

TUJUAN PEMBELAJARAN
1. Mampu mengimplementasikan konsep inner class

B.

DASAR TEORI

Java membolehkan menyisipkan suatu kelas ke dalam kelas lainnya. Kelas sisipan ini disebut
kelas Inner. Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas
luarnya. Beberapa ketentuan kelas Inner :

Kelas Luar yang mengandung kelas Inner, bila dikompilasi akan menghasilkan dua file
*.class, yaitu Luar.class dan Luar$Inner.class

Kelas Inner boleh tidak diberi nama, yang disebut Anonymous Inner.

Kelas Inner dapat diberi modifier akses public, atau protected, atau default, ataupun
private.

Untuk mengakses referensi this dari kelas luar digunakan bentuk NamaKelasLuar.this.

Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang non static) .
Kalau objek kelas Luar adalah a, dan objek kelas Inner adalah b, maka sintaks yang benar
adalah :
Luar a = new Luar();
Luar.Inner b = a.new Inner();

Jika kelas Inner bersifat static, maka objek milik kelas Inner dapat dibuat sendiri
tanpa melalui kelas Luarnya, (Artinya kelas Inner tidak dapat mengakses attribute
ataupun method non static milik kelas Luarnya).

Inner Class adalah kelas yang disisipkan di dalam kelas yang lain. Fungsi kelas sisipan ini
adalah mendukung suatu proses yang akan dijalankan oleh kelas utamanya. Inner Class bersifat

113

tersarang terhadap kelas kelas utamanya, seperti halnya blok penyeleksian (if, for) yang
tersarang pada blok penyeleksian lainnya atau method yang tersarang pada method lainnya.
Analogi Inner Class
Inner Class dapat dianalogikan sebagi hubungan antara manusia dan paru paru. Setiap manusia
pasti bernafas dengan menggunakan paru paru. Dalam hal ini berarti kinerja dari paru paru
turut mendukung/menetukan kinerja dari manusia. Dalam bahasa pemrograman berorientasi
objek manusia dapat dikatakan sebagai outer class dan paru paru sebagai inner class-nya.
C.

TUGAS PENDAHULUAN

Jelaskan kembali pengertian inner class menurut bahasa anda!


D.

PERCOBAAN

Percobaan 1 : Non-Static Inner class yang dideklarasikan di dalam class

114

Percobaan 2 : Inner class yang dideklarasikan di dalam method.

Percobaan 3 : Static Inner class. Perbaiki error yang terjadi.

115

Percobaan 4 : Non Static Inner class yang dideklarasikan dalam class

116

Percobaan 5 : Local Inner class

117

Percobaan 6 : Anony mous class

118

Percobaan 7 : Inner class yang dideklarasikan Inner class yang dideklarasikan di di dalam
dalam method.

119

Percobaan 8 : Anony mous Inner Class.

E.

LATIHAN

Latihan 1 : Program berikut tida k dapat dikompile. Perbaiaki agar dapat dikompile
public class Problem {
String s;
static class Inner {
void testMethod() {
s = "Set from Inner";
}
}
}

Latihan 2 : Gunakan Java API documentation untuk Box class (di javax.swing package)
untuk menjawab pertanyaan berikut :
1. What static nested class does Box define?
2. What inner class does Box define?
3. What is the superclass of Box's inner class?
4. Which of Box's nested classes can you use from any class?
120

5. How do you create an instance of Box's Filler class?

F.

TUGAS

Jelaskan kelebihan dan kelemahan penggunaan inner kelas!

G.

LAPORAN RESMI

Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.

121

PRAKTIKUM 15
TYPE WRAPPER
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai type Wrapper dan berbagai macam type Wrapper.
2. Memahami cara perpindahan dari tipe data primitif menjadi tipe Wrapper dan
sebaliknya.
3. Memahami proses Autoboxing dan Auto-unboxing.

B. DASAR TEORI
B.1 Pengenalan dan Macam Type Wrapper
Java mengenal 8 buah tipe data primitif dan tidak dapat dibuat objek. Karena hal ini
mengalami kesulitan dalam penggunaannya karena beberapa class di library Java hanya
dapat berinteraksi dengan objek. Untuk mengatasi masalah ini, Java menyediakan tipe
data class untuk tipe data primitif. Class ini membungkus tipe data primitif agar dapat
digunakan sebagai objek. Class ini disebut dengan type Wrapper.
Tipe Data Primitif

Class Wrapper

Argument Constructor

Boolean

Boolean

boolean atau String

Byte

Byte

byte atau String

Char

Character

char

Double

Double

double atau String

Float

Float

float, double atau String

Int

Integer

int atau String

Long

Long

long atau String

Short

Short

short atau String

B.2 Number (Class Byte, Short, Integer, Long, Float dan Double)
Number adalah class abstract yang merupakan superclass dari semua class type wrapper
yang membungkus tipe data numerik seperti byte, short ,int, long, float dan double.
Konstruktor dari class wrapper ini mengizinkan untuk membuat nilai numerik dari objek
122

String. Namun jika objek String yang dilewatkan sebagai argument konstruktor bukan
nilai

numerik

yang

valid,

maka

melemparkan

exception

yang

bertipe

NumberFormatException.
Constructor dari Class Byte, Short, Integer, Long, Float dan Double adalah :
Byte(byte value)
Byte(String s) throws NumberFormatException

Contoh penggunaan
Byte num1 = new Byte(100);
Byte num2 = new Byte(100);
Short(short value)
Short (String s) throws NumberFormatException

Contoh penggunaan
Short num1 = new Short(100);
Short num2 = new Short(100);
Integer(int value)
Integer(String s) throws NumberFormatException

Contoh penggunaan
Integer num1 = new Integer(100);
Integer num2 = new Integer(100);
Long(long value)
Long(String s) throws NumberFormatException

Contoh penggunaan
Long num1 = new Long(100);
Long num2 = new Long(100);
Float(double value)
Float(float value)
Float(String s) throws NumberFormatException

Contoh penggunaan
Float num1 = new Float(100.4);
Float num2 = new Float(100.4f);
Float num3 = new Float(100.4);

Double(double value)
Double(String s) throws NumberFormatException

Contoh penggunaan
Double num1 = new Double(100);
Double num2 = new Double(100);

Setiap objek wrapper mempunyai konstanta MAX_VALUE dan MIN_VALUE


MAX_VALUE

: nilai numerik terbesar yang dapat ditampung oleh objek dengan

tipe data class wrapper ini.


123

MIN_VALUE

: nilai numerik terkecil yang dapat ditampung oleh objek dengan

tipe data class wrapper ini.


Byte byteObj = new Byte(Byte.MAX_VALUE);
Short shortObj = new Short(Short.MAX_VALUE);
Integer intObj = new Integer(Integer.MAX_VALUE);
Long longObj = new Long(Long.MAX_VALUE);
Float floatObj = new Float(Float.MAX_VALUE);
Double doubleObj = new Double(Double.MAX_VALUE);

Nilai dari maksimum dari objek wrapper adalah sebagai berikut:


Byte
Short
Integer
Long
Float
Double

:127
:32767
:2147483647
:9223372036854775807
:3.4028235E38
:1.7976931348623157E308

B.3 Method-method pada class wrapper.

Method valueOf()

Method valueOf() : mengubah suatu nilai menjadi object dari class tersebut dan
melempar NumberFormatException(NFE) jika argument tidak sesuai.
Class Long, Integer, Short dan Byte mempunyai tiga method valueOf()

Method 1 menerima argument berupa nilai.


Method 2 menerima argument nilai dalam bentuk String.
Method 3 argument kedua berupa int radix yang menyatakan base dari argument pertama
(binary, octal, atau hexadecimal)
Class Boolean, Float dan Double mempunyai dua method valueOf()

Contoh penggunaan method valueOf()


124

Integer
Integer
Integer
Boolean
Boolean
Long n1
Long n1

i1 = Integer.valueOf(42);
i2 = Integer.valueOf(42);
i3 = Integer.valueOf(42,2);
b1 = Boolean .valueOf(true);
b2 = Boolean .valueOf(true);
= Long.valueOf(42000000L);
= Long.valueOf(42000000L);

Method xxxValue()

Method xxxValue() digunakan untuk mengubah object dari class wrapper (object ini
mempunyai nilai) menjadi nilai numerik
Contoh penggunaan :
Integer i2 = new Integer(42);
byte b = i2.byteValue();
short s = i2.shortValue();
double d = i2.doubleValue();
Float f2 = new Float(3.14f);
short s = f2.shortValue();

Method parseXxx()

Fungsi parseXxx() dan valueOf(), argument berupa String dan melempar


NumberFormatException(NFE) jika argument tidak sesuai. Method parseXxx()
mengembalikan nilai primitif, sedangkan method valueOf() mengembalikan object
dari class wrapper

B.4 Character.
Class Character merupakan class wrapper untuk tipe data primitif char. Konstruktor dari
class Character adalah :
Character(char value)
Method valueOf() digunakan untuk mendapat nilai char dengan tipe wrapper. Character
hanya mempunyai satu method valueOf()

Method charValue() untuk mendapatkan tipe data primitif char.


char charValue()

125

B.5 Autoboxing / Auto-Unboxing


Pada Java 5, dikenal istilah Autoboxing dan Auto-unboxing. Autoboxing
adalah konversi secara otomatis oleh kompiler Java dari tipe data primitif ke tipe data
sesuai dengan tipe wrappernya (misalnya, int dan Integer, double dan Double).
Sedangkan mengubah object dari class wrapper menjadi nilai primitifnya disebut Autounboxing.
Dengan Autoboxing

Tanpa Autoboxing

int i;

int i;

Integer j ;

Integer j ;

i=1;

i=1;

j=2;

j=new Integer(2);

i=j;

i=j.intValue();

j=i;

j=new Integer(i);

Pada kode tanpa Autoboxing, harus secara eksplisit membuat objek Integer j dengan nilai
primitif 2, sedangkan dengan autoboxing, maka proses perubahan dari tipe data primitif
int secara otomatis akan di konversi menjadi objek Integer, sehingga pada java 1.5 keatas
diperbolehkan dari
Integer j ;
j = new Integer(2)

menjadi
Integer j ;
j=2;

Contoh dengan Auto-unboxing:


Integer y = new Integer(567);
int x = y.intValue();
x++ ;
y = new Integer(x) ;

Contoh dengan Autoboxing:


Integer y = new Integer(567);
y++;

Proses increment biasanya digunakan untuk tipe data primitif. Tapi untuk java 1.5
(dengan Autoboxing), proses increment dapat dilakukan pada objek wrapper. Pada Auto126

unboxing pada waktu hendak melakukan increment, nilai primitifnya harus terlebih
dahulu diambil baru kemudian proses increment dapat dilakukan. Hasil increment
tersebut kemudian dibuat menjadi objek Integer yang baru.

C. TUGAS PENDAHULUAN
Buatlah review mengenai tipe Wrapper dan macam-macamnya, dan penggunaan
konstruktor dari masing-masing tipe Wrapper.

D. PERCOBAAN
Percobaan 1 : Memahami cara membuat objek Integer. Jika terjadi error atau
exception, jelaskan penyebabnya !
public class TestInteger {
public static void main(String[] args) {
Integer i1 = new Integer(42);
Integer i2 = new Integer(2147483647);
Integer i3 = new Integer("42");
Integer i4 = new Integer("42.u");
}
}

public class TestInteger {


public static void main(String[] args) {
Integer i1 = new Integer(42);
Integer i2 = new Integer(2147483650);
Integer i3 = new Integer("42");
Integer i4 = new Integer("42.u");
}
}

Percobaan 2 : Mengetahui nilai maksimum dan minimum untuk tipe Wrapper.


public class MaxMin {
public static void main(String[] args) {
System.out.println("Nilai Maximum");
Byte byteObj = new Byte(Byte.MAX_VALUE);
System.out.println(byteObj);
Short shortObj = new Short(Short.MAX_VALUE);
System.out.println(shortObj);
Integer intObj = new Integer(Integer.MAX_VALUE);
System.out.println(intObj);
Long longObj = new Long(Long.MAX_VALUE);
System.out.println(longObj);
Float floatObj = new Float(Float.MAX_VALUE);
System.out.println(floatObj);
Double doubleObj = new Double(Double.MAX_VALUE);
127

System.out.println(doubleObj);
System.out.println("Nilai Minimum");
Byte byteObj2 = new Byte(Byte.MIN_VALUE);
System.out.println(byteObj2);
Short shortObj2 = new Short(Short.MIN_VALUE);
System.out.println(shortObj2);
Integer intObj2 = new Integer(Integer.MIN_VALUE);
System.out.println(intObj2);
Long longObj2 = new Long(Long.MIN_VALUE);
System.out.println(longObj2);
Float floatObj2 = new Float(Float.MIN_VALUE);
System.out.println(floatObj2);
Double doubleObj2 = new Double(Double.MIN_VALUE);
System.out.println(doubleObj2);
}
}

Percobaan 3 : Menampilkan bilangan integer menjadi biner, octal dan


heksadesimal.
public class TestInteger2 {
public static void main(String[] args) {
Integer i1 = new Integer(345);
System.out.println("nilai int = " + i1);
System.out.println("bil
binary
=
"
+
Integer.toBinaryString(i1));
System.out.println("bil hexa = " + Integer.toHexString(i1));
System.out.println("bil oktal = " + Integer.toOctalString(i1));
Integer i2 = new Integer(675);
System.out.println("nilai int = " + i2);
System.out.println("bil binary = "+Integer.toString(i2, 2));
System.out.println("bil hexa = " +Integer.toString(i2, 8));
System.out.println("bil oktal = " + Integer.toString(i2, 16));
}
}

Percobaan 4 : Memahami cara konversi antar tipe Wrapper, misal dari objek
Integer diassignkan ke objek Long dan sebaliknya.
public class Konversi {
public static void main(String[] args) {
Integer i = 7 ;
Long l = 345L ;
i = l.intValue() ;
System.out.println("Nilai pada Integer = " + i);
l = i.longValue() ;
System.out.println("Nilai pada Long = " + l) ;
}
}
128

Percobaan 5 : Jelaskan kegunaan dari method-method di bawah ini!


public class WrapperMethod {
public static void main(String[] args) {
System.out.println(Integer.rotateLeft(3, 1));
System.out.println(Integer.rotateLeft(5, 2));
System.out.println(Integer.rotateRight(20, 1));
System.out.println(Integer.rotateRight(32, 1));
System.out.println(Integer.reverse(20));
System.out.println(Integer.highestOneBit(20));
System.out.println(Integer.lowestOneBit(20));
System.out.println(Integer.bitCount(20));
System.out.println(Integer.numberOfLeadingZeros(32));
System.out.println(Integer.numberOfTrailingZeros(32));
}
}

Percobaan 6 : Memahami mengenai Autoboxing dan Auto-unboxing.


public class TestUnboxing {
public static void main(String[] args) {
int i;
Integer j;
i=1;
j=new Integer(2);
i=j.intValue();
j=new Integer(i);
}
}

public class TestAutoboxing {


public static void main(String[] args) {
int i;
Integer j;
i=1;
j=2;
i=j;
j=i;
}
}

Percobaan 7 : Memahami mengenai Autoboxing dan Auto-unboxing(2)


public class TestUnboxing2 {
public static void main(String[] args) {
Integer y = new Integer(567);
int x = y.intValue();
System.out.println("x = " + x);
x++ ;
y = new Integer(x) ;
System.out.println("y = " + y);
}
129

public class TestAutoboxing2 {


public static void main(String[] args) {
Integer y = new Integer(567);
System.out.println(y);
y++;
System.out.println(y);
}
}

E. LATIHAN
1. Terdapat program seperti di bawah ini !
class Hexy {
public static void main(String[] args) {
Integer i = 42;
String s = (i<40)?"life":(i>50)?"universe":"everything";
System.out.println(s);
}
}

What is the result?


A. null
B. life
C. universe
D. everything
E. Compilation fails.
F. An exception is thrown at runtime.
2. Given:
1. class Example {
2.
public static void main(String[] args) {
3.
Short s = 15;
4.
Boolean b;
5.
// insert code here
6.
}
7. }

Which, inserted independently at line 5, will compile? (Choose all that apply.)
A.
B.
C.
D.

b
b
b
b

=
=
=
=

(Number instanceof s);


(s instanceof Short);
s.instanceof(Short);
(s instanceof Number);
130

E. b = s.instanceof(Object);
F. b = (s instanceof String);

3.

Given:

class Fork {
public static void main(String[] args)
{
if(args.length == 1 | args[1] .equals("test")) {
System.out.println ("test case");
} else {
System.out.println("production " + args[0]) ;
}
}
}
And the command-line invocation:
java Fork live2
What is the result?
A. test case
B. production
C. test case live2
D. Compilation fails.
E. An exception is thrown at runtime.
4. Given:
class Foozit {
public static void main(String[] args) {
Integer x = 0;
Integer y = 0;
for(Short z = 0; z < 5; z++)
if((++x > 2) || (++y > 2))
X++ ;
System.out.println (x + " " + y);
}
}

What is the result?


A.
B.
C.
D.
E.
F.
G.
H.

5 1
5 2
5 3
8 1
8 2
8 3
10 2
10 3

5. Given:
131

class Titanic {
public static void main(String[] args) {
Boolean bl = true;
boolean b2 = false;
boolean b3 = true;
if((bl & b2) | (b2 & b3) & b3)
System.out.print("alpha ");
if((bl = false) | (b1 & b3) | (bl | b2))
System.out.print("beta "};
}
}

What is the result?


A. beta
B. alpha
C. alpha beta
D. Compilation fails.
E. No output is produced.
F. An exception is thrown at runtime
6. class Feline {
public static void main(String[] args) {
Long x = 42L;
Long y = 44L;
System.out.print (" " + 7 + 2 + " ") ;
System.out.print(foo () + x + 5 + " ");
System.out.println(x + y + foo());
}
static String foo() { return "foo"; }
}
What is the result?
A. 9 foo47 86foo
B. 9 foo47 4244foo
C. 9 foo425 86foo
D. 9 foo425 4244foo
E. 72 foo47 86foo
F. 72 foo47 4244foo
G. 72 foo425 86foo
H. 72 foo425 4244foo
I. Compilation fails.

7. Buatlah sebuah aplikasi untuk mengubah sebuah bilangan desimal menjadi bilangan
biner, octal dan heksa berdasarkan inputan user.
Input
Masukkan bilangan : 345
Output
biner : 101011001
oktal : 531
heksa : 159
132

8. Buatlah sebuah aplikasi menerima inputan user berupa bilangan dan basis dari
bilangan tersebut, selanjutnya mengubah ke bilangan dengan basis yang lain (basis
2,8,10,16)
Input
Masukkan bilangan : 531
Basis : 8
Output
biner : 101011001
desimal : 345
heksa : 159

9. a. Bagaimana program ini jika dijalankan? Jelaskan!


b. Bagaimana cara mengubah objek Long menjadi objek Integer dan sebaliknya ?
public class Coba {
public static void main(String args[]){
Float f = 2.3f ;
Double d = 34.7 ;
i = j ;
}
}

10. Ubahlah object Double menjadi tipe data primitif byte, short, int, long, float.
F. TUGAS
1. Buatlah suatu aplikasi untuk mengubah :
int
Tipe wrapper lain

String

Integer

Tipe primitif

2. Buatlah sebuah program untuk menerima inputan beberapa bilangan(Subclass


Number) dari command line dan menambahkannya.
java Adder 1 3 2 10
Output : 16

G. LAPORAN RESMI
Kerjakan hasil percobaan(D) dan latihan(E) di atas dan tambahkan analisa.

133

PRAKTIKUM 16
TYPE ENUM
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep Enum
2. Memahami bentuk-bentuk penggunaan Enum
3. Memahami fungsi-fungsi yang terdapat di Enum

B. DASAR TEORI
Sebelum J2SE 5.0,

solusi untuk menangani masalah sekumpulan nilai konstanta,

dicontohkan seperti di bawah ini: (jenis credit card yang bisa diterima oleh aplikasi)

public static final int VISA = 1;

public static final int MASTER_CARD = 2;

public static final int AMERICAN_EXPRESS = 3;

Permasalahan yang muncul adalah tidak ada yang mengikat ketiga nilai menjadi
semacam set dan kita bisa memberikan nilai yang salah pada variabel-variabel tersebut.
Kondisi seperti ini disebut not type safe (tipe yang tidak aman). Kondisi ini dapat
diperbaiki dengan membuat tipe yang relatif aman (tipe safe) dengan mendefinisikan
suatu class, yaitu class AllowedCreditCard. Class tersebut mendefinisikan :

konstanta-konstanta di dalam kelas

variabel untuk menyatakan state object dari class tersebut.

Constructor private untuk mengeset state.

public class AllowedCreditCard {


protected final String card ;
public final static AllowedCreditCard VISA = new
AllowedCreditCard("VISA");
public final static AllowedCreditCard MASTER_CARD = new
AllowedCreditCard("MASTER CARD");
public final static AllowedCreditCard AMERICAN_EXPRESS = new
AllowedCreditCard("AMERICAN_EXPRESS");
private AllowedCreditCard(String str){
card = str;

134

}
public String getName(){
return card ;
}
}

Pada pendekatan ini, terdapat 3 state dari class AllowedCreditCard yang dinyatakan oleh
tiga object yang dicreate dengan memberikan nilai yang berbeda pada variabel card.
Karena konstruktor private, sehingga tidak bisa create object diluar class. Design seperti
ini masih dianggap type safe. Tapi pada J2SE 5.0 terdapat solusi yang bagus dengan
mengenalkan tipe baru yaitu enum.
Tipe data enum dikenalkan di J2SE 5.0 berguna untuk variabel yang berisi sekumpulan
nilai. Cara mendefinisikan variabel enum:

Mendefinisikan tipe enum dengan sekumpulan nilai.

Mendefinisikan variabel yang menyimpan satu dari nilai-nilai tersebut.

Contoh 1 : Class AllowedCreditCard dirubah menjadi bentuk enum.


enum AllowedCreditCard {VISA, MASTER_CARD, AMERICAN_EXPRESS};
AllowedCreditCard visa = AllowedCreditCard.VISA;

Contoh 2 : Mendeklarasikan enum di luar class


enum CoffeeSize {BIG, HUGE, OVERWHELMING}
public class Coffee {
CoffeeSize size ;
}
class CoffeeTest1{
public static void main(String[] args) {
Coffee drink = new Coffee();
drink.size = CoffeeSize.BIG ;
}
}

Contoh 3 : Mendeklarasikan enum di dalam class


public class Coffee2 {
enum CoffeeSize {BIG, HUGE, OVERWHELMING}
CoffeeSize size ;
}
class CoffeeTest2{
public static void main(String[] args) {
Coffee2 drink = new Coffee2();

135

drink.size = Coffee2.CoffeeSize.BIG ;
}
}

Contoh 4 : Tidak bisa mendeklarasikan enum di dalam method


//Tidak legal
public class CoffeeTest3 {
public static void main(String[] args) {
enum CoffeeSize {BIG, HUGE, OVERWHELMING}
Coffee drink = new Coffee();
drink.size = CoffeeSize.BIG ;
}
}

Menentukan sendiri nilai konstanta dari enum.

Cara termudah dengan memberikan nilai enum (misal : BIG, HUGE, dan
OVERWHELMING). Nilai enum sebagai object yang masing-masing mempunyai
nilai instance variabel sendiri-sendiri.

Nilai ini diberikan pada saat enum diinisialisasi, dengan memberikan nilai pada
konstruktor enum.

enum CoffeeSize2{
BIG(8), HUGE(10), OVERWHELMING(16);
CoffeeSize2(int ounces){
this.ounces = ounces ;
}
private int ounces ;
public int getOunces() {
return ounces;
}
}

Konstruktor enum dijalankan secara otomatis. Contoh BIG(8) menjalankan konstruktor


CoffeSize yang menerima parameter berupa int, dengan nilai 8. Konstruktor pada enum
bisa lebih dari satu.

Fungsi pada Enum

public static Apple[] values()


Mengembalikan array yang berisi konstanta dari tipe enum, urutan sesuai pada saat
pendeklarasian enum.

public static Apple valueOf(String name)


136

Mengembalikan konstanta enum sesuai dengan inputan dari parameter String

public final int ordinal()


Mengembalikan ordinal dari enum konstanta (dimulai dari 0)

public final int compareTo(E o)


Membandingkan object enum dengan object enum lainnya berdasarkan urutan.
Mengembalikan nilai negatif (object enum 1 < object enum 2), 0 (object enum 1 =
object enum 2) dan positif (object enum 1 > object enum 2).

enum Apple {
A(10), B(9), C, D(15), E(8);
private int price; // price of each apple
// Constructor
Apple(int p) { price = p; }
// Overloaded constructor
Apple() { price = -1; }
int getPrice() { return price; }
}

C. TUGAS PENDAHULUAN
Buatlah review mengenai

Definisi enum

Merubah bentuk konstanta(terdapat lebih dari satu konstanta) menjadi bentuk enum

Letak yang diperbolehkan dan tidak diperbolehkan untuk pendeklarasian enum

D. PERCOBAAN
Percobaan 1 : Class AllowedCreditCard dirubah menjadi bentuk enum.
public class AllowedCreditCard {
protected final String card ;
public final static AllowedCreditCard VISA = new
AllowedCreditCard("VISA");
public final static AllowedCreditCard MASTER_CARD = new
AllowedCreditCard("MASTER CARD");
public final static AllowedCreditCard AMERICAN_EXPRESS = new
AllowedCreditCard("AMERICAN_EXPRESS");
private AllowedCreditCard(String str){
card = str;
}
public String getName(){
return card ;

137

}
}

enum AllowedCreditCard {VISA, MASTER_CARD, AMERICAN_EXPRESS};


AllowedCreditCard visa = AllowedCreditCard.VISA;

Percobaan 2 : Mendeklarasikan enum di luar class


enum CoffeeSize {BIG, HUGE, OVERWHELMING}
public class Coffee {
CoffeeSize size ;
}
class CoffeeTest1{
public static void main(String[] args) {
Coffee drink = new Coffee();
drink.size = CoffeeSize.BIG ;
}
}

Percobaan 3 : Mendeklarasikan enum di dalam class


public class Coffee2 {
enum CoffeeSize {BIG, HUGE, OVERWHELMING}
CoffeeSize size ;
}
class CoffeeTest2{
public static void main(String[] args) {
Coffee2 drink = new Coffee2();
drink.size = Coffee2.CoffeeSize.BIG ;
}
}

Percobaan 4 : Tidak bisa mendeklarasikan enum di dalam method


//Tidak legal
public class CoffeeTest3 {
public static void main(String[] args) {
enum CoffeeSize {BIG, HUGE, OVERWHELMING}
Coffee drink = new Coffee();
drink.size = CoffeeSize.BIG ;
}
}

Percobaan 5 : Menentukan sendiri nilai konstanta dari enum


enum CoffeeSize2{
BIG(8), HUGE(10), OVERWHELMING(16);
CoffeeSize2(int ounces){
this.ounces = ounces ;

138

}
private int ounces ;
public int getOunces() {
return ounces;
}
}

Percobaan 6 : Enum dengan statement switch


enum OperatingSystems {
windows, unix, linux, macintosh
}
public class EnumExample1 {
public static void main(String args[])
{
OperatingSystems os;
os = OperatingSystems.windows;
switch(os) {
case windows:
System.out.println("You chose Windows!");
break;
case unix:
System.out.println("You chose Unix!");
break;
case linux:
System.out.println("You chose Linux!");
break;
case macintosh:
System.out.println("You chose Macintosh!");
break;
default:
System.out.println("I don't know your OS.");
break;
}
}
}

Percobaan 7 : Fungsi pada Enum


enum Apple {
A(10), B(9), C, D(15), E(8);
private int price; // price of each apple
// Constructor
Apple(int p) { price = p; }
// Overloaded constructor
Apple() { price = -1; }
int getPrice() { return price; }
}

139

Percobaan 8 : Melakukan enumerasi pada Enum


enum Media {
book, music_cd, music_vinyl, movie_vhs, movie_dvd;
}
public class MediaFactory {
public static void main(String[] args) {
System.out.println(MediaFactory.getMedia("Book"));
}
public static Media getMedia(String s) {
return Enum.valueOf(Media.class, s.toLowerCase());
}
public static Media getMedia(int n){
return Media.values()[n];
}
}

E. LATIHAN
1. Consider the following code fragment:
1. class EnumTest{
2.
enum Size{small, medium, large, Xlarge};
3.
public static void main(String [] args) {
4.
for( Size s : Size.values()) {
5.
if (s == Size.small)
6.
System.out.print("small ");
7.
else if (Size.medium.equals(s))
8.
System.out.println("medium ");
9.
else if (s == Size.large)
10.
System.out.println("large ");
11.
else if (s.equals("Xlarge "))
12.
System.out.println("Xlarge ");
13.
else if ( s == "Xlarge ");
14.
System.out.println("Xlarge ");
15.
}
16.
}
17. }

What is the result of this code?


A. small medium large Xlarge Xlarge
B. small medium large Xlarge
C. small medium large
140

D. Compiler error at line 11


E. Compiler error at line 13
F. Throws exception at runtime
2. Consider the following code fragment:
1. enum Colors {BLUE, GREEN, YELLOW, RED}
2. class Picture {
3.
public static void main(String [] args) {
4.
int x = 0;
5.
Colors c = Colors.GREEN;
6.
switch(c) {
7.
case BLUE:
8.
System.out.print(c);
9.
case GREEN:
10.
System.out.print(c);
11.
case YELLOW:
12.
System.out.print(c);
13.
default:
14.
System.out.print(" BlackWhite ");
15.
break;
16.
case RED:
17.
System.out.print(c);
18.
}
19.
System.out.println(" PicturePerfect");
20.
}
21. }

What is the result?


A. GREEN PicturePerfect
B. GREENGREEN PicturePerfect
C. GREENGREEN BlackWhite PicturePerfect
D. GREENYELLOW BlackWhite PicturePerfect
E. GREENGREEN BlackWhite Red PicturePerfect
F. Compilation fails at line 6.
G. Compilation fails at line 13.
3. Consider the following code fragment:
1. enum Colors {BLUE, GREEN, RED}
2. class Picture {
3.
public static void main(String [] args) {

141

4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
}
21. }

int x = 0;
Colors c = Colors.GREEN;
switch(c) {
case BLUE:
System.out.print(c);
case GREEN:
System.out.print(c);
case YELLOW:
System.out.print(c);
default:
System.out.print(" BlackWhite ");
break;
case RED:
System.out.print(c);
}
System.out.println(" PicturePerfect");

What is the result?


A. GREEN PicturePerfect
B. GREENYELLOW PicturePerfect
C. GREENGREEN BlackWhite PicturePerfect
D. GREEN BlackWhite Red PicturePerfect
E. Compilation fails.
F. An exception is thrown at runtime.
4. Consider the following code:
1. enum Villages {Pharwala, Gohawar, Phagwara, Goraya}
2. public class MyEnumTest {
3.
public static enum Colors{RED, BLUE, GREEN, YELLOW, ORANGE};
4.
private enum weekend { Saturday, Sunday};
5.
public static void main(String[] args) {
6.
enum Currency {Dollars, Rupees, Franc, Euro};
7.
System.out.println("Hello");
8.
}
9. }

What is the result?


A. Hello
B. Compilation fails at line 1.
C. Compilation fails at line 3.
D. Compilation fails at line 6.
142

E. An exception is thrown at runtime.


5. Given:
1. enum Animals {
2.
DOG ("woof"), CAT ("meow"), FISH ("burble");
3.
String sound;
4.
Animals(String s) { sound = s; }
5. }
6. class TestEnum {
7.
static Animals a;
8.
public static void main(String[] args) {
9.
System.out.println(a.DOG.sound + " " + a.FISH.sound);
10. }
11. }

What is the result?


A. woof burble
B. Multiple compilation errors
C. Compilation fails due to an error on line 2
D. Compilation fails due to an error on line 3
E. Compilation fails due to an error on line 4
F. Compilation fails due to an error on line 9

F. TUGAS
Tugas 1 :
Pada supermarket terdapat beberapa macam jenis buah Apel yaitu Apel Malang, Granny
Smith, Pink Lady, Golden Delicious, Gala dan Red Delicious. Buatlah enum Apel
dengan berbagai jenis apel dan harganya. Berikan deskripsi dari apel tersebut pada
method getDeskripsi(). Selanjutnya tampilkan data semua Apel, harga dan
deskripsi pada Supermarket tersebut.

143

Enum Apel{
MALANG(//harga),...
public String getDeskripsi() {}
}

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

144

PRAKTIKUM 17
MENANGANI EXCEPTION
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai exception
2. Memahami tipe exception yaitu Checked Exception dan Unchecked Exception.
3. Mengetahui cara menggunakan exception menggunakan blok try catch.

B. DASAR TEORI
Exception adalah suatu kondisi abnormal yang terjadi pada saat menjalankan program.
Karena dalam java segala sesuatu merupakan objek, maka exception juga
direpresentasikan dalam sebuah objek yang menjelaskan tentang exception tersebut.
Contoh exception adalah pembagian bilangan dengan 0, pengisian elemen array diluar
ukuran array, kegagalan koneksi database, file yang akan dibuka tidak ada, dan
mengakses objek yang belum diinisialisasi.
Terdapat dua penanganan exception yaitu:

Menangani sendiri exception tersebut.

Meneruskannya ke luar dengan cara membuat objek tentang exception tersebut


dan melemparkannya (throw) keluar agar ditangani oleh kode yang memanggil
method(method yang didalamnya terdapat exception) tersebut.

Ada lima keyword yang digunakan oleh Java untuk menangani exception yaitu try, catch,
finally, throw dan throws.

B.1 Tipe-Tipe Exception


Pada exception, superclass tertinggi adalah class Throwable, tetapi kita hampir tidak
pernah menggunakan class ini secara langsung. Dibawah class Throwable terdapat dua
subclass yaitu class Error dan class Exception. Class Error merupakan tipe exception
yang tidak ditangani dengan blok try-catch, karena berhubungan dengan Java run-time
system/environment. Untuk exception dengan tipe class Exception, merupakan exception
145

yang dapat ditangani oleh program. Terdapat subclass dari class Exception diantaranya
RunTimeException, IOException, AWTException dan lain-lain.
Semua exception bertipe RunTimeException dan turunannya tidak harus secara eksplisit
ditangani

dalam

program

(Unchecked

Exception).

Contoh

subclass

dari

RunTimeException adalah ArrayIndexOutOfBoundsException, ArithmeticException,


NullPointerException dan lain-lain.
Semua tipe exception yang bukan turunan dari class RuntimeException merupakan
exception yang harus ditangani atau jika tidak ditangani menyebab error. Dibawah ini
adalah hirarki dari exception.

B.2 Penggunaan Blok try-catch


Untuk menangani exception dalam program, dengan meletakkan kode program yang
memungkinkan terjadinya exception didalam blok try, diikuti dengan blok catch yang
menentukan jenis exception yang ingin ditangani. Contoh :
public class Percobaan2 {
public static void main(String[] args) {
int a[] = new int[5];
try{
a[5] = 100 ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Indeks Array melebihi batas");
}
System.out.println("Setelah blok try-catch");
}

146

Output :
Terjadi exception karena Indeks Array melebihi batas
Setelah blok try-catch

Dapat terjadi kode yang terdapat dalam blok try mengakibatkan lebih dari satu exception.
Dalam hal ini, kita dapat menuliskan lebih dari satu blok catch. Contoh :
public class Percobaan5 {
public static void main(String[] args) {
int bil=10;
String b[] = {"a","b","c"};
try{
System.out.println(bil/0);
System.out.println(b[3]);
}catch(ArithmeticException e){
System.out.println("Error Aritmetik");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Error Kapasitas Array Melebihi Batas");
}catch(Exception e){
System.out.println("Terdapat Error");
}
}
}

Blok catch yang dijalankan tergantung dengan exception yang terjadi. Java akan
menjalankan blok catch yang sesuai dengan tipe exceptionnya saja. Dalam
penggunaannya, blok catch dengan tipe subclass harus ditulis lebih dahulu baru diikuti
dengan blok catch dengan tipe data superclassnya.

B.3 Menggunakan Keyword finally


Terdapat kode yang harus dijalankan walaupun terjadi atau tidak terjadi exception,
misalkan kita membuka file, hal ini memungkinkan terjadinya exception misal file tidak
ada, file tidak bisa dibuka, selanjutnya yang harus dilakukan adalah menutup file
tersebut.
public class Percobaan2 {
public static void main(String[] args) {
int a[] = new int[5];
try{
a[5] = 100 ;
}catch(ArrayIndexOutOfBoundsException e){

147

System.out.println("Terjadi exception karena Indeks Array


melebihi batas");
}finally{
System.out.println("Selalu Dijalankan");
}
System.out.println("Setelah blok try-catch");
}
}

B.4 Menggunakan Keyword throw dan throws


Secara eksplisit, kita dapat melempar (throw) exception dari program menggunakan
keyword throw. Jika exception tersebut adalah checked exception, maka pada method
harus ditambahkan throws. Jika exception tersebut adalah unchecked exception, maka
pada method tidak perlu ditambahkan throws.
public class Percobaan6 {
public static void method1() throws FileNotFoundException{
throw new FileNotFoundException("File Tidak Ada");
}
public static void main(String[] args) {
try {
method1();
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
}

B.5 Membuat sendiri Subclass dari Exception


Untuk melakukan ini, kita cukup membuat class baru yang merupakan subclass
Exception. Didalam class ini kita cukup mendeklarasikan konstruktor.
class Salah extends Exception{
public Salah(){}
public Salah(String pesan){
super(pesan);
}
}

C. TUGAS PENDAHULUAN
Buatlah review mengenai definisi exception, jenis exception, dan berikan 2 contoh
program yang menyebabkan exception beserta cara penangannya.

D. PERCOBAAN
148

Percobaan 1 : Jalankan program di bawah ini ! Bagaimana output program ?


Jelaskan !
public class Percobaan1 {
public static void main(String[] args) {
int a[] = new int[5];
a[5] = 100 ;
}
}

Percobaan

Memahami

cara

menangkap

Exception

dengan

tipe

ArrayIndexOutOfBoundsException
public class Percobaan2 {
public static void main(String[] args) {
int a[] = new int[5];
try{
a[5] = 100 ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Indeks Array melebihi batas");
}
}
}

Percobaan 3 : Jalankan percobaan 3, bagaimana output program ? Perbaiki dengan


Percobaan32 untuk menangani exception.
public class Percobaan3 {
public static void main(String[] args) {
int bil = 10 ;
System.out.println(bil/0);
}
}

public class Percobaan32 {


public static void main(String[] args) {
int bil = 10 ;
try{
System.out.println(bil/0);
}catch(ArithmeticException e){
System.out.println("Tidak boleh membagi

bilangan

dengan

0");
}
}
}

Percobaan 4 : Memahami try bertingkat.


public class Percobaan4 {

149

public static void main(String[] args) {


int bil = 10 ;
try{
System.out.println(bil/0);
}catch(ArithmeticException e){
System.out.println("Terjadi exception
membagi bilangan dengan 0");
}catch(Exception e){
System.out.println("Terdapat Error");
}
}
}

karena

tidak

boleh

Percobaan 5 : Bandingkan output dua program di bawah ini ! Jelaskan !


public class Percobaan5 {
public static void main(String[] args) {
int bil=10;
String b[] = {"a","b","c"};
try{
System.out.println(bil/0);
System.out.println(b[3]);
}catch(ArithmeticException e){
System.out.println("Error Aritmetik");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Error Kapasitas Array Melebihi Batas");
}catch(Exception e){
System.out.println("Terdapat Error");
}
}
}

public class Percobaan52 {


public static void main(String[] args) {
int bil=10;
String b[] = {"a","b","c"};
try{
System.out.println(b[3]);
System.out.println(bil/0);
}catch(ArithmeticException e){
System.out.println("Error Aritmetik");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Error Kapasitas Array Melebihi Batas");
}catch(Exception e){
System.out.println("Terdapat Error");
}
}
}

Percobaan 6 : Penggunaan finally


public class ExcepTest{
public static void main(String args[]){

150

int a[] = new int[2];


try{
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
finally{
a[0] = 6;
System.out.println("First element value: " +a[0]);
System.out.println("The finally statement is executed");
}
}
}

E. LATIHAN
1. Semua exception yang berasal dari java.lang.RuntimeException adalah unchecked
exceptions,

sedangkan

java.lang.RuntimeException

exception
adalah

lainnya
checked

yang

tidak

exceptions.

berasal

Jelaskan

dari

mengenai

unchecked exceptions dan checked exceptions ,berikan contoh !


2. Buatlah contoh program untuk menangani exception dengan cara menangkap
exception seperti di bawah ini :

ArithmeticException
ArrayStoreException
ClassCastException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
NegativeArraySizeException
NoSuchElementException
NullPointerException,
NumberFormatException

F. TUGAS
1. Terdapat dua cara untuk menangani Exception yaitu dengan menangkap Exception
dan melempar Exception. Lakukan penanganan exception dengan menangkap
Exception menggunakan blok try-catch. Berilah penjelasan (apakah program
termasuk unchecked exceptions atau checked exceptions) !
public class ReadFile {
public static void main(String args[]){
File file = new File("Data.txt");
BufferedReader fileReader ;

151

fileReader = new BufferedReader(new FileReader(file));


while(true){
String line = fileReader.readLine();
if (line == null)
break ;
System.out.println(line);
}
}
}

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

152

PRAKTIKUM 18
MELEMPAR EXCEPTION DAN MEMBUAT
EXCEPTION SENDIRI
A. TUJUAN PEMBELAJARAN
1. Mengetahui cara menangani exception dengan cara melempar exception.
2. Mengetahui cara membuat sendiri class exception.
B. DASAR TEORI
Exception adalah suatu kondisi abnormal yang terjadi pada saat menjalankan program.
Karena dalam java segala sesuatu merupakan objek, maka exception juga
direpresentasikan dalam sebuah objek yang menjelaskan tentang exception tersebut.
Contoh exception adalah pembagian bilangan dengan 0, pengisian elemen array diluar
ukuran array, kegagalan koneksi database, file yang akan dibuka tidak ada, dan
mengakses objek yang belum diinisialisasi.
Terdapat dua penanganan exception yaitu:

Menangani sendiri exception tersebut.

Meneruskannya ke luar dengan cara membuat objek tentang exception tersebut


dan melemparkannya (throw) keluar agar ditangani oleh kode yang memanggil
method(method yang didalamnya terdapat exception) tersebut.

Ada lima keyword yang digunakan oleh Java untuk menangani exception yaitu try, catch,
finally, throw dan throws.

B.1 Tipe-Tipe Exception


Pada exception, superclass tertinggi adalah class Throwable, tetapi kita hampir tidak
pernah menggunakan class ini secara langsung. Dibawah class Throwable terdapat dua
subclass yaitu class Error dan class Exception. Class Error merupakan tipe exception
yang tidak ditangani dengan blok try-catch, karena berhubungan dengan Java run-time
system/environment. Untuk exception dengan tipe class Exception, merupakan exception
153

yang dapat ditangani oleh program. Terdapat subclass dari class Exception diantaranya
RunTimeException, IOException, AWTException dan lain-lain.
Semua exception bertipe RunTimeException dan turunannya tidak harus secara eksplisit
ditangani

dalam

program

(Unchecked

Exception).

Contoh

subclass

dari

RunTimeException adalah ArrayIndexOutOfBoundsException, ArithmeticException,


NullPointerException dan lain-lain.
Semua tipe exception yang bukan turunan dari class RuntimeException merupakan
exception yang harus ditangani atau jika tidak ditangani menyebab error. Dibawah ini
adalah hirarki dari exception.

B.2 Penggunaan Blok try-catch


Untuk menangani exception dalam program, dengan meletakkan kode program yang
memungkinkan terjadinya exception didalam blok try, diikuti dengan blok catch yang
menentukan jenis exception yang ingin ditangani. Contoh :
public class Percobaan2 {
public static void main(String[] args) {
int a[] = new int[5];
try{
a[5] = 100 ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Indeks Array melebihi batas");
}
System.out.println("Setelah blok try-catch");
}

154

Output :
Terjadi exception karena Indeks Array melebihi batas
Setelah blok try-catch

Dapat terjadi kode yang terdapat dalam blok try mengakibatkan lebih dari satu exception.
Dalam hal ini, kita dapat menuliskan lebih dari satu blok catch. Contoh :
public class Percobaan5 {
public static void main(String[] args) {
int bil=10;
String b[] = {"a","b","c"};
try{
System.out.println(bil/0);
System.out.println(b[3]);
}catch(ArithmeticException e){
System.out.println("Error Aritmetik");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Error Kapasitas Array Melebihi Batas");
}catch(Exception e){
System.out.println("Terdapat Error");
}
}
}

Blok catch yang dijalankan tergantung dengan exception yang terjadi. Java akan
menjalankan blok catch yang sesuai dengan tipe exceptionnya saja. Dalam
penggunaannya, blok catch dengan tipe subclass harus ditulis lebih dahulu baru diikuti
dengan blok catch dengan tipe data superclassnya.

B.3 Menggunakan Keyword finally


Terdapat kode yang harus dijalankan walaupun terjadi atau tidak terjadi exception,
misalkan kita membuka file, hal ini memungkinkan terjadinya exception misal file tidak
ada, file tidak bisa dibuka, selanjutnya yang harus dilakukan adalah menutup file
tersebut.
public class Percobaan2 {
public static void main(String[] args) {
int a[] = new int[5];
try{
a[5] = 100 ;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi exception karena Indeks Array
melebihi batas");
}finally{

155

System.out.println("Selalu Dijalankan");
}
System.out.println("Setelah blok try-catch");
}
}

B.4 Menggunakan Keyword throw dan throws


Secara eksplisit, kita dapat melempar (throw) exception dari program menggunakan
keyword throw. Jika exception tersebut adalah checked exception, maka pada method
harus ditambahkan throws. Jika exception tersebut adalah unchecked exception, maka
pada method tidak perlu ditambahkan throws.
public class Percobaan6 {
public static void method1() throws FileNotFoundException{
throw new FileNotFoundException("File Tidak Ada");
}
public static void main(String[] args) {
try {
method1();
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
}

B.5 Membuat sendiri Subclass dari Exception


Untuk melakukan ini, kita cukup membuat class baru yang merupakan subclass
Exception. Didalam class ini kita cukup mendeklarasikan konstruktor.
class Salah extends Exception{
public Salah(){}
public Salah(String pesan){
super(pesan);
}
}

C. TUGAS PENDAHULUAN
Buatlah review 1 halaman mengenai penanganan exception dengan cara melempar
exception dan berikan 1 contoh program.
D. PERCOBAAN
Percobaan 1 : Method yang melempar unchecked exception
public class Percobaan6 {
public static void method1(){
throw new ArrayIndexOutOfBoundsException("Melebihi Kapasitas");
}

156

public static void main(String[] args) {


try {
method1();
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println(ex.getMessage());
}
}
}

Percobaan 2 : Method yang melempar checked exception


public class Percobaan7 {
public static void method1() throws FileNotFoundException{
throw new FileNotFoundException("File Tidak Ada");
}
public static void main(String[] args) {
try {
method1();
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
}
}
}

Percobaan 3 : Memahami mengenai mekanisme exception.


public class Exercise1 {
static void f1() {
System.out.print("1");
try {
System.out.print("2");
f2();
System.out.print("3");
}
catch (Exception e) { System.out.print("4"); }
finally { System.out.print("5"); }
System.out.println("6");
}
static void f2 () throws Exception {
if (true) throw new Exception();
}
public static void main(String s[]) { f1(); }
}

Percobaan 4 : Menggunakan konsep Inheritance untuk membuat superclass dan


subclass exception. Program menangani exception dengan menangkap subclass
exception dengan superclass
import javax.swing.*;
class ExceptionA extends Exception {}
class ExceptionB extends ExceptionA {}

157

class ExceptionC extends ExceptionB {}


public class Demo {
public static void main( String args[] )
{
try {
throw new ExceptionC();
}
catch( ExceptionA a ) {
JOptionPane.showMessageDialog(
null, a.toString(), "Exception",
JOptionPane.INFORMATION_MESSAGE );
}
try {
throw new ExceptionB();
}
catch( ExceptionA b ) {
JOptionPane.showMessageDialog(
null, b.toString(), "Exception",
JOptionPane.INFORMATION_MESSAGE );
}
System.exit( 0 );
}
}

Percobaan 5 : Membuat exception sendiri


class Salah extends Exception{
public Salah(){}
public Salah(String pesan){
super(pesan);
}
}

public class TesSalah{


public static void main(String [] arg) throws Salah{
Salah s = new Salah(Salah disengaja ha..ha..);
int i = 0;
if (i==0)
throw s;
}
}

Percobaan 6: Membuat exception sendiri


class counterException extends Exception {

// Define

String complaint;
public counterException(String c) {
this.complaint = c;
}
public String toString( ) {
return "counter Exception + complaint;
}
}

class counter {
158

int n = 0;
public int zero() { return n=0; }
public int up() { return ++n; }
public int down() throws counterException { // Throw
if (n <= 0)
throw new counterException
(n + " count Down failed.");
return --n;
}
}

public class Example1 {


public static void main( String args[] ) {
counter aCounter = new counter( );
aCounter.zero( );
aCounter.up();
try { aCounter.down( ); }
catch (counterException ce) { // Catch
System.out.println("" + ce);
}
try { aCounter.down( ); }
catch (counterException ce) { // Catch
System.out.println("" + ce);
}
finally {
System.out.println(Finally);
}
}
}

public class Example2 {


public static void main( String args[] ) throws Exception {
counter aCounter = new counter( );
aCounter.zero( );
aCounter.up();
aCounter.down( );
aCounter.down( );
System.out.println(Completed);
}
}

E. LATIHAN
1. Terdapat dua cara untuk menangani Exception yaitu dengan menangkap Exception
dan melempar Exception. Lakukan penanganan exception dengan melempar
Exception menggunakan throw. Berilah penjelasan (apakah program termasuk
unchecked exceptions atau checked exceptions) !
public class ReadFile {
public static void main(String args[]){
File file = new File("Data.txt");

159

BufferedReader fileReader ;
fileReader = new BufferedReader(new FileReader(file));
while(true){
String line = fileReader.readLine();
if (line == null)
break ;
System.out.println(line);
}
}
}

F. TUGAS
1. Buatlah sebuah class Stack, FullStackException dan EmptyStackException. Class
Stack ini menggambar Stack yang menerapkan konsep LIFO (Last In First Out).
Konsep LIFO ini, data yang terakhir masuk akan keluar pertama kali.
Class Stack mempunyai atribut:

size : menentukan besar array untuk menyimpan data. Array berdimensi satu
dengan tipe Object.

top : merupakan tanda indeks yang paling atas, yang belum terisi. Sehingga data
yang akan masuk akan dimasukkan pada indeks tersebut.

Object[] elemen : untuk menyimpan data.

Class Stack mempunyai operasi:

public Stack() : jika kita membuat object Stack dengan konstruktor Stack() maka
tentukan size = 5.

public Stack(int s) : jika kita membuat object Stack dengan konstruktor Stack(int
s) maka tentukan size berdasarkan parameter s.

public int getSize() : untuk mendapatkan besar array dari Stack.

public int getTop() : untuk mendapatkan top dari Stack

public void push(Object o) : untuk memasukkan data ke array pada Stack.

public Object pop() : untuk mengambil data dari array.

160

Deskripsi Stack
Buat objek Stack dengan nama stack, pertama kali top bernilai 0.
4
3
2
1

top = 0

Masukkan sebuah data String satu, data satu akan dimasukkan pada indeks yang ke-0
(sesuai dengan nilai top) selanjutnya top dinaikkan 1, sehingga top = 1.
4
3
2
1

top = 1
satu

Masukkan sebuah data String dua, data dua akan dimasukkan pada indeks yang ke-1
(sesuai dengan nilai top) selanjutnya top dinaikkan 1, sehingga top = 2.
4
3
2

top = 2

1 dua
satu

Ambil sebuah data dari Stack, data yang diambil adalah data yang dimasukkan terakhir
kali (dua). Kurangi nilai top dengan 1 sehingga menjadi nilai top = 1. Selanjutnya
ambil data pada indeks ke -1.

161

4
3
2
1

top = 1
satu

Ambil sebuah data dari Stack, data yang diambil adalah data yang terakhir (satu).
Kurangi nilai top dengan 1 sehingga menjadi nilai top = 0. Selanjutnya apabila ada
pengambilan data maka yang diambil adalah data pada indeks ke -0.
4
3
2
1
top = 0

Ambil sebuah data lagi dari Stack, jika kondisi top = 0, maka Stack kosong dan
melempar exception EmptyStackException (class ini merupakan subclass dari class
RuntimeException), dan muncul peringatan bahwa Stack kosong.
Selanjutnya isilah Stack sampai penuh.
top = 5
4 lima
3 empat
2 tiga
1 dua
satu

162

Jika kita ingin memasukkan data baru lagi, jika kondisi top = 5, maka akan melempar
exception yaitu FullStackException (class ini merupakan subclass dari class
RuntimeException).
top = 5
4 lima
3 empat
2 tiga
1 dua
satu

Masukkan data lagi Stack Full

A. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

163

PRAKTIKUM 19
JAVA COLLECTION FRAMEWORK : SET DAN LIST
A. TUJUAN PEMBELAJARAN
1. Memahami cara penyimpanan objek menggunakan Collection.
2. Mengetahui pengelompokan dari Collection.
3. Mengetahui perbedaan dari interface Set dan List.
4. Mengetahui penggunaan class-class dari interface Set dan List.
5. Mengetahui cara penggunaan Iterasi dan Enumeration.

B. DASAR TEORI
Collection adalah suatu objek yang bisa digunakan untuk menyimpan sekumpulan objek.
Objek yang ada dalam Collection disebut elemen. Collection menyimpan elemen yang
bertipe Object, sehingga berbagai tipe objek bisa disimpan dalam Collection.
Class-class mengenai Collection tergabung dalam Java Collection Framework. Classclass Collection diletakkan dalam package java.util dan mempunyai dua interface utama
yaitu Collection dan Map. Mulai java 1.5 (juga dikenal sebagai J2SE 5), semua class
yang termasuk Java Collection Framework adalah class generics. Untuk kompatibilitas
dengan versi java sebelumnya, penggunaan generics tidak diharuskan, namun sangat
disarankan.
Collection terbagi menjadi 3 kelompok yaitu Set, List dan Map. Berikut ini adalah
struktur hierarki interface dan class yang termasuk dalam kelompok collection ini.

164

Java Collections Framework terbagi menjadi tiga kelompok:

Set

Set mengikuti model himpunan, dimana objek/anggota yang tersimpan dalam Set harus
unik. Urutan maupun letak dari anggota tidaklah penting, hanya keberadaan anggota saja
yang penting. Class-class yang mengimplementasikan interface Set adalah HashSet.
Interface SortedSet merupakan subInterface dari interface Set. Untuk mengurutkan Set,
kita dapat menggunakan class yang mengimplementasikan interface SortedSet yaitu clas
TreeSet.

List

List digunakan untuk menyimpan sekumpulan objek berdasarkan urutan masuk (ordered)
dan menerima duplikat. Cara penyimpanannya seperti array, oleh sebab itu memiliki
posisi awal dan posisi akhir, menyisipkan objek pada posisi tertentu, mengakses dan
menghapus isi list, dimana semua proses ini selalu didasarkan pada urutannya. Classclass yang mengimplementasikan interface List adalah Vector, Stack, Linked
List dan Array List.
165

Terdapat interface Queue yang cara penyimpanan seperti List, interface ini menyimpan
objek menggunakan metode FIFO (First In First Out) yaitu objek yang masuk pertama
keluar pertama. Class-class yang mengimplementasikan interface Queue adalah
PriorityQueue

dan

LinkedList.

Data

yang

tersimpan

pada

objek

PriorityQueue akan diurutkan, data tersebut harus mengimplementasikan objek


Comparable atau Comparator.

Map

Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan objek pada
Map, perlu sepasang objek, yaitu key yang bersifat unik dan nilai yang disimpan. Untuk
mengakses nilai tersebut maka kita perlu mengetahui key dari nilai tersebut. Map juga
dikenal sebagai dictionary/kamus. Pada saat menggunakan kamus, perlu suatu kata yang
digunakan untuk pencarian. Class-class yang mengimplementasikan Map adalah
Hashtable,HashMap, LinkedHashMap. Untuk mengurutkan Map menggunakan
interface SortedMap, class yang mengimplementasikan interface tersebut adalah
TreeMap.

C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai Java Collection Framework dan pembagian
kelompok Collection dan berikan penjelasannya.

D. PERCOBAAN
Percobaan 1 : Memahami penggunaan class-class yang mengimplementasikan
interface Set yaitu class HashSet dan class TreeSet
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set set=new HashSet();
set.add("Bernadine");
set.add("Elizabeth");
set.add("Gene");
set.add("Elizabeth");
set.add("Clara");
System.out.print("Elemen pada HashSet : ");
System.out.println(set);
Set sortSet=new TreeSet(set);
System.out.print("Elemen pada TreeSet : ");
System.out.println(sortSet);

166

}
}

Percobaan 2 : Penggunaan Class HashSet


public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
if (!s.add(a))
System.out.println("Duplicate detected: " + a);
System.out.println(s.size() + " distinct words: " + s);
}
}

Jalankan dengan :
java FindDups i came i saw i left

public class FindDups2 {


public static void main(String[] args) {
Set<String> uniques = new HashSet<String>();
Set<String> dups
= new HashSet<String>();
for (String a : args)
if (!uniques.add(a))
dups.add(a);
// Destructive set-difference
uniques.removeAll(dups);
System.out.println("Unique words:
" + uniques);
System.out.println("Duplicate words: " + dups);
}
}

Jalankan dengan
java FindDups i came i saw i left

Percobaan 3 : Interface Set menerapkan konsep himpunan. Mengetahui


implementasi konsep himpunan pada interface Set.
import java.util.*;
public class SetExample {
public static void main(String[] args) {
Set s1=new HashSet();
s1.add("Australia");
s1.add("Sweden");
s1.add("Germany");
Set s2=new HashSet();
s2.add("Sweden");

167

s2.add("France");
Set union=new TreeSet(s1);
union.addAll(s2); // gabungan dari s1 dan s2
print("Union",union);
Set intersect=new TreeSet(s1);
intersect.retainAll(s2); // irisan dari s1 dan s2
print("Intersection",intersect);
}
protected static void print(String label, Collection c){
System.out.println("---------------- "+ label+" --------------");
Iterator it=c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}

Percobaan 4 : Memahami penggunaan class-class yang mengimplementasikan


interface List yaitu ArrayList dan LinkedList.
import java.util.*;
public class ListExample {
public static void main(String[] args) {
List list=new ArrayList();
list.add("Bernadine");
list.add("Elizabeth");
list.add("Gene");
list.add("Elizabeth");
list.add("Clara");
System.out.println(list);
System.out.println("2 : "+list.get(2));
System.out.println("0 : "+list.get(0));
LinkedList queue=new LinkedList();
queue.addFirst("Bernadine");
queue.addFirst("Elizabeth");
queue.addFirst("Gene");
queue.addFirst("Elizabeth");
queue.addFirst("Clara");
System.out.println(queue);
queue.removeLast();
queue.removeLast();
System.out.println(queue);
}
}

168

Percobaan 5 : Penggunaan Class Vector


import java.util.Vector;

public class VectorExample {


public static void main(String[] args) {
Vector<String> vc=new Vector<String>();
//<E> Element type of Vector e.g. String, Integer, Object ...
// add vector elements
vc.add("Vector Object 1");
vc.add("Vector Object 2");
vc.add("Vector Object 3");
vc.add("Vector Object 4");
vc.add("Vector Object 5");
// add vector element at index
vc.add(3, "Element at fix position");
// vc.size() inform number of elements in Vector
System.out.println("Vector Size :"+vc.size());
// get elements of Vector
for(int i=0;i<vc.size();i++)
{
System.out.println("Vector Element "+i+" :"+vc.get(i));
}
}
}

Percobaan 6 : Penggunaan Iterator


import java.util.*;
class IteratorDemo {
public static void main(String args[]) {
// create an array list
ArrayList al = new ArrayList();
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
// use iterator to display contents of al
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while (itr.hasNext()) {
Object element = itr.next();

169

System.out.print(element + " ");


}
System.out.println();
// modify objects being iterated
ListIterator litr = al.listIterator();
while (litr.hasNext()) {
Object element = litr.next();
litr.set(element + "+");
}
System.out.print("Modified contents of al: ");
itr = al.iterator();
while (itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
// now, display the list backwards
System.out.print("Modified list backwards: ");
while (litr.hasPrevious()) {
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println();
}
}

Percobaan 7 : Penggunaan Enumeration


import java.util.Vector;
import java.util.Enumeration;

public class EnumerationTester {


public static void main(String args[]) {
Enumeration days;
Vector dayNames = new Vector();
dayNames.add("Sunday");
dayNames.add("Monday");
dayNames.add("Tuesday");
dayNames.add("Wednesday");
dayNames.add("Thursday");
dayNames.add("Friday");
dayNames.add("Saturday");
days = dayNames.elements();
while (days.hasMoreElements ())
System.out.println(days.nextElement());
}

170

Percobaan 8 : Membuat Array List dari Enumerasi


public class CreateArrayListFromEnumerationExample {
public static void main(String[] args) {
//create a Vector object
Vector v = new Vector();
//Add elements to Vector
v.add("A");
v.add("B");
v.add("D");
v.add("E");
v.add("F");
System.out.println("Vector contains : " + v);
//Get Enumeration over Vector
Enumeration e = v.elements();
//Create ArrayList from Enumeration of Vector
ArrayList aList = Collections.list(e);
System.out.println("Arraylist contains : " + aList);
}
}

Percobaan 9 : Mengkopikan element dari ArrayList ke Vector


import java.util.ArrayList;
import java.util.Collections;
import java.util.Vector;
public class CopyElementsOfArrayListToVectorExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add("1");
arrayList.add("4");
arrayList.add("2");
arrayList.add("5");
arrayList.add("3");
//create a Vector object
Vector v = new Vector();
//Add elements to Vector
v.add("A");
v.add("B");
v.add("D");

171

v.add("E");
v.add("F");
v.add("G");
v.add("H");
System.out.println("Before copy, Vector Contains : " + v);
//copy all elements of ArrayList to Vector using copy method of
Collections class
Collections.copy(v,arrayList);
System.out.println("After Copy, Vector Contains : " + v);
}
}

Percobaan 10 : Menambahkan elemen yang tersimpan di Collection pada ArrayList


import java.util.ArrayList;
import java.util.Vector;

public class AppendAllElementsOfOtherCollectionToArrayListExample


{
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
//create a new Vector object
Vector v = new Vector();
v.add("4");
v.add("5");
//append all elements of Vector to ArrayList
arrayList.addAll(v);
//display elements of ArrayList
System.out.println("After appending all elements of Vector,
ArrayList contains..");
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
}
}

172

Percobaan 11 : Memahami Penggunaan dari class PriorityQueue


import java.util.*;

public class PriorityQueueDemo {


PriorityQueue<String> stringQueue;
public static void main(String[] args){
stringQueue = new PriorityQueue<String>();
stringQueue.add("ab");
stringQueue.add("abcd");
stringQueue.add("abc");
stringQueue.add("a");
//don't use iterator which may or may not
//show the PriorityQueue's order
while(stringQueue.size() > 0)
System.out.println(stringQueue.remove());
}
}

Percobaan 12 : Memahami Penggunaan dari class PriorityQueue dan data yang


tersimpan

dalam

objek

PriorityQueue

mengimplementasikan

interface

Comparator.
import java.util.Comparator;
import java.util.PriorityQueue;

public class PQueueTest {


public static void main(String[] args) {
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(10,
new Comparator<Integer>() {
public int compare(Integer int1, Integer int2) {
boolean flag1 = isPrime(int1);
boolean flag2 = isPrime(int2);
if (flag1 == flag2){
return int1.compareTo(int2);
} else if (flag1) {
return -1;
} else if(flag2) {
return 1;
}
return 0;
}
});
pQueue.add(1);
pQueue.add(5);
pQueue.add(6);
pQueue.add(4);
pQueue.add(2);

173

pQueue.add(9);
pQueue.add(7);
pQueue.add(8);
pQueue.add(10);
pQueue.add(3);
while(true) {
Integer head = pQueue.poll();
if(head == null) {
break;
}
System.out.print(head + " <-- ");
}
}
/**
*
* @param n
* @return
*/
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
if (n == 2) {
return true;
}
if (n % 2 == 0) {
return false;
}
long m = (long) Math.sqrt(n);
for (long i = 3; i <= m; i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
}

E. LATIHAN
Latihan 1 : Penerapan konsep himpunan pada interface Set
Terdapat sebuah himpunan
A = {1,2,3,4,5}
B = {5,6,7,8,9,10}
Menggunakan class yang mengimplementasikan Interface Set, dapatkah output seperti :

AB

AB
174

AUB

ACB

Latihan 2 : Memahami penggunaan interface List.


Buatlah objek List, dengan data bertipe String lakukan langkah berikut :

Tampilkan data yang terdapat pada list.

Baliklah data yang terdapat pada list dan tampilkan.

Acaklah data tersebut dan tampilkan.

Urutkan data tersebut dan tampilkan.

Latihan 3 : Memahami penggunaan interface List (2)


Buatlah class Mahasiswa dengan informasi nrp dan nama(bertipe String).
Buatlah objek List, dengan data bertipe String lakukan langkah berikut :

Tampilkan data yang terdapat pada list.

Baliklah data yang terdapat pada list dan tampilkan.

Acaklah data tersebut dan tampilkan.

Urutkan data tersebut, jangan lupa untuk mengimplementasikan interface


Comparable/Comparator pada class Mahasiswa dan tampilkan.

F. TUGAS
Tugas 1 : Penggunaan class LinkedList pada interface List.
Buatlah dua objek List (ArrayList) yaitu objek warna dan warnaDihapus. Objek ini berisi
warna-warna, buatlah sebagian ada yang sama. Lakukan penghapusan data yang terdapat
pada objek warna yang sama dengan data warna yang terdapat pada objek warnaDihapus,
selanjutnya tampilkan.
Warna :
[MAGENTA, RED, WHITE, BLUE, CYAN]
Warna yang dihapus :
[RED, WHITE, BLUE]
Output :
Warna :
[MAGENTA, CYAN]

175

Tugas 2 : Pengurutan data mahasiswa berdasarkan nilai.


Buatlah class Mahasiswa dengan informasi :

Nrp (String)

Nama(String)

Nilai(Float)

Terdapat 10 data mahasiswa yang tersimpan dalam queue, set nilai secara random antara
60-100, lakukan pengurutan data mahasiswa berdasarkan nilai tersebut !

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

176

PRAKTIKUM 20
JAVA COLLECTION FRAMEWORK : MAP
A. TUJUAN PEMBELAJARAN
1. Mengetahui mengenai interface Map.
2. Memahami cara penyimpanan objek menggunakan Map.
3. Mengetahui implementasi penggunaan dari class-class pada interface Map.

B. DASAR TEORI
Collection adalah suatu objek yang bisa digunakan untuk menyimpan sekumpulan objek.
Objek yang ada dalam Collection disebut elemen. Collection menyimpan elemen yang
bertipe Object, sehingga berbagai tipe objek bisa disimpan dalam Collection.
Class-class mengenai Collection tergabung dalam Java Collection Framework. Classclass Collection diletakkan dalam package java.util dan mempunyai dua interface utama
yaitu Collection dan Map. Mulai java 1.5 (juga dikenal sebagai J2SE 5), semua class
yang termasuk Java Collection Framework adalah class generics. Untuk kompatibilitas
dengan versi java sebelumnya, penggunaan generics tidak diharuskan, namun sangat
disarankan.
Collection terbagi menjadi 3 kelompok yaitu Set, List dan Map. Berikut ini adalah
struktur hierarki interface dan class yang termasuk dalam kelompok collection ini.

177

Java Collections Framework terbagi menjadi tiga kelompok:

Set

Set mengikuti model himpunan, dimana objek/anggota yang tersimpan dalam Set harus
unik. Urutan maupun letak dari anggota tidaklah penting, hanya keberadaan anggota saja
yang penting. Class-class yang mengimplementasikan interface Set adalah HashSet.
Interface SortedSet merupakan subInterface dari interface Set. Untuk mengurutkan Set,
kita dapat menggunakan class yang mengimplementasikan interface SortedSet yaitu clas
TreeSet.

List

List digunakan untuk menyimpan sekumpulan objek berdasarkan urutan masuk (ordered)
dan menerima duplikat. Cara penyimpanannya seperti array, oleh sebab itu memiliki
posisi awal dan posisi akhir, menyisipkan objek pada posisi tertentu, mengakses dan
menghapus isi list, dimana semua proses ini selalu didasarkan pada urutannya. Class-

178

class yang mengimplementasikan interface List adalah Vector, Stack, Linked


List dan Array List.
Terdapat interface Queue yang cara penyimpanan seperti List, interface ini menyimpan
objek menggunakan metode FIFO (First In First Out) yaitu objek yang masuk pertama
keluar pertama. Class-class yang mengimplementasikan interface Queue adalah
PriorityQueue

dan

LinkedList.

Data

yang

tersimpan

pada

objek

PriorityQueue akan diurutkan, data tersebut harus mengimplementasikan objek


Comparable atau Comparator.

Map

Perbedaaan mendasar map dengan collection yang lain, untuk menyimpan objek pada
Map, perlu sepasang objek, yaitu key yang bersifat unik dan nilai yang disimpan. Untuk
mengakses nilai tersebut maka kita perlu mengetahui key dari nilai tersebut. Map juga
dikenal sebagai dictionary/kamus. Pada saat menggunakan kamus, perlu suatu kata yang
digunakan untuk pencarian. Class-class yang mengimplementasikan Map adalah
Hashtable,HashMap, LinkedHashMap. Untuk mengurutkan Map menggunakan
interface SortedMap, class yang mengimplementasikan interface tersebut adalah
TreeMap.

C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai interface Map dan 2 contoh dari interface Map.

D. PERCOBAAN
Percobaan 1 : Penggunaan HashMap, menambahkan data, menghapus data
tertentu dan menghapus semua data pada objek HashMap.
import java.util.HashMap;

public class RemoveValueFromHashMapExample {


public static void main(String[] args) {
//create HashMap object
HashMap hMap = new HashMap();
//add key value pairs to HashMap
hMap.put("1","One");
hMap.put("2","Two");

179

hMap.put("3","Three");
Object obj = hMap.remove("2");
System.out.println(obj + " Removed from HashMap");
hMap.clear();
System.out.println("Total key value pairs in HashMap are : " +
hMap.size());
}
}

Percobaan 2 : Melakukan iterasi pada value HashMap


import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

public class IterateValuesOfHashMapExample {


public static void main(String[] args) {
//create HashMap object
HashMap hMap = new HashMap();
//add key value pairs to HashMap
hMap.put("1","One");
hMap.put("2","Two");
hMap.put("3","Three");
Collection c = hMap.values();
//obtain an Iterator for Collection
Iterator itr = c.iterator();
//iterate through HashMap values iterator
while(itr.hasNext())
System.out.println(itr.next());
}
}

Percobaan 3 : Mendapatkan key, melakukan iterasi pada key dan menghapus key
tertentu pada objek HashMap
public class GetSetViewOfKeysFromHashMapExample {
public static void main(String[] args) {
//create HashMap object
HashMap hMap = new HashMap();
//add key value pairs to HashMap
hMap.put("1","One");
hMap.put("2","Two");
hMap.put("3","Three");

180

Set st = hMap.keySet();
System.out.println("Set created from HashMap Keys contains :");
//iterate through the Set of keys
Iterator itr = st.iterator();
while(itr.hasNext())
System.out.println(itr.next());
//remove 2 from Set
st.remove("2");
}
}

Percobaan 4 : Mengecek apakah objek HashMap mempunyai value tertentu.


import java.util.HashMap;

public class CheckValueOfHashMapExample {


public static void main(String[] args) {
//create HashMap object
HashMap hMap = new HashMap();
//add key value pairs to HashMap
hMap.put("1","One");
hMap.put("2","Two");
hMap.put("3","Three");
boolean blnExists = hMap.containsValue("Two");
System.out.println("Two exists in HashMap ? : " + blnExists);
}
}

Percobaan 5 : Mengecek apakah objek HashMap berisi key tertentu


import java.util.HashMap;

public class CheckKeyOfHashMapExample {


public static void main(String[] args) {
//create HashMap object
HashMap hMap = new HashMap();

//add key value pairs to HashMap


hMap.put("1","One");
hMap.put("2","Two");
hMap.put("3","Three");
boolean blnExists = hMap.containsKey("3");

181

System.out.println("3 exists in HashMap ? : " + blnExists);


}
}

Percobaan 6 : Menambahkan objek Hash Map ke objek Hashtable dan penggunaan


Enumeration.
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.HashMap;

public class CreateHashtableFromHashMap {


public static void main(String[] args) {
//create HashMap
HashMap hMap = new HashMap();
//populate HashMap
hMap.put("1","One");
hMap.put("2","Two");
hMap.put("3","Three");
//create new Hashtable
Hashtable ht = new Hashtable();
//populate Hashtable
ht.put("1","This value would be REPLACED !!");
ht.put("4","Four");
//print values of Hashtable before copy from HashMap
System.out.println("Hashtable contents before copy");
Enumeration e = ht.elements();
while(e.hasMoreElements())
System.out.println(e.nextElement());
ht.putAll(hMap);
//display contents of Hashtable
System.out.println("Hashtable contents after copy");
e = ht.elements();
while(e.hasMoreElements())
System.out.println(e.nextElement());
}
}

Percobaan 7 : Mendapatkan key terendah dan tertinggi dari objek TreeMAp.


import java.util.TreeMap;

public class GetLowestHighestKeyTreeMapExample {


public static void main(String[] args) {

182

//create TreeMap object


TreeMap treeMap = new TreeMap();
//add key value pairs to TreeMap
treeMap.put("1","One");
treeMap.put("3","Three");
treeMap.put("2","Two");
treeMap.put("5","Five");
treeMap.put("4","Four");
System.out.println("Lowest key Stored in Java TreeMap is : "
+ treeMap.firstKey());
System.out.println("Highest key Stored in Java TreeMap is : "
+
treeMap.lastKey());
}
}

Percobaan 8 : Mendapatkan TailMap dari objek TreeMap


import java.util.SortedMap;
import java.util.TreeMap;

public class GetTailMapFromTreeMapExample {


public static void main(String[] args) {
//create TreeMap object
TreeMap treeMap = new TreeMap();
//add key value pairs to TreeMap
treeMap.put("1","One");
treeMap.put("3","Three");
treeMap.put("2","Two");
treeMap.put("5","Five");
treeMap.put("4","Four");
SortedMap sortedMap = treeMap.tailMap("2");
System.out.println("Tail Map Contains : " + sortedMap);
}
}

Percobaan 9 : Mendapatkan SubMap dari objek TreeMap


import java.util.TreeMap;
import java.util.SortedMap;

public class GetSubMapFromTreeMapExample {


public static void main(String[] args) {

183

//create TreeMap object


TreeMap treeMap = new TreeMap();
//add key value pairs to TreeMap
treeMap.put("1","One");
treeMap.put("3","Three");
treeMap.put("2","Two");
treeMap.put("5","Five");
treeMap.put("4","Four");
SortedMap sortedMap = treeMap.subMap("2","5");
System.out.println("SortedMap Contains : " + sortedMap);
}
}

Percobaan 10 : Mendapatkan HeadMap dari objek TreeMap


import java.util.SortedMap;
import java.util.TreeMap;

public class GetHeadMapFromTreeMapExample {


public static void main(String[] args) {
//create TreeMap object
TreeMap treeMap = new TreeMap();
//add key value pairs to TreeMap
treeMap.put("1","One");
treeMap.put("3","Three");
treeMap.put("2","Two");
treeMap.put("5","Five");
treeMap.put("4","Four");
SortedMap sortedMap = treeMap.headMap("3");
System.out.println("Head Map Contains : " + sortedMap);
}
}

E. LATIHAN
Latihan 1 : Mengetahui penggunaan class TreeMap
Inputkan kalimat, buatlah sebagian kata-kata dalam kalimat tersebut ada yang sama,
output berupa kata (sebagai key) dan jumlah kata (value) dalam kalimat tersebut yang
tersimpan dalam TreeMap, selanjutnya tampilkan.
Input : televisi kursi televisi kursi meja televisi monitor.
Output : kursi = 2 meja = 1 monitor = 1 televisi = 3
184

Latihan 2 : Mengetahui penggunaan class TreeMap


Melanjutkan latihan 1, tampilkan :

Tampilkan nilai terendah dan tertinggi


Output :
Nilai terendah : Meja = 1
Nilai tertinggi : Televisi = 3

Tampilkan berdasarkan key dengan awalan m.


Output :
meja = 1 monitor = 1

F. TUGAS
Tugas 1 : Ibukota propinsi di Indonesia
Terdapat objek TreeMap 1 yang berisi pulau(sebagai key)

beserta propinsi-

propinsinya(value). Terdapat objek TreeMap 2 yang berisi propinsi(sebagai key) beserta


ibukotanya(value). Tampilkan :

Ibukota propinsi yang terdapat di pulau Sumatera

Ibukota propinsi yang terdapat di pulau Jawa

Ibukota propinsi yang berawalan S (Sumatera Utara, Sumatera Barat, Sumatera


Selatan, Sulawesi Barat, Sulawesi Tengah, Sulawesi Utara, Sulawesi Tenggara,
Sulawesi Selatan)

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

185

PRAKTIKUM 21
COMPARABLE

A. TUJUAN PEMBELAJARAN
1. Mengetahui untuk mengurutkan data dengan cara membandingkan satu objek dengan
objek lainnya.
2. Mengetahui class-class di Java yang mengimplementasikan interface Comparable.
3. Mengetahui cara mengurutkan data dengan class yang didefinisikan sendiri, dengan
cara mengimplementasikan interface Compable.

B. DASAR TEORI
Pada kehidupan nyata, object-object sering dibandingkan, misal :

Mobil Andi lebih mahal dibandingkan dengan mobil Budi

Buku A lebih tebal dibandingkan dengan Buku B

Usia Andi lebih muda dibandingkan dengan usia Intan

Dalam pemrograman object oriented, sering sekali ada kebutuhan untuk membandingkan
object-object dari class yang sama, misalkan membandingkan object untuk mengurutkan
data, pencarian data yang diurutkan berdasarkan umur. Pada praktikum ini akan
membahas bagaimana merancang object dari class untuk bisa dibandingkan
menggunakan interface java.lang.Comparable and java.util.Comparator.

B.1 Mengurutkan Objek String


Terdapat array dengan tipe String, untuk mengurutkan data String pada array gunakan
Arrays.sort().
import java.util.Arrays;
public class ArrayString {
public static void main(String args[]){
String animals[] = new String[6];
animals[0] = "snake";
animals[1] = "kangaroo";

185

animals[2] = "wombat";
animals[3] = "bird";
System.out.println("\nSEBELUM DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
Arrays.sort(animals,0,4);
System.out.println("\nSETELAH DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
}
}

Output :
SEBELUM DISORTING
animal 0 : snake
animal 1 : kangaroo
animal 2 : wombat
animal 3 : bird
SETELAH DISORTING
animal 0 : bird
animal 1 : kangaroo
animal 2 : snake
animal 3 : wombat

Terdapat data String yang tersimpan dalam ArrayList, untuk mengurutkan data
menggunakan Collections.sort()
import java.util.ArrayList;
import java.util.Collections;
public class SortList {
public static void main(String args[]){
ArrayList insects = new ArrayList();
insects.add("mosquito");
insects.add("butterfly");
insects.add("dragonfly");
insects.add("fly");
System.out.println("\nSEBELUM DISORTING");
int size = insects.size();
for (int i = 0; i < size; i++) {
System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
Collections.sort(insects);

186

System.out.println("\nSETELAH DISORTING");
for (int i = 0; i < size; i++) {
System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
}
}

Output :
SEBELUM DISORTING
insect 0 : mosquito
insect 1 : butterfly
insect 2 : dragonfly
insect 3 : fly
SETELAH DISORTING
insect 0 : butterfly
insect 1 : dragonfly
insect 2 : fly
insect 3 : mosquito

B.2 Mengurutkan Objek Yang Kita Definisikan Sendiri


Kita buat class Mahasiswa yang terdapat informasi nama dan nrp dengan tipe String.
Terdapat beberapa data mahasiswa yang disimpan di array, selanjutnya kita urutkan
berdasarkan nrp.
public class Mahasiswa {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {
this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}

187

@Override
public String toString() {
return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}
}

Buatlah class TestMahasiswa untuk menampilkan output :


import java.util.Arrays;
public class TestMahasiswa {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs);
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Output :
Exception in thread "main" java.lang.ClassCastException: prak.Mahasiswa
cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Arrays.java:1144)
at java.util.Arrays.sort(Arrays.java:1079)
at prak.TestMahasiswa.main(TestMahasiswa.java:16)
Java Result: 1

Pada output program terjadi exception. Mengapa? Karena untuk mengurutkan objek
(proses mengurutkan ini dilakukan dengan cara membandingkan satu objek dengan objek
yang lain), maka objek tersebut harus mengimplementasikan interface Comparable.
Dengan mengimplementasikan interface Comparable pada sebuah class, menyebabkan
object-object tersebut bisa dibandingkan (comparable).
Kalau pada percobaan sebelumnya data yang diurutkan adalah String, dapat diurutkan
karena String mengimplementasikan interface Comparable.
public final class String extends Object implements Serializable,
Comparable<String>, CharSequence

Interface ini mempunyai sebuah method compareTo() yang menentukan bagaimana


cara membandingkan antara dua object dari class tersebut.
188

Bentuk methodnya:
public int compareTo(Object o)
Mehod compareTo() menerima Object, sehingga kita bisa memasukkan sembarang
object, tapi harus mempunyai tipe yang sama. Kalau object yang kita masukkan adalah
object yang berbeda maka melemparkan exception java.lang.ClassCastException. Return
value dari method compareTo()

0 jika dua object yang dibandingkan sama.

Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2

Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2

Bagaimana caranya supaya bisa menggunakan Array.sort() pada contoh kasus diatas.
Pada

class

Mahasiswa

implementasikan

interface

Comparable,

berarti

harus

mengimplementasikan method compareTo(). Isilah method ini dengan tujuan untuk


membandingkan object dari class Mahasiswa berdasarkan umur. Jangan lupa untuk
mengcasting object menjadi object dari class Mahasiswa terlebih dahulu.
public class Mahasiswa implements Comparable {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {
this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override
public String toString() {
return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}

189

public int compareTo(Object o) {


Mahasiswa m2 = (Mahasiswa) o ;
return this.nrp.compareTo(m2.nrp);
}
}

Selanjutnya jalankan class TestMahasiswa lagi.


Output :
SEBELUM SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita},
Mahasiswa{nrp=02 nama=Tika}]
SESUDAH SORTING
[Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=02 nama=Tika},
Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=05 nama=Cahya}]

B.3 Penggunaan Class Comparator


Dengan mengimplementasikan interface Comparable kita hanya bisa menentukan satu
cara saja untuk membandingkan object-object dari class Mahasiswa, untuk contoh
sebelumnya, yang kita bandingkan berdasarkan nrp. Bagaimana jika object-object dari
class Mahasiswa diurutkan berdasarkan nama? Berarti object-object tersebut
dibandingkan berdasarkan nama. Kita masih memerlukan satu cara lagi untuk
membandingkan object-object dari class Mahasiswa. Kita memerlukan comparator.
Untuk membuat comparator, buat class yang mengimplementasikan interface
java.util.Comparator, dan method compare().
public int compare(Object o1, Object o2)
Return value dari method compare()

0 jika dua object yang dibandingkan sama.

Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2

Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2

Class Comparator
public class NamaComparator implements Comparator {
public int compare(Object o1, Object o2) {
Mahasiswa m1 = (Mahasiswa) o1;

190

Mahasiswa m2 = (Mahasiswa) o2;


return m1.getNama().compareTo(m2.getNama());
}
}

Penggunaan objek Comparator pada Arrays.sort()


public class TestMahasiswa2 {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs, new NamaComparator());
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Output : Mengurutkan Data Mahasiswa berdasarkan Nama


SEBELUM SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita},
Mahasiswa{nrp=02 nama=Tika}]
SESUDAH SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=01 nama=Endah},
Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=02 nama=Tika}]

C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai interface Comparable dan berikan 1 contoh
penggunaan interface Comparable.

D. PERCOBAAN
Percobaan 1 : Mengurutkan data dengan tipe String yang tersimpan di array.
import java.util.Arrays;
public class ArrayString {
public static void main(String args[]){
String animals[] = new String[6];
animals[0] = "snake";
animals[1] = "kangaroo";
animals[2] = "wombat";

191

animals[3] = "bird";
System.out.println("\nSEBELUM DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
Arrays.sort(animals,0,4);
System.out.println("\nSETELAH DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
}
}

Percobaan 2 : Mengurutkan data dengan tipe String yang tersimpan di List.


import java.util.ArrayList;
import java.util.Collections;
public class SortList {
public static void main(String args[]){
ArrayList insects = new ArrayList();
insects.add("mosquito");
insects.add("butterfly");
insects.add("dragonfly");
insects.add("fly");
System.out.println("\nSEBELUM DISORTING");
int size = insects.size();
for (int i = 0; i < size; i++) {
System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
Collections.sort(insects);
System.out.println("\nSETELAH DISORTING");
for (int i = 0; i < size; i++) {
System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
}
}

Percobaan 3 : Membuat class Mahasiswa dengan variabel nama dan nrp dengan
tipe String. Membuat data mahasiswa yang tersimpan di array. Selanjutnya
lakukan pengurutan data mahasiswa tersebut, apa yang terjadi? Jelaskan!
public class Mahasiswa {
private String nrp ;
private String nama ;

192

public Mahasiswa(String nrp, String nama) {


this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override
public String toString() {
return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}
}

import java.util.Arrays;
public class TestMahasiswa {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs);
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Percobaan 4 : Mengimplementasikan interface Comparable pada class Mahasiswa


untuk membandingkan antar objek mahasiswa berdasarkan nrp, lalu urutkan data
mahasiswa, apa yang terjadi ? Jelaskan !
public class Mahasiswa implements Comparable {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {

193

this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override
public String toString() {
return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}
public int compareTo(Object o) {
Mahasiswa m2 = (Mahasiswa) o ;
return this.nrp.compareTo(m2.nrp);
}
}

E. LATIHAN
Latihan 1 : Sebutkan class-class yang mengimplementasikan interface Comparable.

Latihan 2 : Kembangkan untuk Class Mahasiswa dengan memberikan variabel baru


berupa nilai IPK (double), selanjutkan lakukan pengurutan data Mahasiswa berdasarkan
nrp, nama dan nilai IPK (menggunakan Comparable)

Latihan 3 : Pada Supermarket Buah, terdapat beberapa macam buah dan informasi stock
dari buah tersebut. Terdapat menu penjualan (supermarket ke konsumen) dan pembelian
(supermarket ke pemasok) (menggunakan Comparable)

F. TUGAS
Tugas 1 : Permainan Remi
194

Pada permainan Remi terdapat 52 kartu, terdapat empat jenis kartu yaitu hati, keriting,
wajik dan waru. Setiap jenis kartu terdapat 13 kartu yaitu dua, tiga, empat, lima, enam,
tujuh, delapan, sembilan, sepuluh, jack, queen, king, ace. Kartu-kartu ini bisa
dibandingkan berdasarkan aturan tertentu. Untuk kartu dengan jenis yang sama, maka
misalkan untuk kartu dua hati memiliki nilai yang lebih rendah dibandingkan dengan
sembilan hati, kartu king hati lebih tinggi dibandingkan dengan jack hati. Di bawah ini
adalah urutan yang berlaku berdasarkan jenis kartu. Untuk selanjutnya urutan ini disebut
dengan BagianMuka
dua,tiga,empat,lima,enam,tujuh,delapan,sembilan,sepuluh,jack,quee
n,king,ace

Untuk mengimplementasikan Permainan Remi maka buat :

Enum Bagian Muka

Class Kartu : terdiri dari dua variabel yaitu variabel BagianMuka(tipe Enum
BagianMuka) dan variabel jenis(tipe String)
Contoh :

ace keriting (bagianMuka : ace, jenis : keriting)

lima hati (bagianMuka : lima, jenis : hati)

Class TumpukanKartu : berisi variabel List dengan nama tumpukanKartu. Kerjakan


method-method berikut ini di Class TumpukanKartu dan selanjutnya ujilah method
tersebut.

inisialisasi() : untuk membuat tumpukan kartu sebanyak 52 kartu dengan

jenis "Hati","Waru","Wajik","Keriting", masing-masing jenis mempunyai bagian


muka
dua,tiga,empat,lima,enam,tujuh,delapan,sembilan,sepuluh,jack,queen,king,ace.

acakKartu() : untuk mengacak tumpukan kartu.

subList(n) : untuk mengambil sebanyak n kartu dari tumpukan kartu.

subList(int awal, int akhir) : untuk mengambil kartu mulai dari indek

ke-awal sampai ke-(akhir-1) dari tumpukan kartu.

indexOf(Object

o) : untuk mencari objek Kartu pertama kali yang

diinginkan. Gunakan method indexOf() pada List, tapi pada class Kartu harus
195

mengimplementasikan interface Comparable, sehingga perlu menambahkan


method compareTo(Object o).

remove(int awal, int akhir): untuk menghapus tumpukan kartu mulai

dari indek ke-awal sampai ke-(akhir-1) dari tumpukan kartu.

enum BagianMuka {
dua,tiga,empat,lima,enam,tujuh,delapan,sembilan,sepuluh,jack,queen,king
,ace ;
}

public class Kartu {


private BagianMuka bagianMuka ;
private String jenis;
...
}

public class TumpukanKartu {


public TumpukanKartu() {
tumpukanKartu = new Vector();
}
public TumpukanKartu(List tumpukanKartu) {
this.tumpukanKartu = tumpukanKartu;
}
}

public class TestPrak {


public static void main(String args[]){
TumpukanKartu tk = new TumpukanKartu();
tk.inisialisasi();
System.out.println("\nSEBELUM DIACAK\n");
System.out.println(tk.toString());
System.out.println("\nSETELAH DIACAK\n");
tk.acakKartu();
System.out.println(tk.toString());
}
}

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

196

PRAKTIKUM 22
COMPARATOR
A. TUJUAN PEMBELAJARAN
1. Memahami untuk mengurutkan data dengan cara membandingkan satu objek dengan
objek lainnya.
2. Mengetahui cara mengurutkan data dengan class yang didefinisikan sendiri, dengan
cara mengimplementasikan Comparator.

B. DASAR TEORI
Pada kehidupan nyata, object-object sering dibandingkan, misal :

Mobil Andi lebih mahal dibandingkan dengan mobil Budi

Buku A lebih tebal dibandingkan dengan Buku B

Usia Andi lebih muda dibandingkan dengan usia Intan

Dalam pemrograman object oriented, sering sekali ada kebutuhan untuk membandingkan
object-object dari class yang sama, misalkan membandingkan object untuk mengurutkan
data, pencarian data yang diurutkan berdasarkan umur. Pada praktikum ini akan
membahas bagaimana merancang object dari class untuk bisa dibandingkan
menggunakan interface java.lang.Comparable and java.util.Comparator.

B.1 Mengurutkan Objek String


Terdapat array dengan tipe String, untuk mengurutkan data String pada array gunakan
Arrays.sort().
import java.util.Arrays;
public class ArrayString {
public static void main(String args[]){
String animals[] = new String[6];
animals[0] = "snake";
animals[1] = "kangaroo";
animals[2] = "wombat";

197

animals[3] = "bird";
System.out.println("\nSEBELUM DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
Arrays.sort(animals,0,4);
System.out.println("\nSETELAH DISORTING");
for (int i = 0; i < 4; i++) {
System.out.println("animal " + i + " : " + animals[i]);
}
}
}

Output :
SEBELUM DISORTING
animal 0 : snake
animal 1 : kangaroo
animal 2 : wombat
animal 3 : bird
SETELAH DISORTING
animal 0 : bird
animal 1 : kangaroo
animal 2 : snake
animal 3 : wombat

Terdapat data String yang tersimpan dalam ArrayList, untuk mengurutkan data
menggunakan Collections.sort()
import java.util.ArrayList;
import java.util.Collections;
public class SortList {
public static void main(String args[]){
ArrayList insects = new ArrayList();
insects.add("mosquito");
insects.add("butterfly");
insects.add("dragonfly");
insects.add("fly");
System.out.println("\nSEBELUM DISORTING");
int size = insects.size();
for (int i = 0; i < size; i++) {
System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
Collections.sort(insects);
System.out.println("\nSETELAH DISORTING");

198

for (int i = 0; i < size; i++) {


System.out.println("insect " + i + " : " + (String)
insects.get(i));
}
}
}

Output :
SEBELUM DISORTING
insect 0 : mosquito
insect 1 : butterfly
insect 2 : dragonfly
insect 3 : fly
SETELAH DISORTING
insect 0 : butterfly
insect 1 : dragonfly
insect 2 : fly
insect 3 : mosquito

B.2 Mengurutkan Objek Yang Kita Definisikan Sendiri


Kita buat class Mahasiswa yang terdapat informasi nama dan nrp dengan tipe String.
Terdapat beberapa data mahasiswa yang disimpan di array, selanjutnya kita urutkan
berdasarkan nrp.
public class Mahasiswa {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {
this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override

199

public String toString() {


return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}
}

Buatlah class TestMahasiswa untuk menampilkan output :


import java.util.Arrays;
public class TestMahasiswa {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs);
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Output :
Exception in thread "main" java.lang.ClassCastException: prak.Mahasiswa
cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Arrays.java:1144)
at java.util.Arrays.sort(Arrays.java:1079)
at prak.TestMahasiswa.main(TestMahasiswa.java:16)
Java Result: 1

Pada output program terjadi exception. Mengapa? Karena untuk mengurutkan objek
(proses mengurutkan ini dilakukan dengan cara membandingkan satu objek dengan objek
yang lain), maka objek tersebut harus mengimplementasikan interface Comparable.
Dengan mengimplementasikan interface Comparable pada sebuah class, menyebabkan
object-object tersebut bisa dibandingkan (comparable).
Kalau pada percobaan sebelumnya data yang diurutkan adalah String, dapat diurutkan
karena String mengimplementasikan interface Comparable.
public final class String extends Object implements Serializable,
Comparable<String>, CharSequence

Interface ini mempunyai sebuah method compareTo() yang menentukan bagaimana


cara membandingkan antara dua object dari class tersebut.
200

Bentuk methodnya:
public int compareTo(Object o)
Mehod compareTo() menerima Object, sehingga kita bisa memasukkan sembarang
object, tapi harus mempunyai tipe yang sama. Kalau object yang kita masukkan adalah
object yang berbeda maka melemparkan exception java.lang.ClassCastException. Return
value dari method compareTo()

0 jika dua object yang dibandingkan sama.

Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2

Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2

Bagaimana caranya supaya bisa menggunakan Array.sort() pada contoh kasus diatas.
Pada

class

Mahasiswa

implementasikan

interface

Comparable,

berarti

harus

mengimplementasikan method compareTo(). Isilah method ini dengan tujuan untuk


membandingkan object dari class Mahasiswa berdasarkan umur. Jangan lupa untuk
mengcasting object menjadi object dari class Mahasiswa terlebih dahulu.
public class Mahasiswa implements Comparable {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {
this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override
public String toString() {
return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}

201

public int compareTo(Object o) {


Mahasiswa m2 = (Mahasiswa) o ;
return this.nrp.compareTo(m2.nrp);
}
}

Selanjutnya jalankan class TestMahasiswa lagi.


Output :
SEBELUM SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita},
Mahasiswa{nrp=02 nama=Tika}]
SESUDAH SORTING
[Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=02 nama=Tika},
Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=05 nama=Cahya}]

B.3 Penggunaan Class Comparator


Dengan mengimplementasikan interface Comparable kita hanya bisa menentukan satu
cara saja untuk membandingkan object-object dari class Mahasiswa, untuk contoh
sebelumnya, yang kita bandingkan berdasarkan nrp. Bagaimana jika object-object dari
class Mahasiswa diurutkan berdasarkan nama? Berarti object-object tersebut
dibandingkan berdasarkan nama. Kita masih memerlukan satu cara lagi untuk
membandingkan object-object dari class Mahasiswa. Kita memerlukan comparator.
Untuk membuat comparator, buat class yang mengimplementasikan interface
java.util.Comparator, dan method compare().
public int compare(Object o1, Object o2)
Return value dari method compare()

0 jika dua object yang dibandingkan sama.

Bilangan positif, jika object 1 lebih besar dibandingkan dengan object 2

Bilangan negatif, jika object 1 lebih kecil dibandingkan dengan object 2

Class Comparator
public class NamaComparator implements Comparator {
public int compare(Object o1, Object o2) {
Mahasiswa m1 = (Mahasiswa) o1;

202

Mahasiswa m2 = (Mahasiswa) o2;


return m1.getNama().compareTo(m2.getNama());
}
}

Penggunaan objek Comparator pada Arrays.sort()


public class TestMahasiswa2 {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs, new NamaComparator());
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Output : Mengurutkan Data Mahasiswa berdasarkan Nama


SEBELUM SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=01 nama=Endah}, Mahasiswa{nrp=03 nama=Rita},
Mahasiswa{nrp=02 nama=Tika}]
SESUDAH SORTING
[Mahasiswa{nrp=05 nama=Cahya}, Mahasiswa{nrp=01 nama=Endah},
Mahasiswa{nrp=03 nama=Rita}, Mahasiswa{nrp=04 nama=Rudi},
Mahasiswa{nrp=02 nama=Tika}]

C. TUGAS PENDAHULUAN
Buatlah resume 1 halaman mengenai kegunaan interface Comparator, dan 1 contoh
penggunaan dari interface Comparator.

D. PERCOBAAN
Percobaan 1 : Mengurutkan data secara descending, data tersimpan di ArrayList
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class SortArrayListInDescendingOrderExample {


public static void main(String[] args) {

203

//create an ArrayList object


ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add("A");
arrayList.add("B");
arrayList.add("C");
arrayList.add("D");
arrayList.add("E");
Comparator comparator = Collections.reverseOrder();
System.out.println("Before sorting ArrayList in descending order :
"
+
arrayList);
Collections.sort(arrayList,comparator);
System.out.println("After sorting ArrayList in descending order : "
+
arrayList);
}
}

Percobaan 2 : Membuat sendiri class yang akan diurutkan dan membuat objek
Comparator.
import java.util.*;

class Employee{
private int age;
private String name;
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}

class AgeComparator implements Comparator{


public int compare(Object emp1, Object emp2){

204

int emp1Age = ((Employee)emp1).getAge();


int emp2Age = ((Employee)emp2).getAge();
if(emp1Age > emp2Age)
return 1;
else if(emp1Age < emp2Age)
return -1;
else
return 0;
}
}

class NameComparator implements Comparator{


public int compare(Object emp1, Object emp2){
//parameter are of type Object, so we have to downcast it to
Employee objects
String emp1Name = ((Employee)emp1).getName();
String emp2Name = ((Employee)emp2).getName();
//uses compareTo method of String class to compare names of the
employee
return emp1Name.compareTo(emp2Name);
}
}

public class JavaComparatorExample{


public static void main(String args[]){
//Employee array which will hold employees
Employee employee[] = new Employee[2];
//set different attributes of the individual employee.
employee[0] = new Employee();
employee[0].setAge(40);
employee[0].setName("Joe");
employee[1] = new Employee();
employee[1].setAge(20);
employee[1].setName("Mark");
System.out.println("Order of employee before sorting is");
//print array as is.
for(int i=0; i < employee.length; i++){
System.out.println( "Employee " + (i+1) + " name :: " +
employee[i].getName() + ", Age :: " + employee[i].getAge());
}

//Sorting array on the basis of employee age by passing


AgeComparator

Arrays.sort(employee, new AgeComparator());

205

System.out.println("\n\nOrder of employee after sorting by


employee age is");
for(int i=0; i < employee.length; i++){
System.out.println( "Employee " + (i+1) + " name :: " +
employee[i].getName() + ", Age :: " + employee[i].getAge());
}
//Sorting array on the basis of employee Name by passing
NameComparator

Arrays.sort(employee, new NameComparator());


System.out.println("\n\nOrder of employee after sorting by
employee name is");
for(int i=0; i < employee.length; i++){
System.out.println( "Employee " + (i+1) + " name :: " +
employee[i].getName() + ", Age :: " + employee[i].getAge());
}
}
}

Percobaan 3 : Membuat class Mahasiswa dengan variabel nama dan nrp dengan
tipe String. Membuat data mahasiswa yang tersimpan di array. Selanjutnya
lakukan pengurutan data mahasiswa tersebut, apa yang terjadi? Jelaskan!
public class Mahasiswa {
private String nrp ;
private String nama ;
public Mahasiswa(String nrp, String nama) {
this.nrp = nrp;
this.nama = nama;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNrp() {
return nrp;
}
public void setNrp(String nrp) {
this.nrp = nrp;
}
@Override

206

public String toString() {


return "Mahasiswa{" + "nrp=" + nrp + " nama=" + nama + '}';
}
}

import java.util.Arrays;
public class TestMahasiswa {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));

Arrays.sort(dataMhs);
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

Percobaan 4 : Mengurutkan data mahasiswa berdasarkan nama, dengan


mengimplementasikan interface Comparator.
Class Comparator
public class NamaComparator implements Comparator {
public int compare(Object o1, Object o2) {
Mahasiswa m1 = (Mahasiswa) o1;
Mahasiswa m2 = (Mahasiswa) o2;
return m1.getNama().compareTo(m2.getNama());
}
}

Penggunaan objek Comparator pada Arrays.sort()


public class TestMahasiswa2 {
public static void main(String[] args) {
Mahasiswa dataMhs[] = {new Mahasiswa("05", "Cahya"),new
Mahasiswa("04", "Rudi"),
new Mahasiswa("01", "Endah"),new Mahasiswa("03", "Rita"),new
Mahasiswa("02", "Tika")};
System.out.println("SEBELUM SORTING");
System.out.println(Arrays.toString(dataMhs));
Arrays.sort(dataMhs, new NamaComparator());
System.out.println("\nSESUDAH SORTING");
System.out.println(Arrays.toString(dataMhs));
}
}

207

Percobaan 5 : Membuat sendiri class yang akan diurutkan dan membuat objek
Comparator. Mengurutkan objek secara descending.
import
import
import
import
import

java.util.ArrayList;
java.util.Arrays;
java.util.Collections;
java.util.Comparator;
java.util.List;

public class EmpComparator implements Comparator {


public int compare(Object obj1, Object obj2) {
Person emp1 = (Person) obj1;
Person emp2 = (Person) obj2;
int nameComp = emp1.getFirstName().compareTo(emp2.getFirstName());
return ((nameComp == 0) ? emp1.getLastName().compareTo(
emp2.getLastName()) : nameComp);
}

public static void main(String args[]) {


String names[] = { "Bart", "Hugo", "Lisa", "Marge", "Homer",
"Maggie",
"Roy" };
// Convert to list
List list = new ArrayList(Arrays.asList(names));
// Ensure list sorted

Collections.sort(list);
System.out.println("Sorted list: [length: " + list.size() + "]");
System.out.println(list);
// Search for element in list

int index = Collections.binarySearch(list, "Maggie");


System.out.println("Found Maggie @ " + index);
// Search for element not in list

index = Collections.binarySearch(list, "Jimbo Jones");


System.out.println("Didn't find Jimbo Jones @ " + index);
// Insert
int newIndex = -index - 1;
list.add(newIndex, "Jimbo Jones");
System.out.println("With Jimbo Jones added: [length: " +
list.size()
+ "]");
System.out.println(list);
// Min should be Bart

System.out.println(Collections.min(list));
// Max should be Roy

System.out.println(Collections.max(list));

208

Comparator comp = Collections.reverseOrder();


// Reversed Min should be Roy

System.out.println(Collections.min(list, comp));
// Reversed Max should be Bart

System.out.println(Collections.max(list, comp));
}
}

class Person implements Comparable {


String firstName, lastName;
public Person(String f, String l) {
this.firstName = f;
this.lastName = l;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return "[ name=" + firstName + ",name=" + lastName + "]";
}

public int compareTo(Object obj) {


Person emp = (Person) obj;
int deptComp = firstName.compareTo(emp.getFirstName());
return ((deptComp == 0) ? lastName.compareTo(emp.getLastName())
: deptComp);
}
public boolean equals(Object obj) {
if (!(obj instanceof Person)) {
return false;
}
Person emp = (Person) obj;
return firstName.equals(emp.getFirstName())
&& lastName.equals(emp.getLastName());
}
}

E. LATIHAN

209

Latihan 1 : Kembangkan untuk Class Mahasiswa dengan memberikan variabel baru


berupa nilai IPK (double), selanjutkan lakukan pengurutan data Mahasiswa berdasarkan
nrp, nama dan nilai IPK (menggunakan Comparator).

Latihan 2 : Pada Supermarket Buah, terdapat beberapa macam buah dan informasi stock
dari buah tersebut. Terdapat menu penjualan (supermarket ke konsumen) dan pembelian
(supermarket ke pemasok) (menggunakan Comparator)

F. TUGAS
Tugas 1 : Ubahlah contoh FindDups di bawah ini menggunakan SortedSet untuk
menggantikan Set. Definisikan Comparator, sehingga pada saat melakukan sorting
berlaku non- case sensitive.
import java.util.*;
public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
if (!s.add(a))
System.out.println("Duplicate detected: " + a);
System.out.println(s.size() + " distinct words: " + s);
}
}

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

210

PRAKTIKUM 23
GENERICS : MEMBUAT CLASS GENERIC,
GENERIC PADA COLLECTION
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep generic
2. Mengetahui cara merubah dari bentuk non generic menjadi generic
3. Memahami generics pada Collection

B. DASAR TEORI
Generics merupakan cara Java dalam melakukan generalisasi terhadap tipe data tanpa
mengurangi kemampuan Java dalam menjaga keamanan penggunaan tipe data.
public class NonGen {
Object ob;
NonGen(Object o) {
ob = o;
}
Object getob() {
return ob;
}
void showType() {
System.out.println("Type of ob is " +
ob.getClass().getName());
}
}

Pada object Box, kita bisa memasukkan sembarang object karena parameter pada method
add() adalah Class Object, tapi pada saat mengambil object tersebut harus diubah
sesuai dengan tipe dari object tersebut.
public class NonGenDemo {
public static void main(String args[]) {
NonGen integerObject;
integerObject = new NonGen(88);
integerObject.showType();
int v = (Integer) integerObject.getob();

211

System.out.println("value: " + v);

NonGen strOb = new NonGen("10");


strOb.showType();
String str = (String) strOb.getob();
System.out.println("value: " + str);
//menyebabkan exception
Integer i = (Integer) strOb.getob();
}
}

Terjadi exception karena pada object strOb dimasukkan object 10 tapi dengan tipe String,
tapi pada saat mengambil object, diubah menjadi tipe Integer. Tipe data tidak sesuai
sehingga menyebabkan terjadinya exception.
Output :
Type of ob is java.lang.Integer
value: 88
Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
Type of ob is java.lang.String
value: Non-Generics Test
at com.NonGenDemo.main(NonGenDemo.java:30)
Java Result: 1

Permasalahan yang muncul dengan penyimpanan objek yang non homogeneous adalah
memerlukan banyak casting. Tidak ada pengecekan pada saat kompile, kesalahan baru
bisa terdeteksi pada saat runtime.

Cara mendeklarasikan Class Generics


Ubah class Box Non Generics menjadi class Box Generic. Pendeklarasian type generics
dengan mengubah public class Box() menjadi public class Box <T>
T biasanya disebut parameter type formal (formal type parameter)
T adalah type parameter yang akan diganti dengan tipe sebenarnya (Type dari T bisa
berupa class, interface atau tipe variabel lainnya).
212

T adalah nama dari type parameter.


public class Gen<T> {
T ob; // declare an object of type T
Gen(T o) {
ob = o;
}
T getob() {
return ob;
}
void showType() {
System.out.println("Type of T is " + ob.getClass().getName());
}
}

public class GenDemo {


public static void main(String args[]) {
Gen<Integer> iOb;
iOb = new Gen<Integer>(88);
iOb.showType();
int v = iOb.getob();
System.out.println("value: " + v);
System.out.println();
Gen<String> strOb = new Gen<String>("Generics Test");
String v2 = strOb.getob();
}
}

Objek iOb adalah objek dari class Generic, menggunakan tipe data Integer, sehingga
pada saat mengambil objek menggunakan fungsi get(), tidak perlu proses casting.

Aturan Penamaan Type Parameter


Nama type parameter biasanya satu huruf dan huruf besar. Jenis nama tipe parameter
yang sering digunakan :

E - Element (biasanya digunakan untuk Collection Framework)

K Key

N Number

T - Type
213

V - Value

S,U,V dll. - 2nd, 3rd, 4th types

Generics pada Method


Pada contoh sebelumnya, kita mendefinisikan type parameter pada level class.
Sebenarnya tipe variable ini juga dapat didefinisikan pada level method.
public class GenericMethodTest {
public static<E> void printArray(E[] inputArray){
for(E element : inputArray)
System.out.printf("%s",element);
System.out.println("");
}
public static void main(String[] args) {
Integer[] intArray = {1,2,3,4,5} ;
Double[] doubleArray = {1.1,2.2,3.3,4.4,5.5};
Character[] charArray = {'J','A','V','A'};
printArray(intArray);
printArray(doubleArray);
printArray(charArray);
}
}

Subtyping
Jika B adalah suatu subtype dari A dan G adalah suatu tipe data generics, maka tidak
berarti G<B> adalah subtype dari G<A>.

Generics pada Collection

List <E> myList ;

E disebut type variabel, variabel yang diganti dengan type. Jika E adalah class, maka kita
bisa melewatkan subclass E. Jika E adalah interface maka kita bisa melewatkan class
yang mengimplementasikan E.
public class ArrayListGenericDemo {
public static void main(String[] args) {
ArrayList<String> data = new ArrayList<String>();
data.add("hello");
data.add("goodbye");
// data.add(new Date()); This won't compile!
}

214

Objek List data bertipe String, sehingga yang bisa dimasukkan hanya bertipe String saja,
jika kita memasukkan objek selain String maka error.

Type parameter yang dibatasi


Jika kita ingin memberikan batasan type yang diperbolehkan untuk dilewatkan ke type
parameter. Contoh method dengan parameter number, hanya menerima object dari class
Number dan subclass. Hal ini yang disebut bounded type parameter.

Cara
<U extends Number>

Jika terdapat interface yang harus diimplementasikan gunakan &


<U extends Number & MyInterface>

Menggunakan ? Wildcard
Jika kita mendeklarasikan sebuah List<aType>, isi List adalah object dengan tipe aType,
maka kita bisa menyimpan di List object dengan tipe :

Object dari aType

Object dari subclass aType, jika aType adalah class

Object dari class yang mengimplementasikan aType, jika aType adalah interface

Sedangkan List<?> berarti semua tipe data bisa masuk, terlalu luas bentuk lain :
List<? extends Number>
List<? extends T>

C. TUGAS PENDAHULUAN
Buatlah review mengenai :

permasalahan pada class non generic

merubah bentuk class non generic menjadi class generic

manfaat dari class generics

generic pada collection.

215

D. PERCOBAAN
Percobaan 1 : Membuat class NonGeneric, membuat objek dan mengambil nilai
dari class NonGeneric
public class NonGen {
Object ob;
NonGen(Object o) {
ob = o;
}
Object getob() {
return ob;
}
void showType() {
System.out.println("Type of ob is " +
ob.getClass().getName());
}
}

public class NonGenDemo {


public static void main(String args[]) {
NonGen integerObject;
integerObject = new NonGen(88);
integerObject.showType();
int v = (Integer) integerObject.getob();
System.out.println("value: " + v);

NonGen strOb = new NonGen("Non-Generics Test");


strOb.showType();
String str = (String) strOb.getob();
System.out.println("value: " + str);
//ini yang menyebabkan excepton
integerObject = strOb;
v = (Integer) integerObject.getob();
}
}

Percobaan 2 : Membuat class NonGeneric, membuat objek dan mengambil nilai


dari class NonGeneric
public class Gen<T> {
T ob; // declare an object of type T
Gen(T o) {
ob = o;

216

}
T getob() {
return ob;
}
void showType() {
System.out.println("Type of T is " + ob.getClass().getName());
}
}

public class GenDemo {


public static void main(String args[]) {
Gen<Integer> iOb;
iOb = new Gen<Integer>(88);
iOb.showType();
int v = iOb.getob();
System.out.println("value: " + v);
System.out.println();
Gen<String> strOb = new Gen<String>("Generics Test");
strOb.showType();
String str = strOb.getob();
System.out.println("value: " + str);
}
}

Percobaan 3 : Class Generic dengan Dua Type Parameter


class TwoGen<T, V> {
T ob1;
V ob2;
TwoGen(T o1, V o2) {
ob1 = o1;
ob2 = o2;
}
void showTypes() {
System.out.println("Type of T is " + ob1.getClass().getName());
System.out.println("Type of V is " + ob2.getClass().getName());
}
T getob1() {
return ob1;
}
V getob2() {

217

return ob2;
}
}

public class TwoGenDemo {


public static void main(String args[]) {
TwoGen<Integer, String> tgObj = new TwoGen<Integer, String>(88,
"Generics");
tgObj.showTypes();
int v = tgObj.getob1();
System.out.println("value: " + v);
String str = tgObj.getob2();
System.out.println("value: " + str);
}
}

Percobaan 4 : Generic pada Method


public class GenericMethodTest {
public static<E> void printArray(E[] inputArray){
for(E element : inputArray)
System.out.printf("%s",element);
System.out.println("");
}
public static void main(String[] args) {
Integer[] intArray = {1,2,3,4,5} ;
Double[] doubleArray = {1.1,2.2,3.3,4.4,5.5};
Character[] charArray = {'J','A','V','A'};
printArray(intArray);
printArray(doubleArray);
printArray(charArray);
}
}

Percobaan 5 : Generic Pada List


public class ArrayListGenericDemo {
public static void main(String[] args) {
ArrayList<String> data = new ArrayList<String>();
data.add("hello");
data.add("goodbye");
// data.add(new Date()); This won't compile!
Iterator<String> it = data.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}

218

Percobaan 6 : Generic pada Map


public class GenericMap {
public static void main(String args[])
{
HashMap<String,Integer> hm = new HashMap<String,Integer>();
hm.put("apel", 20);
hm.put("anggur", 13);
hm.put("jeruk", 5);
}
}

Percobaan 7 : Subtyping
public class GenSubtypingDemo {
public static void main(String args[]) {
Gen<String> gen1 = new Gen("abc");
Gen<Object> gen2 = new Gen("abc");
gen2 = gen1 ; //error pada saat dikompile
}
}

E. LATIHAN
1. Buatlah method generic untuk menghitung banyaknya bilangan prima yang tersimpan
di collection.
Input : [3,5,7,9,12,15,19]
Terdapat 4 bilangan prima.

Alur pengerjaan, dapat mengikuti cara di bawah ini :


public interface UnaryPredicate<T> {
public boolean test(T obj);
}

class PrimePredicate implements UnaryPredicate<Integer> {


public boolean test(Integer i) { //isilah }
}

public final class Algorithm {


public static <T> int countIf(Collection<T> c, UnaryPredicate<T> p) {
int count = 0;
for (T elem : c)
if (p.test(elem))
++count;

219

return count;
}
}

public class Test {


public static void main(String[] args) {
Collection<Integer> ci = Arrays.asList(1, 2, 3, 4);
int count = Algorithm.countIf(ci, new PrimePredicate());
System.out.println("Number of prime integers = " + count);
}
}

2. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan !


public final class Algorithm {
public static T max(T x, T y) {
return x > y ? x : y;
}
}

3. Buatlah method generic untuk menukar posisi dua element yang tersimpan di array
public static <T> void swap(T[] a, int i, int j) {..}

4. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan !


public class Singleton<T> {
public static T getInstance() {
if (instance == null)
instance = new Singleton<T>();
return instance;
}
private static T instance = null;
}

F. TUGAS
Tugas 1 :
Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan !
class Shape { /* ... */ }
class Circle extends Shape { /* ... */ }
class Rectangle extends Shape { /* ... */ }
class Node<T> { /* ... */ }
Node<Circle> nc = new Node<>();
Node<Shape> ns = nc;

220

Tugas 2 :
Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan !
class Node<T> implements Comparable<T> {
public int compareTo(T obj) { /* ... */ }
// ...
}
Node<String> node = new Node<>();
Comparable<String> comp = node;

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

221

PRAKTIKUM 24
GENERICS : BOUNDED TYPE PARAMETER
DAN WILDCARD
A. TUJUAN PEMBELAJARAN
1. Memahami mengenai konsep generic
2. Memahami penggunaan tipe parameter yang dibatasi (Bounded Type Parameter).
3. Memahami penggunaan wildcard

B. DASAR TEORI
Generics merupakan cara Java dalam melakukan generalisasi terhadap tipe data tanpa
mengurangi kemampuan Java dalam menjaga keamanan penggunaan tipe data.
public class NonGen {
Object ob;
NonGen(Object o) {
ob = o;
}
Object getob() {
return ob;
}
void showType() {
System.out.println("Type of ob is " +
ob.getClass().getName());
}
}

Pada object Box, kita bisa memasukkan sembarang object karena parameter pada method
add() adalah Class Object, tapi pada saat mengambil object tersebut harus diubah
sesuai dengan tipe dari object tersebut.
public class NonGenDemo {
public static void main(String args[]) {
NonGen integerObject;
integerObject = new NonGen(88);
integerObject.showType();

222

int v = (Integer) integerObject.getob();


System.out.println("value: " + v);

NonGen strOb = new NonGen("10");


strOb.showType();
String str = (String) strOb.getob();
System.out.println("value: " + str);
//menyebabkan exception
Integer i = (Integer) strOb.getob();
}
}

Terjadi exception karena pada object strOb dimasukkan object 10 tapi dengan tipe String,
tapi pada saat mengambil object, diubah menjadi tipe Integer. Tipe data tidak sesuai
sehingga menyebabkan terjadinya exception.
Output :
Type of ob is java.lang.Integer
value: 88
Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
Type of ob is java.lang.String
value: Non-Generics Test
at com.NonGenDemo.main(NonGenDemo.java:30)
Java Result: 1

Permasalahan yang muncul dengan penyimpanan objek yang non homogeneous adalah
memerlukan banyak casting. Tidak ada pengecekan pada saat kompile, kesalahan baru
bisa terdeteksi pada saat runtime.

Cara mendeklarasikan Class Generics


Ubah class Box Non Generics menjadi class Box Generic. Pendeklarasian type generics
dengan mengubah public class Box() menjadi public class Box <T>
T biasanya disebut parameter type formal (formal type parameter)
223

T adalah type parameter yang akan diganti dengan tipe sebenarnya (Type dari T bisa
berupa class, interface atau tipe variabel lainnya).
T adalah nama dari type parameter.
public class Gen<T> {
T ob; // declare an object of type T
Gen(T o) {
ob = o;
}
T getob() {
return ob;
}
void showType() {
System.out.println("Type of T is " + ob.getClass().getName());
}
}

public class GenDemo {


public static void main(String args[]) {
Gen<Integer> iOb;
iOb = new Gen<Integer>(88);
iOb.showType();
int v = iOb.getob();
System.out.println("value: " + v);
System.out.println();
Gen<String> strOb = new Gen<String>("Generics Test");
String v2 = strOb.getob();
}
}

Objek iOb adalah objek dari class Generic, menggunakan tipe data Integer, sehingga
pada saat mengambil objek menggunakan fungsi get(), tidak perlu proses casting.

Aturan Penamaan Type Parameter


Nama type parameter biasanya satu huruf dan huruf besar. Jenis nama tipe parameter
yang sering digunakan :

E - Element (biasanya digunakan untuk Collection Framework)

K Key
224

N Number

T - Type

V - Value

S,U,V dll. - 2nd, 3rd, 4th types

Generics pada Method


Pada contoh sebelumnya, kita mendefinisikan type parameter pada level class.
Sebenarnya tipe variable ini juga dapat didefinisikan pada level method.
public class GenericMethodTest {
public static<E> void printArray(E[] inputArray){
for(E element : inputArray)
System.out.printf("%s",element);
System.out.println("");
}
public static void main(String[] args) {
Integer[] intArray = {1,2,3,4,5} ;
Double[] doubleArray = {1.1,2.2,3.3,4.4,5.5};
Character[] charArray = {'J','A','V','A'};
printArray(intArray);
printArray(doubleArray);
printArray(charArray);
}
}

Subtyping
Jika B adalah suatu subtype dari A dan G adalah suatu tipe data generics, maka tidak
berarti G<B> adalah subtype dari G<A>.

Generics pada Collection

List <E> myList ;

E disebut type variabel, variabel yang diganti dengan type. Jika E adalah class, maka kita
bisa melewatkan subclass E. Jika E adalah interface maka kita bisa melewatkan class
yang mengimplementasikan E.
public class ArrayListGenericDemo {
public static void main(String[] args) {
ArrayList<String> data = new ArrayList<String>();
data.add("hello");
data.add("goodbye");
// data.add(new Date()); This won't compile!
}

225

Objek List data bertipe String, sehingga yang bisa dimasukkan hanya bertipe String saja,
jika kita memasukkan objek selain String maka error.

Type parameter yang dibatasi


Jika kita ingin memberikan batasan type yang diperbolehkan untuk dilewatkan ke type
parameter. Contoh method dengan parameter number, hanya menerima object dari class
Number dan subclass. Hal ini yang disebut bounded type parameter.

Cara
<U extends Number>

Jika terdapat interface yang harus diimplementasikan gunakan &


<U extends Number & MyInterface>

Menggunakan ? Wildcard
Jika kita mendeklarasikan sebuah List<aType>, isi List adalah object dengan tipe aType,
maka kita bisa menyimpan di List object dengan tipe :

Object dari aType

Object dari subclass aType, jika aType adalah class

Object dari class yang mengimplementasikan aType, jika aType adalah interface

Sedangkan List<?> berarti semua tipe data bisa masuk, terlalu luas bentuk lain :
List<? extends Number>
List<? extends T>

C. TUGAS PENDAHULUAN
Buatlah review mengenai :

Generic dengan type parameter yang dibatasi.

Generic dengan wildcard

D. PERCOBAAN
Percobaan 1 : Type parameter yang dibatasi
class Stats<T extends Number> {

226

T[] nums;
Stats(T[] o) {
nums = o;
}
double average() {
double sum = 0.0;
for (int i = 0; i < nums.length; i++)
sum += nums[i].doubleValue();
return sum / nums.length;
}
}

public class BoundsDemo {


public static void main(String args[]) {
Integer inums[] = { 1, 2, 3, 4, 5 };
Stats<Integer> iob = new Stats<Integer>(inums);
double v = iob.average();
System.out.println("iob average is " + v);
Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Stats<Double> dob = new Stats<Double>(dnums);
double w = dob.average();
System.out.println("dob average is " + w);
}
}

Percobaan 2 : Generic pada konstruktor, dengan type parameter dibatasi.


class GenCons {
private double val;
<T extends Number> GenCons(T arg) {
val = arg.doubleValue();
}
void showval() {
System.out.println("val: " + val);
}
}

public class GenConsDemo {


public static void main(String args[]) {
GenCons test = new GenCons(100);
GenCons test2 = new GenCons(123.5F);
test.showval();
test2.showval();

227

}
}

Percobaan 3 : Menggunakan Interface Comparable Generic


interface MinMax<T extends Comparable<T>> {
T min();
T max();
}
class MyClass<T extends Comparable<T>> implements MinMax<T> {
T[] vals;
MyClass(T[] o) { vals = o; }
public T min() {
T v = vals[0];
for(int i=1; i < vals.length; i++)
if(vals[i].compareTo(v) < 0) v = vals[i];
return v;
}
public T max() {
T v = vals[0];
for(int i=1; i < vals.length; i++)
if(vals[i].compareTo(v) > 0) v = vals[i];
return v;
}
}
public class GenIFDemo {
public static void main(String args[]) {
Integer inums[] = {3, 6, 2, 8, 6 };
Character chs[] = {'b', 'r', 'p', 'w' };
MyClass<Integer> iob = new MyClass<Integer>(inums);
MyClass<Character> cob = new MyClass<Character>(chs);
System.out.println("Max value in inums: " + iob.max());
System.out.println("Min value in inums: " + iob.min());
System.out.println("Max value in chs: " + cob.max());
System.out.println("Min value in chs: " + cob.min());
}
}

Percobaan 4 : Menggunakan Unbounded Wildcard(1)


public class TestGeneric {
public static void printList(List<?> list) {

228

for (Object elem : list) {


System.out.print(elem + " ");
}
System.out.println();
}
public static void main(String[] args) {
List<Integer> li = Arrays.asList(1, 2, 3);
List<String> ls = Arrays.asList("one", "two", "three");
printList(li);
printList(ls);
}
}

Percobaan 5 : Menggunakan Unbounded Wildcard(2)


class Stats<T extends Number> {
T[] nums; // array of Number or subclass
// Pass the constructor a reference to
// an array of type Number or subclass.
Stats(T[] o) {
nums = o;
}
// Return type double in all cases.
double average() {
double sum = 0.0;
for(int i=0; i < nums.length; i++)
sum += nums[i].doubleValue();
return sum / nums.length;
}
// Determine if two averages are the same.
// Notice the use of the wildcard.

boolean sameAvg(Stats<?> ob) {


if(average() == ob.average())
return true;
return false;
}
}
// Demonstrate wildcard.
public class WildCardDemo {
public static void main(String args[]) {
Integer inums[] = { 1, 2, 3, 4, 5 };
Stats<Integer> iob = new Stats<Integer>(inums);
double v = iob.average();
System.out.println("iob average is " + v);
Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Stats<Double> dob = new Stats<Double>(dnums);

229

double w = dob.average();
System.out.println("dob average is " + w);
Float fnums[] = { 1.0F, 2.0F, 3.0F, 4.0F, 5.0F };
Stats<Float> fob = new Stats<Float>(fnums);
double x = fob.average();
System.out.println("fob average is " + x);
// See which arrays have same average.
System.out.print("Averages of iob and dob ");
if(iob.sameAvg(dob))
System.out.println("are the same.");
else
System.out.println("differ.");
System.out.print("Averages of iob and fob ");
if(iob.sameAvg(fob))
System.out.println("are the same.");
else
System.out.println("differ.");
}
}

Percobaan 6 : Menggunakan UpperBound Wildcard(2)


import java.util.Arrays;
import java.util.List;
public class TestGeneric2 {
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list) {
s += n.doubleValue();
}
return s;
}
public static void main(String[] args) {
List<Integer> li = Arrays.asList(1, 2, 3);
System.out.println("sum = " + sumOfList(li));
List<Double> ld = Arrays.asList(1.2, 2.3, 3.5);
System.out.println("sum = " + sumOfList(ld));
}
}

Percobaan 7 : Menggunakan UpperBound Wildcard(2)


class TwoD {
int x, y;
TwoD(int a, int b) {
x = a;
y = b;

230

}
}

// Three-dimensional coordinates.
class ThreeD extends TwoD {
int z;
ThreeD(int a, int b, int c) {
super(a, b);
z = c;
}
}

// Four-dimensional coordinates.
class FourD extends ThreeD {
int t;
FourD(int a, int b, int c, int d) {
super(a, b, c);
t = d;
}
}

// This class holds an array of coordinate objects.


class Coords<T extends TwoD> {
T[] coords;
Coords(T[] o) { coords = o; }
}

// Demonstrate a bounded wildcard.


public class BoundedWildcard {
static void showXY(Coords<?> c) {
System.out.println("X Y Coordinates:");
for(int i=0; i < c.coords.length; i++)
System.out.println(c.coords[i].x + " " +
c.coords[i].y);
System.out.println();
}
static void showXYZ(Coords<? extends ThreeD> c) {
System.out.println("X Y Z Coordinates:");
for(int i=0; i < c.coords.length; i++)
System.out.println(c.coords[i].x + " " +
c.coords[i].y + " " +
c.coords[i].z);
System.out.println();
}
static void showAll(Coords<? extends FourD> c) {
System.out.println("X Y Z T Coordinates:");
for(int i=0; i < c.coords.length; i++)

231

System.out.println(c.coords[i].x + " " +


c.coords[i].y + " " +
c.coords[i].z + " " +
c.coords[i].t);
System.out.println();
}
public static void main(String args[]) {
TwoD td[] = {
new TwoD(0, 0),
new TwoD(7, 9),
new TwoD(18, 4),
new TwoD(-1, -23)
};
Coords<TwoD> tdlocs = new Coords<TwoD>(td);
System.out.println("Contents of tdlocs.");
showXY(tdlocs); // OK, is a TwoD
showXYZ(tdlocs); // Error, not a ThreeD
showAll(tdlocs); // Erorr, not a FourD

//
//

// Now, create some FourD objects.


FourD fd[] = {
new FourD(1, 2, 3, 4),
new FourD(6, 8, 14, 8),
new FourD(22, 9, 4, 9),
new FourD(3, -2, -23, 17)
};
Coords<FourD> fdlocs = new Coords<FourD>(fd);
System.out.println("Contents of fdlocs.");
// These are all OK.
showXY(fdlocs);
showXYZ(fdlocs);
showAll(fdlocs);
}
}

Percobaan 8 : Menggunakan LowerBound Wildcard


public class BoxImpl<T> implements Box<T> {
private T element;
public T get() {
return element;
}
public void put(T element) {
this.element = element;
}
}

232

public class TestBoxKu {


public static void main(String[] args) {
BoxKu<Integer> bIn = new BoxKu<Integer>(7);
BoxKu<Number> bNum = new BoxKu<Number>(10);
System.out.println(bIn.toString());
System.out.println(bNum.toString());
bIn.copyTo(bNum);
System.out.println(bIn.toString());
System.out.println(bNum.toString());
}
}

E. LATIHAN
1. Apakah program di bawah ini dapat dikompile ? Jika tidak, jelaskan !
public static void print(List<? extends Number> list) {
for (Number n : list)
System.out.print(n + " ");
System.out.println();
}

2. Buatlah method generic untuk mencari nilai maksimul pada range [begin, end] dari
list.
public static <T extends Object & Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) {...}

F. TUGAS
Tugas 1 :
Buatlah interface Box seperti dibawah ini! Dan buatlah class BoxImpl yang
mengimplementasikan interface Box.
public interface Box<T> {
public T get();
public void put(T element);
public void put(Box<T> box);
}

public class BoxImpl<T> implements Box<T> {


private T element ;
public T get() {
//isilah
}

233

public void put(T element) {


//isilah
}
public void put(Box<T> box) {
//isilah
}
}

Jelaskan mengapa program di bawah ini error !


public class TestBoxImpl {
public static void main(String[] args) {
Box<Number> nBox = new BoxImpl<Number>();
Box<Integer> iBox = new BoxImpl<Integer>();
nBox.put(iBox);

// ERROR

}
}

Perbaiki interface Box seperti di bawah ini ! Jelaskan mengapa dengan perubahan seperti
ini program yang sebelumnya error menjadi tidak error ?
public interface Box<T> {
public T get();
public void put(T element);
public void put(Box<? extends T> box);
}

Tambahkan pada interface Box method containsSame dan interface


EqualityComparator
public interface Box<T> {
public T get();
public void put(T element);
public void put(Box<? extends T> box);
boolean containsSame(Box<? extends T> other,
EqualityComparator<T> comparator);
public interface EqualityComparator<T> {
public boolean compare(T first, T second);
}
}

Tambahkan pada class TestBoxImpl. Jelaskan mengapa EqualityComparator error ?


public class TestBoxImpl {

234

public static EqualityComparator<T> sameObject = new


EqualityComparator<T>() {
public boolean compare(T o1, T o2) {
return o1 == o2;
}
}
public static void main(String[] args) {
Box<Number> nBox = new BoxImpl<Number>();
Box<Integer> iBox = new BoxImpl<Integer>();
//sebelumnya error menjadi OK
nBox.put(iBox);
boolean b = nBox.containsSame(iBox, sameObject);
}
}

Ubahlah menjadi bentuk seperti di bawah ini ! Jelaskan mengapa method containsSame()
masih error ?
public class TestBoxImpl {
public static EqualityComparator<Object> sameObject = new
EqualityComparator<Object>() {
public boolean compare(Object o1, Object o2) {
return o1 == o2;
}
};
public static void main(String[] args) {
Box<Number> nBox = new BoxImpl<Number>();
Box<Integer> iBox = new BoxImpl<Integer>();
//sebelumnya error menjadi OK
nBox.put(iBox);
boolean b = nBox.containsSame(iBox, sameObject);
}
}

Ubahlah interface Box menjadi seperti di bawah ini ! Ubah pula pada class BoxImpl
public interface Box<T> {
public T get();
public void put(T element);
public void put(Box<? extends T> box);
boolean containsSame(Box<? extends T> other,
EqualityComparator<? super T> comparator);
public interface EqualityComparator<T> {
public boolean compare(T first, T second);

235

}
}

Lakukan cek pada method containsSame() apakah error ? Jelaskan !

G. LAPORAN RESMI
Kerjakan hasil percobaan(D), latihan(E) dan tugas(F) di atas dan tambahkan analisa.

236

PRAKTIKUM 25
INPUT DAN OUTPUT
A. TUJUAN PEMBELAJARAN
1. Memahami konsep Input/Output di Java
2. Mengenal kelas kelas yang berhubungan dengan IO.
3. Mampu membuat program yang menerapkan konsep Input Output.

B. DASAR TEORI
Dalam pemrograman Java, Stream and File bukanlah istilah yang asing didengar. Stream and
File merupakan proses penulisan dan pembacaan data sering yang di sebut dengan proses input
dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau
mendapatkan data dari input.
Penerapan dalam pemrograman java ini selalu melakukan proses input dan output yaitu
memindahkan byte data dari satu system ke system lain. Data yang dibaca dari server yang
mengirim data tidak berbeda dengan membaca data dari sebuah file. Java mengangani I/O secara
berbeda dari bahasa-bahasa pemrograman yang lainnya.
STREAM
Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package
java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device,
dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau
printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau
komputer remote. Dalam Stream ini terdapat proses input dan output sebagai berikut :
1. Input Stream
237

Kelas java.io.InputStream adalah:


public abstract class InputStream
Adapun 2 method utama dari InputStream adalah :
Read
Method ini digunakan untuk membaca stream.
Close
Method ini digunakan untuk menutup koneksi input stream.
Dalam proses Penginputan Stream ini pun terdapat pembagian dalam kelasnya, yaitu :
a) Byte Stream
Merupakan kelas dan interface ini digunakan untuk menangani data biner.
b) Character Stream
Merupakan kelompok kelas ini digunakan untuk menangani proses baca tulis karakter Unicode.
Kelas ini merupakan pengembangan dari kelas Byte Stream sehingga lebih efisien.
Data input dalam Stream ini berfungsi untuk saling melengkapi dengan DataOutputStream,
yaitu untuk mendapatkan data yang telah ditulis.
2. Output Stream
Subclass-subclass dari outputStream adalah :
ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array.
FileOutputStream

: digunakan untuk menulis pada file

FilterOutputStream

:merupakan

superclass

dari

subclass-subclass

seperti

DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream


ObjectOutputStream

: digunakan untuk menuliskan objek pada OutputStream.

PipedOutputStream

: digunakan untuk menjadi output dari PipedInputStream.

Data Output dalam stream ini merupakan class yang menyediakan cara praktis untuk menuliskan
tipe data primitif ke output stream yang lebih mudah digunakan dalam penyelesaian program
dalam java.

238

FILE
File merupakan data yang siap diinput dan diproses dalam Stream yang merupaka data operasi
dalam pemrograman. Keterkaitan antara keduanya, proses Input dan Ouput tetap dilakukan
walau dengan cara yang berbeda, dari subclass maupun method yang digunakan.

File Input Stream dan File Output Stream


FileInputStream digunakan untuk membaca data dari file yang merupakan turunan langsung dari
class InputStream dan FileOutputStream untuk menuliskan data ke file merupakan turunan
langsung dari class OutputStream.
Dalam file pun terdapat subclass subclass dan method, sama halnya dengan Stream, seperti :
1. Class File
Class File merupakan langkah awal dalam mempelajari proses input-output dengan Java, karena
File merupakan objek yang mewakili path, file, atau direktori pada harddisk. Ada tiga cara
membuat objek File, yaitu :
Menggunakan objek string sebagai argumen yang menginformasikan path untuk file atau
direktori.
Menggunakan dua langkah, dimana yang pertama untuk mendefinisikan direktori dan yang
kedua untuk file.
Menggunakan dua argumen, dimana yang pertama adalah argumen string yang
mendefinisikan direktori, dan yang kedua adalah argumen string yang mendefinisikan nama file.
2. File Writer
Di dalam aplikasi web, disamping database, penggunaan file untuk menyimpan data cukup
banyak dilakukan karena kebutuhan penyimpanan data yang sederhana cukup dengan
menggunakan file. File Writer merupakan subclass dari OutputStreamWriter yang merupakan
subclass dari class abstract Writer. Class FileWriter memiliki konstruktor yang umum seperti
berikut :
a) FileWriter ( File objekfile );
b) FileWriter ( String pathkefile );
c) FileWriter ( String pathkefile, boolean append );
3. File Reader

239

File Reader merupakan class yang dapat digunakan untuk membaca file teks. Konstruktor dari
FileReader :
FileReader(File objekfile);
FileReader(String pathkefile);
Method yang digunakan :
Read(char[] array);
Read(char[] array, int offset, int length);

C. TUGAS PENDAHULUAN
Pelajari konsep IO Java pada Java API documentation
D. PERCOBAAN
Percobaan 1: Melihat direktori

240

Percobaan 2 : Menggunakan FileInputStream

241

Percobaan 3 : Contoh menggunakan BufferedInputStream

242

Percobaan 4 : Contoh menggunakan PushbackInputStream

243

Percobaan 5 : Contoh menggunakan Serialization

E. LATIHAN
1. Buat program untuk menghitung jumlah kemunculan suatu karakter missal karakter e
pada text file. Contoh text berikut disimpan pada file example.txt.
244

In Xanadu did Kubla Khan


A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.

F. TUGAS
Buatlah tabel mengenai kelas Input Output Java
G. LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.

245

PRAKTIKUM 26
INPUT DAN OUTPUT 2
A. TUJUAN PEMBELAJARAN
1. Memahami konsep Input dan Output di Java
2. Mengenal kelas kelas yang berhubungan dengan IO.
3. Mampu membuat program yang menerapkan konsep Input Output.

B. DASAR TEORI
Dalam pemrograman Java, Stream and File bukanlah istilah yang asing didengar. Stream and
File merupakan proses penulisan dan pembacaan data sering yang di sebut dengan proses input
dan output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau
mendapatkan data dari input.
Penerapan dalam pemrograman java ini selalu melakukan proses input dan output yaitu
memindahkan byte data dari satu system ke sistem lain. Data yang dibaca dari server yang
mengirim data tidak berbeda dengan membaca data dari sebuah file. Java mengangani I/O secara
berbeda dari bahasa-bahasa pemrograman yang lainnya.
STREAM
Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan package
java.io sebagai package utama. Stream adalah representasi abstrak dari input dan output device,
dimana aliran bytes akan ditransfer seperti file dalam harddisk, file pada sistem remote atau
printer. Kita dapat membaca data dari input stream, yang dapat berupa file, keyboard atau
komputer remote. Dalam Stream ini terdapat proses input dan output sebagai berikut :
1. Input Stream
246

Kelas java.io.InputStream adalah:


public abstract class InputStream
Adapun 2 method utama dari InputStream adalah :
Read
Method ini digunakan untuk membaca stream.
Close
Method ini digunakan untuk menutup koneksi input stream.
Dalam proses Penginputan Stream ini pun terdapat pembagian dalam kelasnya, yaitu :
a) Byte Stream
Merupakan kelas dan interface ini digunakan untuk menangani data biner.
b) Character Stream
Merupakan kelompok kelas ini digunakan untuk menangani proses baca tulis karakter Unicode.
Kelas ini merupakan pengembangan dari kelas Byte Stream sehingga lebih efisien.
Data input dalam Stream ini berfungsi untuk saling melengkapi dengan DataOutputStream,
yaitu untuk mendapatkan data yang telah ditulis.
2. Output Stream
Subclass-subclass dari outputStream adalah :
ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array.
FileOutputStream

: digunakan untuk menulis pada file

FilterOutputStream

:merupakan

superclass

dari

subclass-subclass

seperti

DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream


ObjectOutputStream

: digunakan untuk menuliskan objek pada OutputStream.

PipedOutputStream

: digunakan untuk menjadi output dari PipedInputStream.

Data Output dalam stream ini merupakan class yang menyediakan cara praktis untuk menuliskan
tipe data primitif ke output stream yang lebih mudah digunakan dalam penyelesaian program
dalam java.

247

FILE
File merupakan data yang siap diinput dan diproses dalam Stream yang merupaka data operasi
dalam pemrograman. Keterkaitan antara keduanya, proses Input dan Ouput tetap dilakukan
walau dengan cara yang berbeda, dari subclass maupun method yang digunakan.

File Input Stream dan File Output Stream


FileInputStream digunakan untuk membaca data dari file yang merupakan turunan langsung dari
class InputStream dan FileOutputStream untuk menuliskan data ke file merupakan turunan
langsung dari class OutputStream.
Dalam file pun terdapat subclass subclass dan method, sama halnya dengan Stream, seperti :
1. Class File
Class File merupakan langkah awal dalam mempelajari proses input-output dengan Java, karena
File merupakan objek yang mewakili path, file, atau direktori pada harddisk. Ada tiga cara
membuat objek File, yaitu :
Menggunakan objek string sebagai argumen yang menginformasikan path untuk file atau
direktori.
Menggunakan dua langkah, dimana yang pertama untuk mendefinisikan direktori dan yang
kedua untuk file.
Menggunakan dua argumen, dimana yang pertama adalah argumen string yang
mendefinisikan direktori, dan yang kedua adalah argumen string yang mendefinisikan nama file.
2. File Writer
Di dalam aplikasi web, disamping database, penggunaan file untuk menyimpan data cukup
banyak dilakukan karena kebutuhan penyimpanan data yang sederhana cukup dengan
menggunakan file. File Writer merupakan subclass dari OutputStreamWriter yang merupakan
subclass dari class abstract Writer. Class FileWriter memiliki konstruktor yang umum seperti
berikut :
a) FileWriter ( File objekfile );
b) FileWriter ( String pathkefile );
c) FileWriter ( String pathkefile, boolean append );
3. File Reader

248

File Reader merupakan class yang dapat digunakan untuk membaca file teks. Konstruktor dari
FileReader :
FileReader(File objekfile);
FileReader(String pathkefile);
Method yang digunakan :
Read(char[] array);
Read(char[] array, int offset, int length);

C. TUGAS PENDAHULUAN
Pelajari konsep IO Java pada Java API documentation

249

D. PERCOBAAN
Percobaan 1 : Mencari file dengan ekstensi Tertentu

250

Percobaan 2 : Membaca ukuran file

251

Percobaan 3 : Contoh menggunakan BufferedInputStream

Asumsi menggunakan file dengan nama ihave10lines.txt

252

Percobaan 4 : Membaca file enkode UTF-8

253

Percobaan 5 : Menulis Enkode UTF-8 ke File

254

Percobaan 6 : Mengubah String ke InputStream

Percobaan 7 : Membaca space Harddisk

255

E. LATIHAN
Latihan 1 : Modifikasi program berikut agar dapat di kompile

F. TUGAS
Buatlah tabel mengenai kelas Input Output Java
G. LAPORAN RESMI
Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.

256

PRAKTIKUM 27
ANTAR MUKA GRAFIS
A.

TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI).
2. Mampu membuat program yang menerapkan konsep GUI.
3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI.

B.

DASAR TEORI

Ciri utama dari tampilan model ini adalah seluruh data ditampilkan dalam bentuk teks (text
based). Model tampilan ini memiliki kelemahan yaitu lebih sulit membuat tampilan program
menjadi indah dan menarik, dikarenakan kurangnya dukungan warna. Monitor model teks hanya
mendukung warna sampai 16, berbeda dengan model grafik yang mendukung warna sampai 224
(2 pangkat 24) bahkan bisa lebih, tergantung graphic-card yang digunakan.
Bab ini akan membahas tentang Graphical User Interface (GUI), suatu metode untuk antar-muka
komputer berbasis grafis. GUI digunakan dalam pembuatan program aplikasi dengan
mempertimbangkan dua aspek yaitu keindahan tampilan dan kemudahan penggunaan program.
Keindahan tampilan akan mempengaruhi orang untuk melihat dan merasa senang terhadap
program yang kita buat, dan kemudahan penggunaan program akan berdampak pada ketertarikan
orang untuk terus menggunakan program yang kita buat. Di dunia bisnis, hal ini merupakan
target jangka panjang.
Materi dalam bab ini akan disajikan secara sistematis dan terstruktur, mulai dari pengenalan
objek utama, penambahan objek-objek pendukung (lebih dikenal sebagai komponen) sampai
interaksi komputer dengan user. Untuk melengkapi uraian tentang GUI ini, pada akhir bab kita
membuat sebuah project yang diberi nama Kalkulator Mini". Project ini menyajikan pembuatan
sebuah kalkulator sederhana yang bisa digunakan untuk melakukan proses perhitungan
257

matematika biasa. Beberapa fungsi yang rumit dari kalkulator sesungguhnya tidak dimasukkan
dalam project ini. Anda bisa mengembangkan project ini secara mandiri.
Pembahasan kita mulai class JFrame. Dalam lingkup Java, sebuah interface window dikenal
dengan sebutan frame. Bagi anda yang pernah menggunakan software Delphi (bahasa visual
untuk Pascal) tentu pernah menjumpai komponen TFrame. Perlu diingat bahwa frame dalam
lingkup Delphi berbeda dengan frame dalam lingkup Java. Frame dalam lingkup Java identik
dengan TForm di Delphi atau Form di Visual Basic. Perlu juga diketahui bahwa seluruh
pembahasan pada bab ini mengacu kepada sistem operasi Windows, tepatnya Windows 2000
atau Windows XP. Anda yang menggunakan sistem operasi lain seperti UNIX atau LINUX
mungkin akan melihat beberapa perbedaan tampilan yang tidak mengganggu.
Jika anda membuka program Windows Explorer maka secara tidak sadar anda telah
mengaktifkan sebuah window (atau frame). Frame adalah sebuah objek yang merepresentasikan
suatu area di layar yang berisi sejumlah objek lain untuk menyampaikan informasi kepada user.
Kita bisa menambahkan sejumlah komponen lain ke dalam sebuah framw dengan tujuan yang
sesuai dengan fungsi komponen tersebut.
Sebuah objek yang merupakan instansiasi dari class JFrame bisa dipanggil melalui dua cara,
yaitu:
1. Dipanggil melalui class utama yang mengandung fungsi main().
2. Dipanggil melalui class lain yang merupakan class tersendiri turunan dari JFrame.
Manajemen Pemasangan Komponen
Manajemen pemasangan komponen (layout management) diperlukan untuk mengatur
penempatan komponen di dalam frame agar bisa menghasilkan bentuk interface yang menarik.
Penggunaan layout-manager dalam mengatur letak komponen juga akan memudahkan kita
menempelkan komponen pada frame.
Java menyediakan sejumlah metode dalam mengatur penempelan komponen ke dalam frame.
Pada bagian ini kita hanya akan membahas tiga metode: FlowLayout, GridLayout dan
BorderLayout. Masing-masing metode memiliki keunggulan dan kekurangan dibandingkan
dengan metode yang lain. Hal yang menarik adalah kita tidak harus terpaku pada satu metode
258

dalam mengatur pemasangan komponen; kita boleh mengkombinasikan beberapa metode agar
pemasangan komponen menjadi lebih baik dan mudah.
Method setLayout(LayoutManager) digunakan untuk mengatur jenis metode yang digunakan
pada saat memasang komponen. Method ini bisa kita gunakan pada class JFrame, JPanel dan
Container. Pembahasan selanjutnya akan menunjukkan penggunaan berbagai metode pengaturan
penempelan komponen pada frame.

C.

TUGAS PENDAHULUAN
1. Pelajari layout layout yang bisa digunakan untuk mengatur tata letak komponen,
kemudian buat daftar mengenai layout tersebut, beserta penjelasan dan contoh
tampilannya.

D.

PERCOBAAN

Percobaan 1: Membuat jendela sederhana dengan JFrame


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

import javax.swing.JFrame;
//-------------------------// Definisi class MYFRAME
//-------------------------class MyFrame extends JFrame
{
MyFrame()
{
super ("Contoh frame");
show();
}
}
//--------------// Class utama
//--------------public class JFrame_4
{
public static void main (String[] args)
{
new MyFrame();
}
}

259

Percobaan 2: Menghapus Frame dari Memori


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

import javax.swing.JFrame;
//-------------------------// Definisi class MYFRAME
//-------------------------class MyFrame extends JFrame
{
MyFrame()
{
super ("Contoh frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
show();
}
}
//--------------// Class utama
//--------------public class JFrame_5
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 3: Frame dengan Ukuran Tetap


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

import javax.swing.JFrame;
//-------------------------// Definisi class MYFRAME
//-------------------------class MyFrame extends JFrame
{
MyFrame()
{
super ("Contoh frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setLocation (200,100);
setSize (300,100);
setResizable (false);
show();
}
}
//---------------

260

21
22
23
24
25
26
27
28
29

// Class utama
//--------------public class JFrame_8
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 4: Strategi Tempel Langsung


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

import javax.swing.*;
import java.awt.*;
class MyFrame extends JFrame
{
private Container container = new Container();
private JButton tombol = new JButton ("Tombol");
MyFrame()
{
super ("Strategi 'Tempel-Langsung'");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,80);
setLocation (100,100);
container = getContentPane();
container.add (tombol);
show();
}
}
public class TempelLangsung_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 5: Manajemen Pemasangan Komponen Flowlayout


1
2
3

import javax.swing.*;
import java.awt.*;

261

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

class MyFrame extends JFrame


{
private Container container = new Container();
private JButton tombol = new JButton ("Tombol");
private JLabel tulisan = new JLabel ("Tulisan");
MyFrame()
{
super ("Demo FlowLayout");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,80);
setLocation (100,100);
container = getContentPane();
container.setLayout (new FlowLayout());
container.add (tombol);
container.add (tulisan);
show();
}
}
public class FlowLayout_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 6: Manajemen Pemasangan Komponen Gridlayout


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

import javax.swing.*;
import java.awt.*;
class MyFrame extends JFrame
{
private Container container = new Container();
private JButton tombol = new JButton ("Tombol");
private JLabel tulisan = new JLabel ("Tulisan");
MyFrame()
{
super ("GridLayout 1-baris 2-kolom");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,80);
setLocation (100,100);

262

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

container = getContentPane();
container.setLayout (new GridLayout(1,2));
container.add (tulisan);
container.add (tombol);
show();
}
}
public class GridLayout_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 7: Manajemen Pemasangan Komponen Borderlayout


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

import javax.swing.*;
import java.awt.*;
class MyFrame extends JFrame
{
private Container container = new Container();
private
private
private
private
private

JButton
JButton
JButton
JButton
JButton

tombolUtara = new JButton ("NORTH");


tombolSelatan = new JButton ("SOUTH");
tombolTimur = new JButton ("EAST");
tombolBarat = new JButton ("WEST");
tombolTengah = new JButton ("CENTER");

MyFrame()
{
super ("Demo BorderLayout");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,130);
setLocation (100,100);
container = getContentPane();
container.setLayout (new BorderLayout());
container.add
container.add
container.add
container.add
container.add

(tombolUtara, BorderLayout.NORTH);
(tombolSelatan, BorderLayout.SOUTH);
(tombolTimur, BorderLayout.EAST);
(tombolBarat, BorderLayout.WEST);
(tombolTengah, BorderLayout.CENTER);

show();

263

32
33
34
35
36
37
38
39
40
41

}
}
public class BorderLayout_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 8: Layout Komponen dalam JPanel


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 javax.swing.*;
import java.awt.*;
class MyFrame extends JFrame
{
private Container container = new Container();
private JPanel jPanel = new JPanel();
private JLabel labelUserName =
new JLabel ("User name :");
private JLabel labelPassword =
new JLabel ("Password :");
private JTextField textFieldUserName =
new JTextField ("", 8);
private JTextField textFieldPassword =
new JTextField ("", 8);
private JButton buttonOK = new JButton ("OK");
private JButton buttonCancel = new JButton ("Cancel");
MyFrame()
{
super ("Demo JPanel - Login");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,10);
setLocation (100,100);
jPanel.setLayout (new GridLayout (3,2));
jPanel.add (labelUserName);
jPanel.add (textFieldUserName);
jPanel.add (labelPassword);
jPanel.add (textFieldPassword);
jPanel.add (buttonOK);
jPanel.add (buttonCancel);
container = getContentPane();
container.add (jPanel);

264

35
36
37
38
39
40
41
42
43
44
45

E.

show();
}
}
public class JPanel_2
{
public static void main (String[] args)
{
new MyFrame();
}
}

LATIHAN

Latihan 1: Membuat tampilan HP mini


Buatlah tampilan HP seperti pada gambar berikut :

Latihan 2: Membuat tampilan input data


Buatlah tampilan input data seperti gambar berikut :

265

Latihan 3: Desain user interface sesuai petunjuk pada gambar berikut

Petunjuk : Gantilah JApplet dengan JPanel


F.

TUGAS

Buatlah tampilan kalkulator mini seperti pada gambar berikut :

G.

LAPORAN RESMI

Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.

266

PRAKTIKUM 28
PENANGANAN EVENT
A.

TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI).
2. Mampu membuat program yang menerapkan konsep GUI.
3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI.
4. Mampu membuat program berbasis GUI yang bisa menerima respon user, baik melalui
mouse maupun keyboard.

B.

DASAR TEORI

User bisa berinteraksi dengan program aplikasi melalui sejumlah komponen. Sebagai contoh,
setelah memasukkan data-data yang diperlukan pada proses login, kita menekan sebuah button
untuk memasukkan data-data tersebut ke dalam program. Dalam hal ini objek button tersebut
menerima event click. Tidak hanya objek button yang bisa menerima event. Objek lain seperti
textfield juga bisa menerima event, hanya saja jenis event yang terjadi pada objek textfield
berbeda dengan objek button. Jadi kita harus memahami jenis event apa yang bisa dikenakan
terhadap suatu jenis objek tertentu.
Java menerima event melalui sebuah interface. Setiap komponen yang akan menerima suatu
event harus disetting terlebih dahulu agar terasosiasi dengan event tersebut. Tanpa didahului
dengan proses asosiasi ini, sebuah komponen tidak akan bisa "menangkap" (Java memberi istilah
"mendengar" / listening) suatu event walaupun sesungguhnya bisa. Sebagai contoh, jika kita
memasang sebuah objek button untuk membatalkan suatu proses, sebelum kita mengasosiasi
objek tersebut dengan event yang menangani click mouse maka button tersebut tidak akan

267

memberikan efek pembatalan proses pada saat kita melakukan proses click tombol mouse di
atasnya.
Bagian ini membahas tentang bagaimana proses interaksi antara user dan program melalui
sejumlah komponen dapat terjadi. Dari sejumlah interface untuk menangani event yang
disediakan oleh Java, kita akan membahas 4 (empat) saja yang kami rasa mudah dimengerti
sebagai pengantar untuk memahami interface-interface yang lain. Keempat interface tersebut
adalah:
1. Interface ActionListener
2. Interface MouseListener
3. Interface MouseMotionListener
4. Interface KeyListener
Interface pertama akan menangkap event yang ditimbulkan oleh mouse dan keyboard, interface
kedua dan ketiga akan menangkap event yang ditimbulkan oleh mouse dan interface keempat
akan menangkap event yang ditimbulkan oleh keyboard. Mouse dan keyboard adalah dua piranti
yang sudah sangat umum digunakan pada komputer masa kini.
Bentuk umum penggunaan interface adalah:
[public|private] class NamaClass
[extends BaseClass]
[implements NamaInterface]
{
isi class
}

Implementasi sebuah interface mengharuskan kita memasukkan sejumlah method yang akan
digunakan untuk melakukan suatu proses dalam interface tersebut. Pada bagian selanjutnya anda
akan menjumpai method apa saja yang harus disediakan jika kita mengimplementasikan suatu
interface.
Interface ActionListener
Interface ActionListener berguna untuk menerima event yang ditimbulkan oleh mouse atau
keyboard. Pada prakteknya interface ini akan memeriksa objek yang terkena event, tidak perduli
alat mana yang menimbulkan event tersebut. Sebuah objek button misalnya, mungkin akan
268

mengalami event click dari mouse atau event enter dari keyboard, yang jelas keduanya
merupakan event dari button. Button inilah yang diperiksa oleh ActionListener.
Class yang mengimlementasikan interface ActionPerformed harus mengandung method bernama
actionPerformed(ActionEvent) sekalipun di dalamnya tidak ada instruksi apa pun. Kita bisa
memeriksa objek yang menimbulkan event di dalam method ini.
Seperti telah dijelaskan di depan, agar sebuah objek bisa "mendengar" terjadinya event, objek
tersebut harus diasosiasikan dengan interface yang berhubungan dengan event tersebut. Java
menyediakan method addActionListener(ActionListener) untuk mengasosiasikan sebuah objek
dengan interface ActionListener. Method ini membutuhkan parameter berupa class yang
mengimplementasikan interface ActionListener. Jika class tersebut merupakan class yang sama
dengan tempat objek dimaksud, maka parameter ini cukup diberi nilai this.
Interface MouseListener
Interface MouseListener digunakan untuk menangkap event yang diakibatkan oleh mouse. Event
yang dibangkitkan oleh keyboard tidak akan memberi efek, kecuali kita menggunakan interface
ActionListener bersamaan dengan interface MouseListener. Dan sebenarnya anda boleh
menggunakan sejumlah interface sesuai keperluan, tidak terbatas harus satu interface saja.
Objek yang akan mendengar event dari MouseListener diasosiasikan menggunakan method
addMouseListener(MouseListener). Class yang mengimplementasikan interface MouseListener
harus menyediakan 5 (lima) method, walaupun tidak ada isinya. Kelima method tersebut adalah:
1. Method mouseClicked(MouseEvent), dipanggil pada saat tombol mouse ditekan lalu
dilepas.
2. Method mouseEntered(MouseEvent), dipanggil pada saat kursor mouse memasuki area
komponen.
3. Method mouseExited(MouseEvent), dipanggil pada saat kursor mouse meninggalkan
area komponen.
4. Method mousePressed(MouseEvent), dipanggil pada saat tombol mouse ditekan.
5. Method mouseReleased(MouseEvent), dipanggil pada saat tombol mouse dilepas.
Kita bisa katakan bahwa method mouseClicked(MouseEvent) merupakan perpaduan antara
mousePressed(MouseEvent) dan mouseReleased(MouseEvent). Berbagai method pada class
269

MouseEvent bisa kita gunakan dalam proses event mouse ini, misalnya mendeteksi posisi kursor
mouse saat ini.
Interface MouseMotionListener
Java menyediakan interface MouseMotionListener untuk mendukung MouseListener. Interface
MouseMotionListener menyediakan dua method yang akan memantau pergerakan mouse yaitu
mouseDragged(MouseEvent) dan mouseMoved(MouseEvent).

Method mouseDragged(MouseEvent) digunakan untuk memantau pergerakan mouse


yang melintasi objek pada saat tombol mouse ditekan. Tindakan ini persis sama dengan
tindakan kita pada saat memindahkan sebuah window.

Method mouseMoved(MouseEvent) digunakan untuk memantau pergerakan mouse pada


saat mouse melintasi area suatu objek. Pada saat ini tidak ada tombol mouse yang
ditekan; kita hanya memindahkan pointer mouse melalui objek.

Berikut ini urutan method yang dieksekusi setelah event mouse ditangkap, diasumsikan kita
melibatkan interface MouseListener dan MouseMotionListener.
1. Method mouseEntered(MouseEvent) : dijalankan pada saat pointer mouse digerakkan
memasuki area objek.
2. Method mouseMoved(MouseEvent) : dijalankan pada saat pointer mouse digerakkan
melintasi objek dalam kondisi tidak ada tombol mouse yang ditekan.
3. Method mousePressed(MouseEvent) : dijalankan pada saat tombol mouse ditekan.
4. Method mouseDragged(MouseEvent) : dijalankan pada saat pointer mouse digeser
melintasi objek sambil tombol mouse ditekan.
5. Method mouseClicked(MouseEvent) : dijalankan pada saat tombol mouse dilepas setelah
ditekan dengan rentang waktu yang tidak terlalu lama.
6. Method mouseReleased(MouseEvent) : dijalankan pada saat tombol mouse dilepas.
7. Method mouseExited(MouseEvent)

: dijalankan pada saat pointer mouse

meninggalkan area objek. Setelah pointer mouse berada di luar objek, segala macam
event mouse tidak diperhatikan lagi, sampai pointer mouse memasuki area objek.

270

Interface KeyListener
Setelah mengetahui cara menghandle event yang dibangkitkan oleh piranti mouse, sekarang kita
akan membahas bagaimana caranya menghandle event yang dibangkitkan oleh piranti keyboard.
Interface KeyListener disediakan untuk menangani event yang terjadi akibat tindakan dari
keyboard, misalnya jika terjadi penekanan tombol ENTER atau ESCAPE.
Interface KeyListener mengharuskan kehadiran tiga method:

Method keyPressed(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard


ditekan.

Method keyReleased(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard


dilepas.

Method keyTyped(KeyEvent) : akan dijalankan pada saat sebuah tombol keyboard


ditekan dan dilepas dengan selisih waktu yang singkat.

C.

TUGAS PENDAHULUAN
1. Pelajari event event handling yang berhubungan dengan User Interface, kemudian
buatlah ringkasan kelas/interface event handling tersebut beserta kegunaannya.

D.

PERCOBAAN

Percobaan 1: Membuat program meneba k angka


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyFrame extends JFrame implements ActionListener
{
private Container container = new Container();
private Button tombolCek = new Button ("Cek");
private TextField inputan = new TextField ("", 8);
private int angkaAcak = (int)(Math.random()*10);
MyFrame()
{
super ("Tebak angka");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (200,65);

271

18
19
20
21
22
23
24

setLocation (100,100);
tombolCek.addActionListener (this);
container = getContentPane();
container.setLayout (new BorderLayout());
container.add (new JLabel("Tebak angka antara 0-9"),
BorderLayout.NORTH);
container.add (new JLabel ("Tebakan anda :"),
BorderLayout.WEST);
container.add (inputan, BorderLayout.CENTER);
container.add (tombolCek, BorderLayout.EAST);

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

show();
}
public void actionPerformed (ActionEvent e)
{
Object objek = e.getSource();
if (objek == tombolCek)
{
int jawaban = Integer.parseInt(inputan.getText());
if (jawaban == angkaAcak)
JOptionPane.showMessageDialog (null,
"Benar.. Anda memang peramal jitu");
else
JOptionPane.showMessageDialog (null,
"Jawaban anda salah..");

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

}
}
}
// ------------// Class utama
// ------------public class ActionListener_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 2: Membuat program dengan event mouselistener


1
2
3
4

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

272

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58

class MyFrame extends JFrame implements MouseListener


{
private Container container = new Container();
private JLabel labelClicked = new JLabel ("");
private JLabel labelEntered = new JLabel ("");
private JLabel labelExited = new JLabel ("");
private JLabel labelPressed = new JLabel ("");
private JLabel labelReleased = new JLabel ("");
MyFrame()
{
super ("Test MouseListener");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (220,150);
setLocation (100,100);
// --------------------------------------------// mengasosiasi seluruh objek dg event-handler
// --------------------------------------------labelClicked.addMouseListener (this);
labelEntered.addMouseListener (this);
labelExited.addMouseListener (this);
labelPressed.addMouseListener (this);
labelReleased.addMouseListener (this);
// -----------------------------// penambahan komponen ke frame
// -----------------------------container = getContentPane();
container.setLayout (new GridLayout (5,2));
container.add (new JLabel ("mouseClicked :"));
container.add (labelClicked);
container.add (new JLabel ("mouseEntered :"));
container.add (labelEntered);
container.add (new JLabel ("mouseExited :"));
container.add (labelExited);
container.add (new JLabel ("mousePressed :"));
container.add (labelPressed);
container.add (new JLabel ("mouseReleased :"));
container.add (labelReleased);
show();
}
public void mouseClicked (MouseEvent e)
{
labelClicked.setText ("AKTIF");
labelEntered.setText ("");
labelExited.setText ("");
labelPressed.setText ("");
labelReleased.setText ("");
}

273

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

public void mouseEntered (MouseEvent e)


{
labelClicked.setText ("");
labelEntered.setText ("AKTIF");
labelExited.setText ("");
labelPressed.setText ("");
labelReleased.setText ("");
}
public void mouseExited (MouseEvent e)
{
labelClicked.setText ("");
labelEntered.setText ("");
labelExited.setText ("AKTIF");
labelPressed.setText ("");
labelReleased.setText ("");
}
public void mousePressed (MouseEvent e)
{
labelClicked.setText ("");
labelEntered.setText ("");
labelExited.setText ("");
labelPressed.setText ("AKTIF");
labelReleased.setText ("");
}
public void mouseReleased (MouseEvent e)
{
labelClicked.setText ("");
labelEntered.setText ("");
labelExited.setText ("");
labelPressed.setText ("");
labelReleased.setText ("AKTIF");
}
}
// ------------// Class utama
// ------------public class MouseListener_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 3: Memantau kondisi mouse dan menerima event pada saat mouse digerakkan
1

import javax.swing.*;

274

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
45
46
47
48
49
50
51
52
53
54

import java.awt.*;
import java.awt.event.*;
class MyFrame extends JFrame
implements MouseMotionListener
{
private Container container = new Container();
private JLabel labelDragged = new JLabel ("");
private JLabel labelMoved = new JLabel ("");
MyFrame()
{
super ("Test MouseListener");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,80);
setLocation (100,100);
// --------------------------------------------// mengasosiasi seluruh objek dg event-handler
// --------------------------------------------labelDragged.addMouseMotionListener (this);
labelMoved.addMouseMotionListener (this);
// -----------------------------// penambahan komponen ke frame
// -----------------------------container = getContentPane();
container.setLayout (new GridLayout (2,2));
container.add (new JLabel ("mouseDragged :"));
container.add (labelDragged);
container.add (new JLabel ("mouseMoved :"));
container.add (labelMoved);
show();
}
public void mouseDragged (MouseEvent e)
{
labelDragged.setText ("AKTIF");
labelMoved.setText ("");
}
public void mouseMoved (MouseEvent e)
{
labelDragged.setText ("");
labelMoved.setText ("AKTIF");
}
}
// ------------// Class utama
// ------------public class MouseMotionListener_1

275

55
56
57
58
59
60

{
public static void main (String[] args)
{
new MyFrame();
}
}

Percobaan 4: Mendeteksi penekanan tombol ENTER pada sebuah objek textfield


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

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyFrame extends JFrame implements KeyListener
{
private Container container = new Container();
private JTextField textField = new JTextField ("", 8);
MyFrame()
{
super ("Tebak angka");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (250,150);
setLocation (100,100);
// --------------------------------------------// mengasosiasi seluruh objek dg event-handler
// --------------------------------------------textField.addKeyListener (this);
// -----------------------------// penambahan komponen ke frame
// -----------------------------container = getContentPane();
container.setLayout (new GridLayout (3,1));
container.add (new JPanel());
container.add (textField);
container.add (new JPanel());
show();
}
public void keyTyped (KeyEvent e)
{
if (e.getKeyCode() == e.VK_ENTER)
textField.setText("ENTER ->> ditekan + dilepas");
}
public void keyPressed (KeyEvent e)
{

276

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

E.

if (e.getKeyCode() == e.VK_ENTER)
textField.setText ("Tombol ENTER ->> ditekan");
}
public void keyReleased (KeyEvent e)
{
if (e.getKeyCode() == e.VK_ENTER)
textField.setText ("Tombol ENTER ->> dilepas");
}
}
// ------------// Class utama
// ------------public class KeyListener_1
{
public static void main (String[] args)
{
new MyFrame();
}
}

LATIHAN

Latihan 1: Membuat tampilan input data dan menampilkan hasil input ketika ditekan OK

277

Latihan 2 : Buat Tampilan dan event handling yang sesuai, seperti pada gambar

Latihan 3: Modifikasi latihan 2 untuk pembelian tiket online pada konser music
F.

LAPORAN RESMI

Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.

278

PRAKTIKUM 29
GUI: KALKULATOR MINI
A.

TUJUAN PEMBELAJARAN
1. Memahami konsep Graphical User Interface (GUI).
2. Mampu membuat program yang menerapkan konsep GUI.
3. Mampu membuat program berbasis GUI yang melibatkan penggunaan komponen GUI.
4. Mampu membuat program berbasis GUI yang bisa menerima respon user, baik melalui
mouse maupun keyboard.

B.

DASAR TEORI

Project

ini

kami

beri

nama

Kalkulator

Mini,

sebuah

project

sederhana

yang

mengimplementasikan teori GUI di Java. Dari namanya sudah bisa ditebak kegiatan utama dari
project ini adalah membuat sebuah program aplikasi yang mensimulasikan sebuah kalkulator
dengan kemampuan yang sangat minim. Kalkulator ini didesain untuk bisa menangani beberapa
operasi matematika biasa, meliputi penjumlahan, pengurangan, perkalian, pembagian dan
perpangkatan. Karena buku ini tidak didesain sebagai buku acuan tentang materi Struktur Data,
maka teknik yang digunakan untuk menangani proses matematika tersebut tidak terlalu rumit.
Program akan menerima tiga inputan :

Data pertama berupa data numerik yang bertindak sebagai data pertama yang akan
diproses.

Data kedua berupa data karakter yang menyatakan jenis proses yang akan dilakukan.

Data ketiga berupa data numerik menyatakan data kedua yang akan diproses.

Seluruh data inputan tersebut diberikan melalui pengaktifan sejumlah objek button yang tersedia
di layar. Kita tidak melakuan pengetikan, misalnya angka, untuk memasukkan data numerik,
279

sehingga objek textfield yang digunakan kita pasifkan. Method setEnabled(boolean) digunakan
secara luas untuk tujuan mempasifkan suatu objek agar tidak bisa diakses.
Desain Tampilan
Kalkulator ini hanya memiliki 5 (lima) button untuk lima proses matematika, yaitu "+", "-", "*",
"/" dan "^". Sebagai tambahan, sebuah objek berjenis JCheckBox disediakan untuk mengatur
penggunaan karakter pemisah ribuan
Area tampilan
Pemisah ribuan
Hapus
Batal
7
8
4
5
1
2
0
.
Area informasi

Ulang
9
6
3
=

^
*
/
+
Exit

Berikut ini keterangan setiap item pada desain tampilan tersebut:

"Area tampilan" merupakan objek berjenis JTextField, tempat dimana angka-angka yang diclick akan ditampilkan. Area ini juga digunakan sebagai tempat untuk menampilkan hasil
proses.

"Pemisah ribuan" merupakan objek berjenis JCheckBox yang digunakan sebagai flag atau
tanda apakah kita akan menggunakan pemisah ribuan atau tidak. Untuk deretan angka yang
cukup banyak, penggunaan pemisah ribuan akan sangat membantu kita membaca data yang
tersaji.

"Hapus" merupakan sebuah objek berjenis JButton yang digunakan untuk menghapus data
yang sedang terlihat di layar satu karakter demi satu karakter dari belakang.

"Batal" merupakan sebuah objek berjenis JButton yang digunakan untuk membatalkan data
yang kali dimasukkan terakhir. Jika button ini di-click pada saat kita memasukkan data
kedua, maka data kedua akan dibatalkan sedangkan data pertama tetap dianggap valid.

"Ulang" merupakan sebuah objek berjenis JButton yang digunakan untuk membatalkan
seluruh data yang telah dimasukkan. Dalam bagan automata di atas respon dari button ini
sama dengan tindakan "cancel".

"Exit" merupakan sebuah objek berjenis JButton yang digunakan untuk mengakhiri jalannya
program. Window akan ditutup dan kendali dikembalikan ke sistem operasi.
280

".", "0" sampai "9" merupakan objek berjenis JButton yang digunakan untuk memasukkan
data numerik dan tanda pemisah desimal pada bilangan pecahan.

"^", "*", "/", "+" dan "-"

merupakan objek berjenis JButton yang digunakan untuk

menentukan jenis operator yang akan digunakan pada proses matematika.

"=" merupakan objek berjenis JButton yang digunakan untuk memerintahkan komputer
melakukan proses sesuai dengan data-data yang diberikan, lalu menampilkan hasilnya di
"Area tampilan".

"Area informasi" merupakan objek berjenis JLabel yang kita gunakan untuk menampilkan
informasi biasa, misalnya nama kita.

C.

TUGAS PENDAHULUAN
1. Pelajari kelas kelas di Java yang berhubungan dengan User Interfaces. Kemudan
buatlah daftar kelasnya dan fungsi kelas tersebut.

D.

PERCOBAAN

Percobaan 1: Implementasi Kalkulator Mini


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MiniCalculator extends JFrame
implements ActionListener
{
private JPanel panelAtas = new JPanel();
private JPanel panelTengah = new JPanel();
private JPanel panelBawah = new JPanel();
private JTextField tampilan = new JTextField ("");
private JCheckBox pemisahRibuan =
new JCheckBox ("Pemisah ribuan", true);
private Button[] tombolFungsi =
{ new Button ("Hapus"),
new Button ("Ulang"),
new Button ("7"),
new Button ("9"),

new
new
new
new

Button
Button
Button
Button

("Batal"),
("^"),
("8"),
("*"),

281

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
45
46
47
48
49
50
51
52
53
54
55

new
new
new
new
new
new

("4"),
("6"),
("1"),
("3"),
("0"),
("="),

new
new
new
new
new
new

Button
Button
Button
Button
Button
Button

("5"),
("/"),
("2"),
("-"),
("."),
("+") };

private JLabel informasi =


new JLabel (" R.Purnama, 2003");
private Button tombolExit = new Button ("Exit");
private
private
private
private
private
private
private

char operator = ' ';


double dataPertama = 0.0;
double dataKedua = 0.0;
double dataHasil = 0.0;
boolean awalKetikan = true;
boolean entryPertama = true;
boolean entryDesimal = false;

//--------------------// Constructor class


//--------------------public MiniCalculator()
{
super ("Kalkulator sederhana");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setLocation (100,100);
setSize (300,200);
setResizable (false);
setPanelAtas();
setPanelTengah();
setPanelBawah();
resetNilai();
getContentPane().setLayout (new BorderLayout());
getContentPane().add (panelAtas,
BorderLayout.NORTH);
getContentPane().add (panelTengah,
BorderLayout.CENTER);
getContentPane().add (panelBawah,
BorderLayout.SOUTH);

56
57
58
59
60
61

Button
Button
Button
Button
Button
Button

show();
}

282

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

//------------------------// Mereset seluruh nilai


//------------------------private void resetNilai()
{
operator = ' ';
dataPertama = 0.0;
dataKedua = 0.0;
dataHasil = 0.0;
awalKetikan = true;
entryPertama = true;
entryDesimal = false;
}
//----------------------// Mengatur panel atas
//----------------------private void setPanelAtas()
{
pemisahRibuan.setForeground (new Color (0,0,0));
pemisahRibuan.setFont (
new Font ("arial", Font.PLAIN, 11));
tampilan.setEnabled (false);
tampilan.setHorizontalAlignment (JTextField.RIGHT);
tampilan.setFont (new Font ("arial",Font.BOLD,15));
panelAtas.setLayout (new BorderLayout());
panelAtas.add (tampilan, BorderLayout.CENTER);
panelAtas.add (pemisahRibuan, BorderLayout.SOUTH);
}
//------------------------// Mengatur panel tengah
//------------------------private void setPanelTengah()
{
panelTengah.setLayout (new GridLayout (5,4));
for (int i=0; i<5*4; i++)
{
tombolFungsi[i].addActionListener (this);
tombolFungsi[i].setFont (
new Font ("arial", Font.BOLD, 11));

106

283

107
108
109
110
111
112
113
114
115
116
117
118

panelTengah.add (tombolFungsi[i]);
}
}
//-----------------------// Mengatur panel bawah
//-----------------------private void setPanelBawah()
{
tombolExit.addActionListener (this);
informasi.setFont (
new Font ("arial", Font.BOLD, 11));
tombolExit.setFont (
new Font ("arial", Font.BOLD, 11));

119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

panelBawah.setLayout (new BorderLayout());


panelBawah.add (informasi, BorderLayout.WEST);
panelBawah.add (tombolExit, BorderLayout.EAST);
}
//-------------------------------// Proses pemisahan data ribuan
//-------------------------------private String pisahkan (StringBuffer data)
{
String temp = data.toString();
if (data.length() > 3)
{
temp = data.substring (data.length()-3);
data.delete (data.length()-3, data.length());
temp = pisahkan (data) + ',' + temp.toString();
}
return (temp);
}
//-----------------// Pemisah ribuan
//-----------------private String pisahkanRibuan (double data)
{
String string = Double.toString (data);
int titik = string.indexOf ('.');
String pecahan = string.substring (titik);

284

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

long bulat = new Double (dataHasil).longValue();


string = Long.toString (bulat);
string = pisahkan (new StringBuffer (string));
return (string + pecahan);
}
//------------------------------// Menghapus karakter terakhir
//------------------------------private void hapusKarakter()
{
if (tampilan.getText().length() > 0)
{
StringBuffer data =
new StringBuffer (tampilan.getText());
char terakhir = data.charAt (data.length()-1);
if (terakhir == '.')
entryDesimal = false;
data.deleteCharAt (data.length()-1);
tampilan.setText (data.toString());
}
}
//----------------------------// Membatalkan data terakhir
//----------------------------private void batalkanData()
{
if (entryPertama)
dataPertama = 0.0;
else
dataKedua = 0.0;
tampilan.setText ("");
}
//------------------------// Mengupdate data angka
//------------------------private void updateData (int index)
{
if (awalKetikan)
tampilan.setText ("");

285

198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240

String label = tombolFungsi[index].getLabel();


char karakter = label.charAt(0);
StringBuffer data =
new StringBuffer (tampilan.getText());
tampilan.setText (data.toString() + karakter);
awalKetikan = false;
}
//---------------------------// Mengupdate data operator
//---------------------------private void updateOperator (int index)
{
if (entryPertama)
{
StringBuffer data =
new StringBuffer (tampilan.getText());
dataPertama =
Double.parseDouble (data.toString());
}
String label = tombolFungsi[index].getLabel();
operator = label.charAt(0);
entryPertama = false;
awalKetikan = true;
}
//-------------------------------// Melakukan proses perhitungan
//-------------------------------private void prosesPerhitungan()
{
StringBuffer data =
new StringBuffer (tampilan.getText());
dataKedua = Double.parseDouble (data.toString());
switch (operator)
{
case '+' : dataHasil
break;
case '-' : dataHasil
break;
case '*' : dataHasil
break;
case '/' : dataHasil

= dataPertama + dataKedua;
= dataPertama - dataKedua;
= dataPertama * dataKedua;
= dataPertama / dataKedua;

286

241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285

break;
case '^' : dataHasil = Math.pow (dataPertama,
dataKedua);
}
if (pemisahRibuan.isSelected())
tampilan.setText (pisahkanRibuan (dataHasil));
else
tampilan.setText (Double.toString (dataHasil));
entryPertama = true;
awalKetikan = true;
}
//-------------------------// Menambah tanda desimal
//-------------------------private void tambahTandaDesimal()
{
if (!entryDesimal && !awalKetikan)
{
entryDesimal = true;
StringBuffer data =
new StringBuffer (tampilan.getText());
tampilan.setText (data.toString() + '.');
}
}
//------------------------------// Action terhadap respon user
//------------------------------public void actionPerformed (ActionEvent event)
{
Object objek = event.getSource();
int lokasi = 0;
if (objek == tombolExit)
System.exit (0);
else
{
for ( ; lokasi<20; lokasi++)
if (objek == tombolFungsi[lokasi])
break;
switch (lokasi)
{

287

286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328

case
case
case

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

0 : hapusKarakter();
break;
1 : batalkanData();
break;
2 : resetNilai();
tampilan.setText ("");
break;
16 : ;
12 : ;
13 : ;
14 : ;
8 : ;
9 : ;
10 : ;
4 : ;
5 : ;
6 : updateData (lokasi);
break;
3 : ;
7 : ;
11 : ;
15 : ;
19 : updateOperator (lokasi);
break;
18 : prosesPerhitungan();
break;
17 : tambahTandaDesimal();
break;

}
}
}
}
//--------------// Class utama
//--------------public class CobaCalculator
{
public static void main (String[] args)
{
new MiniCalculator();
}
}

288

E.

LATIHAN

Latihan 1: Modifkasi project kalkulator


Modifikasi kalkulator mini tersebut, sehingga dapat melakukan perhitungan saintifik lain, seperti
trigonometri (sin, cos, dll), perpangkatan, logarirmik.
Latihan 2: Buatlah sebuah aplikasi converter untuk mengubah jarak dalam satuan mil ke
km seperti pada gambar berikut

289

Latihan 3: Buatlah sebuah aplikasi yang menampilkan pilihan checkbox dan radiobutton
seperti pada gambar

Latihan 4: Modifikasi latihan 2 sehingga aplikasi dapat mengubah jarak dari km ke mil.
Petunjuk : Berikan tambahan pilihan konversi berupa radio button.
Latihan 5: Aplikasi konversi suhu Farenheit - Celcius.
Buatlah aplikasi GUI untuk mengkonversi input suhu dari Farenheit ke Celcius dan sebaliknya.
F.

TUGAS

Buatlah sebuah game Memory. Dalam aplikasi ini diberikan grid kotak 2 dimensi yang berisi
pasangan gambar atau string yang sesuai. Ketika mengklik kotak, isinya akan terbuka. Kemudian
klik kotak yang lain. Jika isinya sama, maka kotak akan tetap terlihat isinya. Jika tidak akan
tertutup kembali. Aplikasi dapat dimainkan ulang dengan posisi isi kotak yang teracak, tidak
sama dengan sebelumnya.
G.

LAPORAN RESMI

Kumpulkan hasil percobaan di atas dan tambahkan analisa untuk tiap percobaan, latihan, dan
tugas yang telah dibuat.
290

PRAKTIKUM 30
PROYEK 1
A.

TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek.

B.

DASAR TEORI

Proyek 1 ini mengimplementasikan konsep pemrograman Java yang telah dipelajari. Mahasiswa
diharapkan dapat menghasilkan aplikasi yang memiliki kegunaan dan tujuan.
C.

TUGAS PENDAHULUAN
1. Pelajari kelas kelas di Java yang berhubungan dengan proyek yang dikerjakan.

D.

PERCOBAAN

Tidak Ada
E.

LATIHAN

Latihan 1: Petunjuk Pelaksanaan Proyek 1

F.

Mahasiswa wajib membuat aplikasi berbasis Java yang telah diajarkan sebelumnya

Aplikasi yang dibuat memiliki kegunaan yang jelas beserta tujuan aplikasi tersebut

Aplikasi dibuat oleh masing masing mahasiswa


TUGAS

Tidak ada
G.

LAPORAN RESMI

Buat laporan yang berisi progress pembuatan proyek

291

PRAKTIKUM 31
PROYEK 2
A.

TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek.

B.

DASAR TEORI

Proyek 1 ini mengimplementasikan konsep pemrograman Java yang telah dipelajari. Mahasiswa
diharapkan dapat menghasilkan aplikasi yang memiliki kegunaan dan tujuan.
C.

TUGAS PENDAHULUAN
1. Pelajari kelas kelas di Java yang berhubungan dengan proyek yang dikerjakan.

D.

PERCOBAAN

Tidak Ada
E.

LATIHAN

Latihan 1: Petunjuk Pelaksanaan Proyek 2

F.

Mahasiswa wajib membuat aplikasi berbasis Java yang telah diajarkan sebelumnya

Aplikasi yang dibuat memiliki kegunaan yang jelas beserta tujuan aplikasi tersebut

Aplikasi dibuat oleh masing masing mahasiswa


TUGAS

Tidak ada
G.

LAPORAN RESMI

Buat laporan yang berisi progress pembuatan proyek

293

PRAKTIKUM 32
PRESENTASI
A.

TUJUAN PEMBELAJARAN
1. Mengimplementasikan konsep pemrograman Java dalam sebuah proyek.

B.

DASAR TEORI

Presentasi bertujuan untuk mendemokan hasil aplikasi yang telah dikembangkan pada proyek 1
dan proyek 2.
C.

TUGAS PENDAHULUAN

Tidak Ada
D.

PERCOBAAN

Tidak Ada
E.

LATIHAN

Latihan 1: Petunjuk Pelaksanaan Presentasi


-

Mahasiswa wajib mempresentasikan aplikasi yang telah dibuat pada proyek

Mahasiswa menjelaskan manfaat dan tujuan dikembangkannya aplikasi tersebut

Mahasiswa wajib menjelaskan kelas apa saja yang digunakan untuk mengembangkan
aplikasi tersebut.

F.

TUGAS

Tidak ada
G.

LAPORAN RESMI

Buat laporan yang berisi presentasi hasil proyek

293

Daftar Pustaka
1. Chuck Cavaness, Geoff Friesen, Special Edition Using JavaTM 2 SE, QUE, 2000
2. Horstmann, Gary cornel, Cay S, Core Java 2 Volume I, Fundamentals 7th Edition, Prentice
hall, 2005
3. Herbert Schildt, The Complete Reference Java J2SETM 5th Edition, Mc Graw-Hill, Osborne,
2005.
4. James Gosling, The JavaTM Language Specification, Third Edition Sun Mycrosystems,
Addison-Wesley, 2005
5. Laura Lemay, Sams Teach Yourself Java 2 in 21 Days, Second Edition, SAMS, 2000
6. Patrick Niemeyer, Jonathan Knudsen, Learning Java, Oreilly, CA, 2000
7. Sun Java Programming, Sun Educational Services, Student Guide, Sun Microsystems 2001.
8. https://sites.google.com/site/icsshdhs/java-a/java-unit-2/2-2-java-string-assignments/2-2-1java-string-exercise-parse-this