buku prakt pemrograman 2 - ilkom
Post on 30-Jun-2015
571 Views
Preview:
TRANSCRIPT
Praktikum Pemrograman II 1
Bab
1
Method Static dan Method Overloading
1.1 Methode Static
Hampir semua methode kelas (method yang dikaitkan dengan kelas
secara keseluruhan dan bukan pada instan tertentu) dideklarasikan
sebagai static. Method main hanya dapat mengakses method-method
static dalam suatu kelas yang sama.
Program berikut mengimplementasikan method static pada suatu kelas.:
tStatic.java
1 public class tStatic
2 {
3 public static void prosesString(String s1,String s2)
4 {
5 System.out.println ( s1 + " " + s2);
6 }
7
8 public static void prosesInt ( int i )
9 {
10 System.out.println ("Hasil kuadrat"+i+" = "+
(i*i));
11 System.out.println ( "Hasil kali "+i+" dengan 2
= "+(i*2));
12 }
13
14 public static void prosesDouble2 (double a,double b )
15 {
16 System.out.println ( "Hasil kali " + a +" dan
" + b + " = " + ( a * b));
17 System.out.println ( "Jumlah " + a + " dan " +
b + " = " + ( a + b));
18 }
19
20 public static void prosesDouble ( double n )
21 {
22 System.out.println ( n + " ^ 3 = " +
(n*n*n));
23 System.out.println ( n + " / 3 = " + (n/3));
24 }
25
26 public static void main ( String [] main )
27 {
28 String s1 = "Pemrograman";
Praktikum Pemrograman II 2
29 String s2 = "Java";
30
31 int i = 10;
32
33 double d1 = 5.7;
34 double d2 = 6.5;
35
36 prosesString (s1,s2);
37 prosesInt(i);
38 prosesDouble(d1);
39 prosesDouble2(d1,d2);
40 }
41 }
Jalankan program diatas dan cobalah menghilangkan kata kunci static
pada method kelas pada baris 3, 14 dan 20. Apa yang terjadi?
1.2 Method dengan Return Value
Kita dapat mendeklarasikan method yang bisa mengembalikan suatu
nilai dengan mengganti reference void dengan tipe tertentu. Perhatikan
contoh program berikut yang memberikan return value dengan tipe long
dan double.
hitungluas.java
1 public class hitungLuas
2 {
3 public static double luaslingkaran ( int r )
4 {
5 double Luas;
6 Luas = 3.14 * r * r ;
7 return Luas;
8 }
9
10 public static long luasbidang( int p, int l )
11 {
12 long Luas;
13 Luas = p * l;
14 return Luas;
15 }
16
17 public static void main ( String [] args )
18 {
19 double Luas1;
20 long Luas2;
21
22 Luas1 = luaslingkaran ( 8 );
Praktikum Pemrograman II 3
23 Luas2 = luasbidang(10,8);
34
25 System.out.println ("Luas lingkaran : "+Luas1 );
26 System.out.println ("Luas Bidang : " + Luas2 );
27 }
28 }
1.3 Method Overloading
Overloading terjadi jika beberapa method memiliki nama yang sama,
tetapi berbeda argumennya. Perhatikan program berikut yang merupakan
modifikasi contoh program tStatic dengan mengimplementasikan
overloading method.proses. Overloading.java
1 public class Overloading
2 {
3 public static void proses(String s1,String s2)
4 {
5 System.out.println ( s1 + " " + s2);
6 }
7
8 public static void proses ( int i )
9 {
10 System.out.println ("Hasil kuadrat " + I + " =
" + (i*i));
11 System.out.println ( "Hasil kali " + I + "
dengan 2 = "+(i*2));
12 }
13
14 public static void proses (double a,double b )
15 {
16 System.out.println ( "Hasil kali " + a + " dan
" + b + " = " + ( a * b));
17 System.out.println ( "Jumlah " + a + " dan " +
b + " = " + ( a + b));
18 }
19
20 public static void proses ( double n )
21 {
22 System.out.println ( n + " ^ 3 = " +
(n*n*n));
23 System.out.println ( n + " / 3 = " + (n/3));
24 }
25
26 public static void main ( String [] main )
27 {
28 String s1 = "Pemrograman";
Praktikum Pemrograman II 4
29 String s2 = "Java";
30
31 int i = 10;
32
33 double d1 = 5.7;
34 double d2 = 6.5;
35
36 prosesString (s1,s2);
37 prosesInt(i);
38 prosesDouble(d1);
39 prosesDouble2(d1,d2);
40 }
41 }
Soal 1.1 (HexToDec)
Susun program yang di dalamnya terdapat methode untuk melakukan
konveersi bilangan heksadesimal menjadi desimal.
Soal 1.2 (Overloading2)
Susun program dengan menggunakan overloading function dimana bila :
a. Dimasukkan argumen berupa string, maka dia akan
menampilkan pola :
Misal : argumen adalah JAVA J
J A
J A V
J A V A
b. Dimasukkan argumen integer, dia akan memberikan pola :
Misal : argumen adalah angka 4 1
2 4
3 6 9
4 8 12 16
c. Dimasukkan dua argument dengan tipe boolean, maka dia
akan menampilkan hasil dari operasi “And” untuk berbagai
kombinasi dari dua argumen tersebut
Praktikum Pemrograman II 5
Bab
2
Class, Konstruktor dan Method Instan
2.1 Class dan Konstruktor
Sebuah kelas bisa memiliki beberapa konstruktor, yaitu method dengan
nama yang sama dengan nama class tetapi parameternya berbeda.
Konstruktor secara otomatis akan dijalankan jika di-instan obyek dengan
tipe kelas tersebut.
Rasional2.java
1 public class Rasional2
2 {
3 private int pembilang, penyebut;
4
5 public Rasional2()
6 {
7 pembilang=1;
8 penyebut=1;
9 }
10
11 public Rasional2(int pbl, int pyb)
12 {
13 pembilang=pbl;
14 penyebut=pyb;
15 }
16
17 public int getPbl()
18 {
19 return pembilang;
20 }
21
22 public int getPyb()
23 {
24 return penyebut;
25 }
26
27 public void setRasional(int pbl , int pyb)
28 {
29 pembilang=pbl;
30 penyebut=pyb;
31 }
Praktikum Pemrograman II 6
32
33 public void setPbl(int pbl)
34 {
35 pembilang=pbl;
36 }
37
38 public void setPyb(int pyb)
39 {
40 penyebut=pyb;
41 }
42
Perhatikan deklarasi new pada baris 5 dan 6 (Rasional2Demo.java)
ketika sebuah obyek diinstan dan inisialisasi kontruktor untuk kedua
obyek tersebut dimana keduanya menjalankan kontruktor yang berbeda
tergantung dari parameter yang dimasukkan. Perhatikan pula
pemanggilan method-method instan pada main program.
Rasional2Demo.java
1 public class Rasional2Demo
2 {
3 public static void main(String[] args)
4 {
5 Rasional2 R1 = new Rasional2();
6 Rasional2 R2 = new Rasional2(6,8);
7
8 System.out.println("R1.getPbl() : " +
R1.getPbl());
9 System.out.println("R1.getPyb() : " +
R1.getPyb() + "\n");
10
11 System.out.println("R2.getPbl() : " +
R2.getPbl());
12 System.out.println("R2.getPyb() : " +
R2.getPyb()+ "\n");
13
14 R1.setRasional(3,5);
15
16 System.out.println("Setelah nilai pembilang
dan penyebut pada R1 diset ulang");
17 System.out.println("R1.getPyb() : " +
R1.getPyb());
18 System.out.println("R1.getPyb() : " +
R1.getPyb());
19 }
20 }
Praktikum Pemrograman II 7
2.2 Method Instan
Sebuah kelas juga memiliki method yang dikaitkan dengan instan
tertentu. Sewaktu method instan dipanggil, dia akan mengakses data
yang terdapat pada instan yang dikaitkannya.
Program berikut merupakan modifikasi dari program sebelumnya dengan
menyertakan operasi-operasi pada bilangan rasional.
Rasional3.java
1 public class Rasional3
2 {
3 private int pembilang, penyebut;
4
5 public Rasional3()
6 {
7 pembilang=0;
8 penyebut=0;
9 }
10
11 public Rasional3(int pbl, int pyb)
12 {
13 pembilang=pbl;
14 penyebut=pyb;
16 }
17
18 //mengecek suatu bilangan adalah rasional atau bukan
19 public boolean isRasional()
20 {
21 return (penyebut!= 0);
22 }
23
24 //menyederhanakan bilangan rasional
25 public void Sederhana()
26 {
27 int temp, A, B;
28
29 if (penyebut ==0)
30 {
31 return;
32 }
33
34 A = (pembilang<penyebut) ? penyebut:pembilang;
35 B = (pembilang<penyebut) ? pembilang:penyebut;
36
37 while (B != 0)
38 {
Praktikum Pemrograman II 8
39 temp= A % B;
40 A = B;
41 B = temp;
42 }
43
44 pembilang /=A;
45 penyebut /=A;
46
47 }
48
49 public double Cast()
50 {
51 return (penyebut==0.0) ? 0.0 :
(double)pembilang / (double)penyebut;
52 }
53
54 //oprator >
55 public boolean moreThan (Rasional3 A)
56 {
57 return (pembilang * A.penyebut > penyebut *
A.pembilang );
58 }
59
60 //operator Unary- ---> A = -A
61 public void negasi()
62 {
63 pembilang = - pembilang;
64 }
65
66 //operator unary +=
67 public void unaryPlus(Rasional3 A)
68 {
6
9
pembilang = pembilang * A.penyebut + penyebut
* A.pembilang;
70 penyebut *=A.penyebut;
71 }
72
73 public void cetak()
74 {
75 System.out.println(pembilang + "/" + penyebut);
76 }
77 }
Rasional3Demo.java
1 public class Rasional3Demo
2 {
3 public static void main(String[] args)
Praktikum Pemrograman II 9
4 {
5 Rasional3 R1 = new Rasional3(1,2);
6 Rasional3 R2 = new Rasional3(1,3);
7
8 System.out.println("R1.isRasional: " +
R1.isRasional());
9 System.out.println("R2.isRasional: " +
R1.isRasional());
10 System.out.println();
11
12 System.out.println("R1 > R2 : " +
R1.moreThan(R2));
13 System.out.println();
14
16
17 System.out.print("R1 : ");
18 R1.cetak();
19 System.out.print("R2 : ");
20 R2.cetak();
21 System.out.println();
22
23 R1.Sederhana();
24 R2.Sederhana();
25
26 System.out.print("R1 : ");
27 R1.cetak();
28 System.out.print("R2 : ");
29 R2.cetak();
30 System.out.println();
31
32 System.out.println("Setelah dilakukan Cast ke
double menjadi : " );
33 System.out.println("R1 : " + R1.Cast());
34 System.out.println("R2 : " + R2.Cast());
35 System.out.println();
36
37 R1.negasi();
38 System.out.print("Unary- dari R1 : ");
39 R1.cetak();
40 System.out.println();
41
42 R1.unaryPlus(R2);
43 System.out.print("Nilai dari 'R1 += R2' : ");
44 R1.cetak();
45 System.out.println();
46 }
47 }
Praktikum Pemrograman II 10
Soal 2.1 (Rasional4.java)
Tambahkan operator – operator lain untuk melengkapi kelas bilangan
rasional diatas, seperti : (minimal 5 operator)
Operator Unary -= , unary /=, unary *=, unary ++, unary--
Operator < , <= , >=
Operator pembanding ==, pembanding !=
Opearator + , - , * , /
Praktikum Pemrograman II 11
Bab
3
Inheritance
Inheritance memugkinkan untuk membuat sebuah obyek dari obyek lain
yang sudah ada sebelumnya. Dengan inheritance, kita bisa menggunakan
kembali atau mengganti method dari class yang ada, juga menambahkan
field instan juga methode yang baru.
Bentuk umum dari inheritance di Java adalah sebagai berikut :
public class <derived_class> extends <base_class_name>
{
//body of class
}
Berikut merupakan contoh penurunan class manager dari class
employee. Class manager selain dapat memakai beberapa method instan
dari class employee, juga masih mempertahankan semua field dari kelas
semula.
Disini terdapat tiga kelas, yaitu employee, manager dan employeedemo
employee.java
1 import java.util.Date;
2 import java.text.SimpleDateFormat;
3
4 public class employee
5 {
6 private String name;
7 private double salary;
8 Date hdate;
9
10 public employee(String n,double s, Date d)
11 {
12 name=n;
13 salary=s;
14 hdate = d;
16 }
17
18 public double getSalary()
19 {
20 return salary;
21 }
Praktikum Pemrograman II 12
22
23 public String gstName()
24 {
25 return name;
26 }
27
28 public void print()
29 {
30 Date today = new Date();
31 SimpleDateFormat format= new
SimpleDateFormat("dd MMMM yyyy");
32 String s = format.format(hdate);
33 System.out.println(" Nama : " + name);
34 System.out.println(" Tanggal masuk : " + s);
35 System.out.println(" Gaji pokok : $ " +
salary);
36 System.out.println(" Lama kerja : " +
(today.getYear() - hdate.getYear())+ "
Tahun");
37 }
38
39 public void printSalary()
40 {
41 System.out.println(" Gaji sekarang : $ " +
salary);
42 }
43
44 public int hYear()
45 {
46 return hdate.getYear();
47 }
48
49 public void raiseSalary(double r)
50 {
51 salary *=1+ r/100;
52 }
53 }
Manager.java
1 import java.util.Date;
2
3 public class manager extends employee
4 {
5 public manager(String n,double s, Date d)
6 {
7 super(n,s,d);
8 }
Praktikum Pemrograman II 13
9
10 public void raiseSalary(double r)
11 {
12 Date today = new Date();
13 double bonus= 0.5 * (today.getYear() -
hYear());
14 super.raiseSalary(r+bonus);
16 }
17 }
Perhatikan perluasan method raiseSalary pada class manager dengan
menambahkan bonus (baris 13) dan pemanggilan method raiseSalary
pada base class. (baris 14).
Employeedemo.java
1 import java.util.*;
2
3 public class employeedemo
4 {public static void main(String[] args)
5 {
6 employee[] staff=new employee[3];
7 manager boss = new manager("Dumbledore",5000, new
Date(55,6,10));;
8
9 staff[0]=new employee("Harry",750,new Date(60,3,12));
10 staff[1]=new employee("Hermione",1000,new Date(65,
6,17));
11 staff[2]=new employee("Ron",800, new Date(70,7,11));
12
13 System.out.println("Data pegawai sebelum ada kenaikan
gaji : " );
14 System.out.println("Manajer : " );
16 boss.print();
17 boss.raiseSalary(5);
18 boss.printSalary();
19
20 for (int i=0;i<staff.length;i++)
21 {
22 System.out.println("Staff ke " + (i+1) + " : ");
23 staff[i].print();
24 staff[i].raiseSalary(5);
25 staff[i].printSalary();
26 }
27 }
28 }
Praktikum Pemrograman II 14
Soal 3.1 (programmer.java)
Buatlah class Programmer yang inherit class employee dengan ketentuan
kenaikan gaji sebagai berikut :
Jika masa kerja dibawah 1 tahun : tidak ada perubahan (sama
dengan employee)
Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari
lama kerja
Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02
dari lama kerja
Soal 3.2 (direktur.java)
Buatlah class direktur yang inherit class employee dengan ketentuan
kenaikan gaji sebagai berikut :
Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan
sebesar 0.1 dari lama kerja
Praktikum Pemrograman II 15
Bab
4
Polymorphism
Kelas Abstrak
Dengan kelas abstrak memungkinkan untuk membuat method tanpa
mendefinisikan method tersebut. Hal ini bermanfaat kalau kita tahu kelas
dalam program kita harus memberikan operasi tertentu, tetapi
spesifikaasi operasi tersebut dapat berbeda-beda antara satu subelas
dengan subkelas yang lainnya.
Dalam Java kita bisa mendefinisikan method semacam ini dengan kata
kunci abstract, untuk menunjukkan bahwa methode tersebut belum
dispesifikasikan. Kelas dengan satu atau lebih method abstrak dengan
sendirinya harus dinyatakan abstrak.
Contoh pada program berikut adalah pendefinisian kelas dan method
abstrak untuk class Shape, dimana kelas Shape memiliki data berupa
Point yang menunjukkan titik koordinat(x,y) dan Color yang
menunjukkan tingkat RGB dari warna serta memiliki methode Abstrak
untuk menghitung luas, keliling dan cetak.
Shape.java
1 public abstract class Shape
2 {
3 private Color color;
4 private Point origin;
5
6 protected Shape(Color col, Point org)
7 {
8 origin = new Point(org.getX(), org.getY());
9 Color = new Color(col.getR(),col.getG(),
col.getB());
10 }
11
12 protected Shape(Point org)
13 {
14 origin = new Point(org.getX(), org.getY());
16 color = new Color(0,0,0);
17 }
18
19 protected Shape()
Praktikum Pemrograman II 16
20 {
21 origin = new Point(0.0, 0.0);
22 color = new Color(0,0,0);
23 }
24
25 public abstract double area();
26 public abstract double perimeter();
27 public abstract void print();
28
29 public Color getColor()
30 {
31 return color;
32 }
33
34 public void setColor(Color col)
35 {
36 color.setRGB(col.getR(), col.getG(), col.getB());
37 }
38
39 public Point getOrigin()
40 {
41 return origin;
42 }
43
44 public void setOrigin(Point org)
45 {
46 origin.setPoint(org.getX(), org.getY());
47 }
48 }
Method Abstrak dari kelas Shape mempunyai implementasi yang
berbeda-beda ketika diimplementasikan pada kelas turunannya, yaitu
kelas Circle dan Rectangle.
Circle.java
1 public class Circle extends Shape
2 {
3 private double radius;
4
5 public Circle()
6 {
7 super();
8 radius = 0.0;
9 }
10
11 public Circle(final Point org, final double rad)
12 {
Praktikum Pemrograman II 17
13 super(org);
14 radius = rad;
16 }
17
18 public double getRadius()
19 {
20 return radius;
21 }
22
23 public void setRadius(double r)
24 {
25 radius = r;
26 }
27
28 public double area()
29 {
30 return Math.PI * radius * radius;
31 }
32
33 public double perimeter()
34 {
35 return 2 * Math.PI * radius;
36 }
37
38 public void print()
39 {
40 System.out.println("Lingkaran :");
41 System.out.println(" Pusat -> X : " +
super.getOrigin().getX() + ", Y : " +
super.getOrigin().getY());
42 System.out.println(" Radius : " + radius);
43 System.out.println(" Luas : " + (Math.PI *
radius * radius));
44 System.out.println(" Keliling : " + (2 *
Math.PI * radius));
45 System.out.println(" Warna R : " +
super.getColor().getR() + ", G : " +
super.getColor().getG() + ", B : " +
super.getColor().getB());
46 }
47 }
Rectangle.java
1 public class Rectangle extends Shape
2 {
3 private double height;
4 private double width;
5
Praktikum Pemrograman II 18
6 public Rectangle()
7 {
8 super();
9 height = 0.0; width = 0.0;
10 }
11
12 public Rectangle(Point org, double h, double w)
13 {
14 super(org);
16 height = h; width = w;
17 }
18
19 public double area()
20 {
21 return height * width;
22 }
23
24 public double getH()
25 {
26 return height;
27 }
28
29 public double getW()
30 {
31 return width;
32 }
33
34 public void setHW(double h, double w)
35 {
36 height = h; width = w;
37 }
38
39 public double perimeter()
40 {
41 return 2 * (height + width);
42 }
43
44 public void print()
45 {
46 System.out.println("Segi Empat:");
47 System.out.println(" P : " + width + ", L : "
+ height);
48 System.out.println(" Luas : " + (height *
width));
49 System.out.println(" Keliling : " + (2 *
(height + width)));
50 System.out.println(" Nilai X : " +
super.getOrigin().getX() + ", Y : " +
super.getOrigin().getY());
Praktikum Pemrograman II 19
51 System.out.println(" Warna R : " +
super.getColor().getR() + ", G : " +
super.getColor().getG() + ", B : " +
super.getColor().getB());
52 }
53 }
ShapeDemo.java
1 public class ShapeDemo
2 {
3 public static void main(String [] args)
4 {
5 Point p = new Point(5,9);
6 Color co = new Color (10,10,10);
7 Circle c = new Circle(p,6);
8 Rectangle r = new Rectangle(p,5,8);
9
10 System.out.println("Luas Segiempat mula-mula :
" + r.area()+ "\n");
11 System.out.println("Keliling Segiempat mula-
mula : " + r.perimeter()+ "\n");
12
13 r.setHW(20.6 , 10.3);
14 r.print();
16 System.out.println();
17
18 System.out.println("Luas Lingkaran mula-mula :
" + c.area()+ "\n");
19 System.out.println("Keliling Lingkaran mula-
mula : " + c.perimeter()+ "\n");
20
21 c.setRadius(5.8);
22 c.setColor(co);
23 c.print();
24
25 }
26 }
Praktikum Pemrograman II 20
Soal 4.1 (employeePoly)
Implementasikan polymorphism pada class employee (pada bab
sebelumnya) sehingga methode raiseSalary() dan print() menjadi
methode abstrak :
employeePoly.java
1 import java.util.Date;
2 import java.text.SimpleDateFormat;
3
4 public abstract class employee
5 {
6 private String name;
7 Date hdate;
8
9 //konstruktor
10 public employeePoly(String n, Date d)
11
12 //method-methode untuk set dan get variable
13
14 public int hYear()
16 {
17 return hdate.getYear();
18 }
19
20 public abstract void print();
21 public abstract void raiseSalary(double persen)
22
23 }
Soal 4.2 (staff.java)
Buatlah class staff yang inherit class employee dengan ketentuan sebagai
berikut :
Terdapat variable tambahan salary dengan tipe double
Jika masa kerja dibawah 1 tahun, kenaikan gaji dihitung : salary *=1+ persen/100;
Jika masa kerja 1- 10 tahun , ada tambahan bonus sebesar 0.01 dari
lama kerja
Jika masa kerja diatas 10 tahun, ada tambahan bonus sebesar 0.02
dari lama kerja
Praktikum Pemrograman II 21
Soal 4.3 (manager.java)
Buatlah class direktur yang inherit class employee dengan ketentuan
kenaikan gaji sebagai berikut :
Selain bonus sebesar 0.5 dari lama kerja , juga mendapat tunjangan
sebesar 0.1 dari lama kerja
Praktikum Pemrograman II 22
Bab
5
Stream
Dengan stream memungkinkan untuk mendapatkan input dari sumber data yang
dapat mengirimkan urutan byte dan mengirimkan output ke berbagai tujuan
yang dapat menerima urutan byte. Sebuah obyek yang dapat membaca
sekumpulan byte disebut InputStream dan sebuah obyek yang dapat
menuliskan sekumpulan byte disebut OutputStream.
Contoh berikut untuk mengimplementasikan kelas-kelas input dan output
stream untuk membuat kelas yang dapat digunakan untuk membaca input dari
keyboard (semacam perintah cin pada C++) . Input yang dibaca bertipe
integer, byte, long dan double.
Input.java
1 import java.io.*;
2
3 public class Input {
4
5 private static InputStream in = System.in;
6 private static PrintStream out = System.out;
7
8 private static String buffer = null;
9 private static int pos = 0;
10
11
12 public static byte inByte()
13 {
14 return (byte)readInteger(-128L,127L);
16 }
17
18 public static short inShort()
19 {
20 return (short)readInteger(-32768L,32767L);
21 }
22
23 public static int inInt()
24 {
25 return (int)readInteger((long)Integer.MIN_VALUE,
(long)Integer.MAX_VALUE);
26 }
27
Praktikum Pemrograman II 23
28 public static long inLong()
29 {
30 return readInteger(Long.MIN_VALUE, Long.MAX_VALUE);
31 }
32
33 public static char inChar()
34 {
35 char ch = lookChar();
36 while (ch == ' ' || ch == '\n')
37 {
38 readChar();
39 if (ch == '\n')
40 dumpString("",0);
41 ch = lookChar();
42 }
43 return readChar();
44 }
45
46
47 public static double inDouble() {
48 double x = 0.0;
49 while (true) {
50 String str = readRealString();
51 if (str.equals("")) {
52 errorMessage("Range " , + Double.MIN_VALUE +
" sampai " + Double.MAX_VALUE);
53 }
54 else {
55 Double f = null;
56 try { f = Double.valueOf(str); }
57 catch (NumberFormatException e) {
58 errorMessage("Range " , + Double.MIN_VALUE +
" sampai " + Double.MAX_VALUE);
59 continue;
60 }
61 if (f.isInfinite()) {
62 errorMessage("Range " , + Double.MIN_VALUE +
" sampai " + Double.MAX_VALUE);
63 continue;
64 }
65 x = f.doubleValue();
66 break;
67 }
68 }
69 return x;
70 }
71
72
73 private static String readRealString()
Praktikum Pemrograman II 24
74 {
75 StringBuffer s=new StringBuffer(50);
76 char ch=lookChar();
77 while (ch == ' ' || ch == '\n') {
78 readChar();
79 if (ch == '\n')
80 dumpString("",0);
81 ch = lookChar();
82 }
83 if (ch == '-' || ch == '+') {
84 s.append(readChar());
85 ch = lookChar();
86 while (ch == ' ') {
87 readChar();
88 ch = lookChar();
89 }
90 }
91 while (ch >= '0' && ch <= '9') {
92 s.append(readChar());
93 ch = lookChar();
94 }
95 if (ch == '.') {
96 s.append(readChar());
97 ch = lookChar();
98 while (ch >= '0' && ch <= '9') {
99 s.append(readChar());
100 ch = lookChar();
101 }
102 }
103 if (ch == 'E' || ch == 'e') {
104 s.append(readChar());
105 ch = lookChar();
106 if (ch == '-' || ch == '+') {
107 s.append(readChar());
108 ch = lookChar();
109 }
110 while (ch >= '0' && ch <= '9') {
111 s.append(readChar());
112 ch = lookChar();
113 }
114 }
115 return s.toString();
116 }
117
118 private static long readInteger(long min, long max)
119 {
120 long x=0;
121 while (true) {
222 StringBuffer s=new StringBuffer(34);
Praktikum Pemrograman II 25
123 char ch=lookChar();
124 while (ch == ' ' || ch == '\n') {
125 readChar();
126 if (ch == '\n')
127 dumpString("",0);
128 dumpString("",0);
129 ch = lookChar();
130 }
131 if (ch == '-' || ch == '+') {
132 s.append(readChar());
133 ch = lookChar();
134 while (ch == ' ') {
135 readChar();
136 ch = lookChar();
137 }
138 }
139 while (ch >= '0' && ch <= '9') {
140 s.append(readChar());
141 ch = lookChar();
142 }
143 if (s.equals("")){
144
errorMessage("Range integer : ", + min +
" sampai " + max);
145 }
146 else {
147 String str = s.toString();
148 try {
149 x = Long.parseLong(str);
150 }
151 catch (NumberFormatException e) {
152
errorMessage("Range integer : " , + min +
" sampai " + max);
153 continue;
154 }
155 if (x < min || x > max) {
156
errorMessage("Range integer : ", + min +
" sampai " + max);
157 continue;
158 }
159 break;
160 }
161 }
162 return x;
163 }
164
165
166 private static void dumpString(String str, int w)
167 {
168 for (int i=str.length(); i<w; i++)
Praktikum Pemrograman II 26
169 out.print(' ');
170 for (int i=0; i<str.length(); i++)
171
if ((int)str.charAt(i) >= 0x20 &&
(int)str.charAt(i) != 0x7F)
172 out.print(str.charAt(i));
173
else if (str.charAt(i) == '\n' || str.charAt(i) ==
'\r')
174 newLine();
175 }
176
177
178
private static void errorMessage(String message,
String expecting)
179 {
180 newLine();
181 dumpString(" *** Input Salah: \n", 0);
182 dumpString(" *** Range: " + expecting + "\n", 0);
183 newLine();
184 dumpString("Masukkan lagi: ", 0);
185 readChar(); // discard the end-of-line character
186 }
187
188
189
190 private static char lookChar()
191 {
192 if (buffer == null || pos > buffer.length())
193 fillBuffer();
194 if (pos == buffer.length())
195 return '\n';
196 return buffer.charAt(pos);
197 }
198
199
200 private static char readChar()
201 {
202 char ch = lookChar();
203 pos++;
204 return ch;
205 }
206
207 private static void newLine()
208 {
209 out.println();
210 out.flush();
211 }
212
213 private static boolean possibleLinefeedPending = false;
214
Praktikum Pemrograman II 27
215 private static void fillBuffer()
216 {
217 StringBuffer b = new StringBuffer();
218 out.flush();
219 try {
220 int ch = in.read();
221 if (ch == '\n' && possibleLinefeedPending)
222 ch = in.read();
223 possibleLinefeedPending = false;
224 while (ch != -1 && ch != '\n' && ch != '\r') {
225 b.append((char)ch);
226 ch = in.read();
227 }
228 possibleLinefeedPending = (ch == '\r');
229 if (ch == -1) {
230
System.out.println("*** Found an end-of-file
while trying to read from standard input! ***");
231
232
System.out.println("*** Program will be
terminated. *** \n");
233
throw new RuntimeException(" End-of-file on
standard input.");
234 }
235 }
236 catch (IOException e) {
237
System.out.println(" Unexpected system error on
input.");
238 System.out.println("Terminating program.");
239 System.exit(1);
240 }
241 buffer = b.toString();
242 pos = 0;
243 }
244 }
Compile program diatas dan cobalah untuk menggunakan method-method dari
class Input diatas. Perhatikan juga penggunaan method class readInteger,
readRealString, fillBuffer, lookChar dan readChar.
InputDemo.java
1 class InputDemo
2 {
3 public static void main(String[] args)
4 {
5 System.out.print("Masukkan angka int : ");
6
7 int angka1 = Input.inInt();
Praktikum Pemrograman II 28
8
9 System.out.println("Angka yang anda masukkan :
" + angka1 + "\n");
10
11 System.out.print("Masukkan angka double : ");
12 double angka2 = Input.inDouble();
13
14 System.out.println("Angka yang anda masukkan :
" + angka2 + "\n");
15 }
16 }
Jalankan program diatas, kemudian buatlah method untuk membaca input
berupa Float (inFloat) dan string(inWord) serta aplikasikan pada latihan pada
bab-bab sebelumnya.
Praktikum Pemrograman II 29
Bab
6
Graphic User Interface
Dengan Java, memungkinkan untuk membuat tampilan User Interface dengan
memanfaatkan paket-paket GUI yang telah disediakan. Salah satu paket yang
biasa digunakan adalah AWT (Abstract Window Toolkit), dimana dengan
AWT kita bisa membuat berbagai prasarana dasar sepeti tombol, field
input,label dll dan kemudian membuat program interface untuk menanggapi
berbagai event.
Berikut adalah contoh program penggunaan paket java.awt untuk merancang
form sederhana perhitungan Luas.
Tframe.java
1 import java.awt.*;
2 import java.awt.event.*;
3
4 public class TFrame extends Frame
5 {
6 Label lbJudul;
7 Label lbPanjang;
8 Label lbLebar;
9 Label lbLuas;
10 TextField txtPanjang;
11 TextField txtLebar;
12 TextField txtLuas;
13 Button btnOK;
14
16
17 public TFrame()
Praktikum Pemrograman II 30
18 {
19 setLayout(null);
20
21 lbJudul = new Label("Hitung Luas SegiEmpat");
22 lbJudul.setFont(new Font("Arial", 1, 14));
23 add(lbJudul);
24 lbJudul.setBounds(100, 30, 170, 20);
25
26 lbPanjang = new Label("Panjang :");
27 add(lbPanjang);
28 lbPanjang.setBounds(100, 60, 62, 20);
29
30 lbLebar = new Label ("Lebar :");
31 add(lbLebar);
32 lbLebar.setBounds(100, 90, 70, 20);
33
34 lbLuas = new Label("Hasil :");
35 add(lbLuas);
36 lbLuas.setBounds(100, 120, 70, 20);
37
38 txtPanjang = new TextField("0");
39 add(txtPanjang);
40 txtPanjang.setBounds(200, 60, 60, 20);
41
42 txtLebar= new TextField("0");
43 add(txtLebar);
44 txtLebar.setBounds(200, 90, 60, 20);
45
46 txtLuas= new TextField("0");
47 add(txtLuas);
48 txtLuas.setBounds(200, 120, 60, 20);
49
50 btnOK = new Button("Hitung");
51 add(btnOK);
52 btnOK.setBounds(120,150,100,20);
53 btnOK.addActionListener(new mainAction());
54
55 addWindowListener(new WindowAdapter() {
56 public void windowClosing(WindowEvent e) {
57 System.exit(0);
58 }
59 });
60 }
61
62 class mainAction implements ActionListener
63 {
64
65 public void actionPerformed( ActionEvent event)
66 {
Praktikum Pemrograman II 31
67 int p1 = Integer.parseInt
(txtPanjang.getText().trim());
68 int l1 = Integer.parseInt
(txtLebar.getText().trim());
69 String luas = String.valueOf(p1*l1);
70 txtLuas.setText(luas);
71 }
72 }
73 }
mainLuas.java
1 public class mainLuas
2 {
3 public static void main(String args[])
4 {
5 TFrame window = new TFrame();
6
7 window.setTitle("Hitung Luas dengan GUI Java.awt");
8 window.setSize(350,200);
9 window.show();
10 }
11 }
Jalankan program diatas. Amati penggunaan listener untuk buttonOK (baris
53) yang mengimplementasikan interface ActionListener untuk
menjalankan event tertentu.
Contoh program dibawah adalah modifikasi program sebelumnya
dengan memanfaatkan komponen checkbox untuk melakukan pemilihan
aksi.
Praktikum Pemrograman II 32
TFrame2.java
1 import java.awt.*;
2 import java.awt.event.*;
3
4 public class TFrame2 extends Frame
5 {
6 TextField txtPanjang, txtLebar,txtLuas;
7 CheckboxGroup cbg;
8 Checkbox cbL,cbK;
9 Label lbJudul,lbPanjang,lbLebar,lbLuas;
10
11 public TFrame2()
12 {
13 setLayout(null);
14
16 lbJudul = new Label("Hitung Luas dan Keliling");
17 lbJudul.setFont(new Font("Arial", 1, 14));
18 add(lbJudul);
19 lbJudul.setBounds(100, 30, 170, 20);
20
21 lbPanjang = new Label("Panjang :");
22 add(lbPanjang);
23 lbPanjang.setBounds(100, 80, 62, 20);
24
25 lbLebar = new Label ("Lebar :");
26 add(lbLebar);
27 lbLebar.setBounds(100, 120, 70, 20);
28
29 lbLuas = new Label("Hasil :");
30 add(lbLuas);
31 lbLuas.setBounds(100, 150, 70, 20);
32
33 txtPanjang = new TextField("0");
34 add(txtPanjang);
35 txtPanjang.setBounds(200, 80, 60, 20);
36
37 txtLebar= new TextField("0");
38 add(txtLebar);
39 txtLebar.setBounds(200, 120, 60, 20);
40
41 txtLuas = new TextField("0");
42 add(txtLuas);
43 txtLuas.setBounds(200, 150, 60, 20);
44
45 cbg = new CheckboxGroup();
46 cbL = new Checkbox("Luas",cbg, false);
47 this.add(cbL).setBounds(90, 190, 100, 20);
48
Praktikum Pemrograman II 33
49 cbK = new Checkbox("Keliling",cbg, false);
50 this.add(cbK).setBounds(200, 190, 100, 20);
51
52 cbL.addItemListener(new mainAction());
53 cbK.addItemListener(new mainAction());
54
55
56 addWindowListener(new WindowAdapter()
57 {
58 public void windowClosing(WindowEvent e) {
59 System.exit(0);
60 }
61 });
62 }
63
64 //ItemListener
65 class mainAction implements ItemListener
66 {
67 public void itemStateChanged(ItemEvent ev)
68 {
69 int p1 = Integer.parseInt
(txtPanjang.getText().trim());
70 int l1 = Integer.parseInt
(txtLebar.getText().trim());
71
72 Object source = ev.getItemSelectable();
73
74 if (source == cbL)
75 {
76 txtLuas.setText(String.valueOf(p1*l1));
77 }
78 else if (source == cbK)
79 {
80 txtLuas.setText(String.valueOf(2*
(p1+l1)));
81 }
82 }
83 }
84 }
mainLuas2.java
1 public class mainLuas2
2 {
3 public static void main(String args[])
4 {
5 TFrame2 window2 = new TFrame2();
6
Praktikum Pemrograman II 34
7 window2.setSize(400,250);
8 window2.setVisible(true);
9 window2.show();
10 }
11 }
Soal 6.1 (HitungGaji.java)
Buatlah program untuk menghitung gaji karyawan dengan tampilan seperti
berikut.
Adapun ketentuan penghitungan bonus dan tunjangan adalah sebagai berikut :
Gaji Pokok
Staff : 1.000.000
Manager : 5.000.000
Direktur : 10.000.000
Bonus :
Staff jika lama kerja < 1 th = 0
Jika lama kerja 1 – 10 th = 5% * gaji_pokok
jika lama kerja > 10 th = lama_kerja/100 * gaji_pokok
Manager
Praktikum Pemrograman II 35
(5% + ((lama_kerja / 100 )) * gaji_pokok
Direktur
(10% + ((lama_kerja / 100 )) * gaji_pokok
Tunjangan :
Staff : 0
Manager : 5% * gaji_pokok
Direktur : 10% * gaji_pokok
Praktikum Pemrograman II 36
Bab
7
Graphic User Interface Lanjut
Selain dengan memanfaatkan paket java.awt, untuk membuat user interface di
Java juga bisa memanfaatkan paket javax.swing.
Pada contoh berikut merupakan pemanfaatan komponen jtable untuk membuat
user interface untuk menampilkan data dalam bentuk tabel.
TableData.java
1 import javax.swing.*;
2 import javax.swing.table.AbstractTableModel;
3 import javax.swing.table.TableColumn;
4 import java.awt.*;
5 import java.awt.event.*;
6
7 public class TableData extends JFrame
8 {
9 public TableData()
10 {
11 super("Contoh penggunaan jtable");
12
13 MyTableModel myModel = new MyTableModel();
14 JTable table = new JTable(myModel);
16 table.setPreferredScrollableViewportSize(new
Dimension(500, 70));
17
18 JScrollPane scrollPane = new JScrollPane(table);
19 getContentPane().add(scrollPane,
BorderLayout.CENTER);
20
21 addWindowListener(new WindowAdapter() {
22 public void windowClosing(WindowEvent e) {
Praktikum Pemrograman II 37
23 System.exit(0);
24 }
25 });
26 }
27 }
28
29 class MyTableModel extends AbstractTableModel
30 {
31 final String[] columnNames = {"ID", "Name",
"Address","Sex"};
32
33 final Object[][] data = {
34 {"S001","Mariana","Malang",new Boolean(false)},
35 {"S002","Tatiana","Surabaya",new Boolean(false)},
36 {"S003","Harry","Jakarta",new Boolean(true)},
37 {"M001","Zakhy","Bandung",new Boolean(true)},
38 {"D001","Angela","Bogor",new Boolean(false)}
39 };
40
41 public int getColumnCount() {
42 return columnNames.length;
43 }
44
45 public int getRowCount() {
46 return data.length;
47 }
48
49 public String getColumnName(int col) {
50 return columnNames[col];
51 }
52
53 public Object getValueAt(int row, int col) {
54 return data[row][col];
55 }
56
57 public Class getColumnClass(int c) {
58 return getValueAt(0, c).getClass();
59 }
60
61 public boolean isCellEditable(int row, int col) {
62 if (col < 3) {
63 return true;
64 } else {
65 return false;
66 }
67 }
68 }
Praktikum Pemrograman II 38
TableDataDemo.java
1 public class TableDataDemo
2 {
3 public static void main(String[] args)
4 {
5 TableData frame = new TableData();
6 frame.pack();
7 frame.setVisible(true);
8 }
9 }
Contoh berikut adalah pengembangan dari contoh diatas dengan menambahkan
button untuk menambah dan menghapus baris. Pada saat dijalankan default
table adalah null (tidak ada isi pada tabel).
Perhatikan keyword implements pada baris 8, dimana sebuah kelas bisa
mengimplementasikan lebih dari satu interface. Hal ini mendekati fungsi
pewarisan ganda.
TableAdd.java
1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 import javax.swing.table.*;
5 import java.util.*;
6 import javax.swing.event.*;
7
8 class TableAdd implements ActionListener,
TableModelListener
9 {
10 JFrame frame;
11 JTable table;
12 Vector rows,columns;
13 DefaultTableModel tabModel;
Praktikum Pemrograman II 39
14 JScrollPane scrollPane;
16 JLabel lblMessage;
17 JButton cmdAdd,cmdDelete,cmdSetValue,cmdGetValue;
18 JPanel mainPanel,buttonPanel;
19
20 TableAdd()
21 {
22 rows=new Vector();
23 columns= new Vector();
24 String[] columnNames =
25 {
26 "ID",
27 "Name",
28 "Address",
29 "Sex",
30 };
31
32 addColumns(columnNames);
33
34 tabModel=new DefaultTableModel();
35 tabModel.setDataVector(rows,columns);
36
37 table = new JTable(tabModel);
38 scrollPane= new JScrollPane(table);
39
40 table.setRowSelectionAllowed(false);
41
42 table.getModel().addTableModelListener(this);
43
44 lblMessage=new JLabel("");
45
46 buttonPanel=new JPanel();
47 cmdAdd=new JButton("Add Row");
48 cmdDelete=new JButton("Delete") ;
49
50 buttonPanel.add(cmdAdd);
51 buttonPanel.add(cmdDelete);
52
53 cmdAdd.addActionListener(this);
54 cmdDelete.addActionListener(this);
55
56 mainPanel=new JPanel();
57 frame=new JFrame("Simple Table Example");
58 frame.setSize(800,600);
59 frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
60 mainPanel.setLayout(new BorderLayout());
61 mainPanel.add("Center",scrollPane);
62 mainPanel.add("South",buttonPanel);
63 mainPanel.setBackground(Color.white);
Praktikum Pemrograman II 40
64 buttonPanel.setBackground(Color.white);
65 table.getParent().setBackground(Color.white);
66 frame.getContentPane().add(mainPanel);
67 frame.setVisible(true);
68
69 }
70
71 public void addColumns(String[] colName)
72 {
73 for(int i=0;i<colName.length;i++)
74 columns.addElement((String) colName[i]);
75 }
76
77 public void addRow()
78 {
79 Vector r=new Vector();
80 r = createBlankElement();
81 rows.addElement(r);
82 table.addNotify();
83 }
84
85 public Vector createBlankElement()
86 {
87 Vector t = new Vector();
88 t.addElement((String) " ");
89 t.addElement((String) " ");
90 t.addElement((String) " ");
91 t.addElement((String) " ");
92 return t;
93 }
94
95 void deleteRow(int index)
96 {
97 if(index!=-1)
98 {
99 rows.removeElementAt(index);
100 table.addNotify();
101 }
102
103 }
104
105 public void tableChanged(javax.swing.event.TableModelEvent
source)
106 {
107 }
108
109 public void selectCell(int row,int col)
110 {
111 if(row!=-1 && col !=-1)
Praktikum Pemrograman II 41
112 {
113 table.setRowSelectionInterval(row,row);
114 table.setColumnSelectionInterval(col,col);
115 }
116 }
117
118 public void actionPerformed(ActionEvent source)
119 {
120 if (source.getSource()==(JButton) cmdAdd)
121 {
222 addRow();
123 }
124 if (source.getSource()==(JButton) cmdDelete)
125 {
126 deleteRow(table.getSelectedRow());
127 }
128
129 }
130
131 public static void main(String[] args)
132 {
133 TableAdd t=new TableAdd();
134 }
135 }
Soal 7.1
Modifikasi tabel contoh pada TableAdd.java sehingga tampilan awalnya
adalah sebagai berikut :
Praktikum Pemrograman II 42
Bab
8
Studi Kasus
Studi kasus akan diberikan oleh masing-masing asisten pada saat pelaksanaan
praktikum.
top related