Praktikum - Politeknik Elektronika Negeri Surabaya

advertisement
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
i
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.
1
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...");
}
}
2
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?");
}
}
3
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?");
}
}
4
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 :
5
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.
6
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
8
-27 – 27-1
0
short
16
-215 – 215-1
0
int
32
-231 – 231-1
0
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;
8
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[]) {
9
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
1
2
2
3
6
4
24
5
120
6
720
7
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
1
Ahmad
81
90
62
2
Adang
50
83
87
3
Dani
89
55
65
4
Edi
77
70
92
Buatlah program untuk menampilkan laporan sebagai berikut:
NRP
Rata-rata
-------------------------1
77.67
2
73.33
3
69.67
4
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
A
B
Biru
C
D
E
minibus
2000
7
mobil1
Toyota
mobil2
Daihatsu Hitam
pick up
1500
2
mobil3
Suzuki
Silver
suv
1800
5
mobil4
Honda
Merah
sedan
1300
5
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
5
Froggy
melompat
O2
2
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
2
:
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 :
–
A–B
–
A∩B
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, O’reilly, 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
Download