Minggu, 29 Mei 2011

Overloading Pada Java

Berikut contoh polymorphisme:

public class Bangun {
    int panjang;
    int lebar;
    int sisi;
   
    public void tampil(int sisi){
        int luas = sisi * sisi;
        System.out.println("Luas Persegi            : " + luas);
    }
   
    public void tampil(int panjang, int lebar){
        int luas = panjang * lebar;
        System.out.println("Luas Persegi Panjang    : " + luas);
    }
}

Perhatikan fungsi tampil yang di tulis tebal. Di sini peran overload akan tampak. Apabila temen - temen memanggil fungsi tampil(int sisi), maka yang akan tampil adalah luas dari persegi dan apabila temen - temen memanggil fungsi tampil(int panjang, int lebar), maka yang akan tampil adalah luas dari persegi panjang

Overriding Pada Java

Karena besok ada kuis nih di kampus, untuk membantu temen - temen yang belum ngerti ane pengen ngasih contoh ovveriding buat temen - temen:

Buat 3 class terlebih dahulu. pada contoh kali ini adalah Lingkaran, Tabung, Kerucut:
public class Lingkaran {

    int r;

    public int getLuasLingkaran(int r) {
        return (int) Math.PI * r * r;
    }

    public void luas() {
        int luas = getLuasLingkaran(this.r);
        System.out.println("Luas        : " + luas);
    }

    public int getKelilingLingkaran(int r) {
        return (int) Math.PI * (r * 2);
    }

    public void keliling() {
        int keliling = getKelilingLingkaran(this.r);
        System.out.println("Keliling    : " + keliling);
    }
}

public class Tabung extends Lingkaran{
    int tinggi;
    int jari;
   
    @Override
    public void luas(){
        int luas = (2 * super.getLuasLingkaran(this.jari)) + (tinggi * super.getKelilingLingkaran(this.jari));
        System.out.println("Luas        : " + luas);
    }
   
    public void volume(){
        int volume = super.getLuasLingkaran(this.jari) * tinggi;
        System.out.println("Volume      : " + volume);
    }
}

public class Kerucut extends Lingkaran{
    int tinggi;
    int jari;
   
    @Override
    public void luas(){
        int selimut = (int) Math.sqrt(Math.pow(this.tinggi,2) + Math.pow(this.jari,2));
        int luas = (super.getLuasLingkaran(this.jari) + (selimut * (int) Math.PI * this.jari));
        System.out.println("Luas        : " + luas);
    }
   
    public void volume(){
        int volume = (int)(0.333 * (super.getLuasLingkaran(this.jari) * tinggi));
        System.out.println("Volume      : " + volume);
    }
}

perlu diketahui bahwa class berwarna merah adalah super class dari class yang berwarna biru dan hijau. Dari sini akan tampak kegunaan overriding. Perhatikan fungsi luas() pada setiap class. ketiga fungsi tersebut bertipe fungsi sama, nama fungsi sama, dan nilai kembaliannyapun sama.Namun , di sinilah overriding berperan karena fungsi luas() di dalam tabung akan menampilkan luas tabung dan fungsi luas() pada kerucut akan menampilkan luas kerucut. Semoga Bermanfaat.

Sabtu, 28 Mei 2011

Segitiga Pascal Pada Java

Sebenarnya, menampilkan segitiga pascal dapat dilakukan hanya dalam fungsi main(public static void main(String[] args), namun cara ini lebih kompleks karena temen - temen harus mengatur fungsi faktorial sendiri di dalam fungsi main tersebut. Sebenarnya bisa, tapi lebih membingungkan. Sehubungan dengan kebingungan tersebut, pada artikel kali ini, akan ane buat fungsi - fungsi yang nantinya akan menjadi rumus menampilkan segitiga pascal tersebut. Fungsi ini ditunjukkan oleh script berwarna di bawah ini:

public class SegiTigaPascal
public int proc(int angka){
if(angka == 0){
return 1;
}
else
return angka;
}
public int minus(int x, int y){
if(x - y == 0){
return 1;
}
else
return x- y;
}
public int faktorial(int angka){
int faktorial = 1;
for(int x = 1; x <= angka; x++){
faktorial *= x;
}
return faktorial;
}
public static void main(String[] args) {
SegiTigaPascal panggil = new SegiTigaPascal();
int batas = 4;
int xFaktorial = 1;
int yFaktorial = 1;
int minFaktorial = 1;
int simpan;
int hasil = 0;
for (int x = 0; x <= batas; x++) {
xFaktorial *= panggil.proc(x);
for (int y = batas; y >= x; y--) {
System.out.print(" ");
}
for (int y = 0; y <= x; y++) {
yFaktorial *= panggil.proc(y);
minFaktorial = panggil.minus(x, y);
simpan = panggil.faktorial(minFaktorial);
hasil = xFaktorial/(yFaktorial * (simpan));
System.out.print(hasil + " ");;
}
yFaktorial = 1;
System.out.println("");
}
}
}

NB:
  • Script berwarna biru adalah fungsi untuk mengembalikan nilai 1 apabila angka pada parameter adalah 0, Fungsi ini berlaku karena (entah saya yang gak tahu atau emang gak ada) java tidak menyediakan prosedur faktorial sendiri, sehingga fungsi ini akan berjalan apabila dibutuhkan hasil 0 faktorial.
  • Sript berwarna merah adalah fungsi untuk menghitung hasil pengurangan. Hasil pengurangan ini diperlukan karena kombinasi nCr = n! / r!(n - r)!. Nah, fungsi ini yang berperan dalam menghitung (n - r)!.
  • Script berwarna kuning adalah fungsi untuk menghitung faktorial.

Sabtu, 21 Mei 2011

Penerapan Link List


Okeh brad... Pada kesempatan kali ini ane mau sedikit share tentang link list sebagai lanjutan dari artikel sebelumnya. Kali ini ane mau share tentang penerapan link list dalam hal yang lebih luas yaitu penerapan link list dalam mencari data terkecil, terbesar, dan mengurutkan data yang berupa angka. Berikut script untuk mencari data terkecil:
Sebelumnya, buat class baru terlebih dahulu. Pada contoh kali ini nama classnya adalah LinkedList.
public class LinkedList {
int data;
 LinkedList next;
public LinkedList(){
}   
public LinkedList(int data){
this.data = data;
}
public void tampil(){
System.out.print(data + " ");
}
}
Setelah itu buat class baru lagi. Pada contoh kali ini adalah Process.
public class Process {
LinkedList awal;
int k = 0;
public void masuk(int data) {
LinkedList link = new LinkedList(data);
link.next = awal;
awal = link;
}
public void tampil() {
LinkedList link = awal;
while (link != null) {
link.tampil();
link = link.next;
}
}
public int min(){
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] > data[y]){
is = false;
}
}           
if(is){
tampung = data[x];
}
}
return tampung;
}
}
public int max(){
System.out.println("Bilangan terbesar");
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}
if(is){
tampung = data[x];
}
}
return tampung;
}
Perhatikan pada blok yang berwarna merah, di dalamnya terdapat satu baris yang di tulis dengan huruf tebal dan berwarna hitam. Blok itu adalah blok yang digunakan untuk mencari data angka terkecil, apabila ingin mencari data  angka terbesar, hanya tinggal mengganti dengan if(data[x] < data[y]).
public int max(){
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}           
if(is){
tampung = data[x];
}
}
return tampung;
}
}
public int max(){
System.out.println("Bilangan terbesar");
LinkedList link = awal;
while(link != null){
link = link.next;
int n = 1;
k += n;
}
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
boolean is = true;
int tampung = 0;
for(int x = 0; x < data.length; x++){
is = true;
for(int y = 0; y < data.length; y++){
if(data[x] < data[y]){
is = false;
}
}
if(is){
tampung = data[x];
}
}
return tampung;
}

Nah, sekarang bagaimana untuk mengurutkan data menggunakan link list??? Pada contoh kali ini, data yang akan diurutkan akan ditampilkan yaitu fungsi berupa void. Kalo temen – temen ingin mengembalikan nilai dari data yang temen – temen urutkan, silahkan dimodifikasi sendiri. Silahkan tambahkan script mengurutkan data dengan fungsi tampil() yang ada di class process. Berikut scriptnya:
public void tampil() {
LinkedList link = awal;
while (link != null) {
int n = 1;
link.tampil();
link = link.next;
k += n;
}
System.out.println("\nAscending");
int data[] = new int[k];
for(int x = 0; x < data.length; x++){
data[x] = awal.data;
awal = awal.next;
}
int temp;
for(int x = 0; x < data.length;x++){
for(int y = x + 1; y < data.length; y++){
if(data[x] > data[y]){
temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
System.out.print(data[x] + " ");
}
System.out.println("\nDescending");
for(int x = 0; x < data.length;x++){
for(int y = x + 1; y < data.length; y++){
if(data[x] < data[y]){
temp = data[x];
data[x] = data[y];
data[y] = temp;
}           
}
System.out.print(data[x] + " ");
}   
}
Lalu buat class baru untuk menampilkan data – data yang ingin dimasukkan. Pada contoh kali ini nama classnya adalah Main.
public class Main {
public static void main(String[] args){
Process angky = new Process();
angky.masuk(4);
angky.masuk(8);
angky.masuk(3);
angky.masuk(1);
angky.masuk(2);
System.out.print(angky.min());
System.out.println("");
Process cahaya = new Process();
cahaya.masuk(4);
cahaya.masuk(8);
cahaya.masuk(3);
cahaya.masuk(1);
cahaya.masuk(2);
System.out.print(cahaya.max());
System.out.println("");
Process putra = new Process();
putra.masuk(4);
putra.masuk(8);
putra.masuk(3);
putra.masuk(1);
putra.masuk(2);
putra.tampil();
}
}
PENTING!!!
Tabulasi dalam java sangatlah penting, apabila temen – temen mengcopas script di atas, pasti nantinya tabulasi di atas akan lurus rata kiri. Solusinya (khusus yang menggunakan netbeans) yaitu setelah temen – temen mengcopas script di atas, tekan Shift + Alt + F. Secara otomatis netbeans akan mengatur tabulasi script yang tentu saja akan memudahkan pembacaan script.

Jumat, 20 Mei 2011

Selection sort

Ok, kali ini ane mau share tentang bagaimana sorting secara selection sort. Pada kesempatan kali ini ane coba jelasin selection sort dengan menambah penjelasan dalam program itu sendiri. Silahkan membuat class baru lalu copy script di bawah ini:

    public static void main(String[] args) {
        int[] data = {8, 4, 2, 6, 3, 7, 17, 28};
        int tampung = 0;
        for (int x = 0; x < data.length; x++) {
            for (int y = x + 1; y < data.length; y++) {
                System.out.println("\nmembandingkan " + data[x] + " dengan " + data[y]);
                System.out.print("awalnya data[x] adalah " + data[x] + " lalu ");
                if (data[x] > data[y]) {
                    tampung = data[x];
                    data[x] = data[y];
                    data[y] = tampung;
                    System.out.print("data[x] menjadi " + data[x] + ", data[y] menjadi " + data[y] + ". ");
                }
                else{
                    System.out.print("data[x] tidak ditukar karena tidak memenuhi kondisi if dan data[y] berlanjut. ");
                }
            }
            System.out.println("");
        }
    }

Keterangan yang warna merah akan membantu temen" dalam mengerti tentang  selection sort.
Semoga bermanfaat!!!

Senin, 02 Mei 2011

Perkalian Matriks

Berikut adalah contoh script perkalian matrix berordo 2 X 2:
public class Matrix {
    public static void main(String[] args){
        int a[][] = {{1,5},{2,8}};
        int b[][] = {{6,7},{9,3}};
        System.out.println("a * b");
        int[][] temp = new int[a.length][a.length];//variable array 2D untuk menyimpan hasil a * b
        int kali;//variable untuk menyimpan hasil perkalian
        int tambah = 0;//variable untuk menyimpan hasil penjumlahan dari perkalian
        for(int x = 0; x < a.length; x++){
            for(int y = 0; y < a.length; y++){
                for(int z = 0; z < a.length; z++){
                    kali = a[x][z] * b[z][y];
                    tambah += kali;
                }
                tempa[x][y] = tambah;
                tambah = 0;//mengeset nilai tambah menjadi 0 agar perulangan berikutnya, variable tambah tidak membawa nilai sebelumnya
            }
        }
        for(int x = 0; x < temp.length; x++){
            for(int y = 0; y < temp.length; y++){
                System.out.print(temp[x][y] + " ");//menampilkan hasil akhir matrix dari proses di atas
            }
            System.out.println("");
        }
    }
}

Contoh si atas merupakan contoh perkalian matrix 2 X 2, Temen - temen bisa nambahin sendiri sesuai keinginan temen - temen, script di atas berlaku untuk ordo 3 X 3, 4 X 4, 5 X 5,dst.
Semoga Bermanfaat!

Minggu, 24 April 2011

Link List

Sebagai lanjutan dari artikel sebelumnya tentang cara menampilkan Linked List, kali ini Ane mau sedikit share tentang cara mengakses linked list.
Oke, pada contoh kali ini nama class yang berisi data adalah Kotak:
berikut ini adalah cara untuk menghapus angka setelah data yang di cari:
public Kotak hapusSetelah(int cari){
        Kotak point = awal;
        while(awal.angka != cari){//Proses selama angka awal tidak sama dengan angka yang dicari
            awal = awal.next;
        }
        return point;
    }
cara untuk menghapus data sebelum data yang dicari:
    public Kotak hapusSebelum(int cari){
        Kotak point = awal;
        while(awal.angka == cari){
            if(awal.next == null){//Proses ini mengeset nilai setelah angka yang di cari null, link list akan berhenti
                return null;
            }
        }
        return point;
    }
cara untuk menghapus salah satu data pada Link List:
Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != hapus){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){//proses ini berlaku apabila angka yang keluar dari perulangan while adalah angka yang paling awal
            awal = awal.next;//data awal "loncat" ke data berikutnya sehingga data paling awal tidak dicetak
        }
        else{//proses ini berlaku apabila angka yang keluar dari perulangan while selain angka paling awal
            point2.next = point1.next;
        }
        return point2;
    }
cara untuk mencari data yang diinginkan:
Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != cari){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){//apabila angka yang dicari berada paling awal
            point1.next = null;
        }
        else{//apabila angka yang dicari selain data awal
            awal = point2.next;//mengeset nilai awal menjadi data yang di cari
            point1.next = null;//mengeset nilai setelah data yang dicari adalah null, link list berhenti
        }
        return point1;
    }
cara untuk memasukkan data setelah angka yang ditunjuk:
public Kotak insertSetelah(int insert){
        Kotak masuk = new Kotak(7, 7.0, "tujuh");
        Kotak point1 = awal;
        Kotak point2 = awal;
        while(point2.angka != insert){
            if(point2.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point2 == awal){//apabila data yang dimasukkan setelah data awal
            awal.next = masuk;
            masuk.next = point1;
        }
        else{//apabila data yang dimasukkan setelah data selain
            point2.next = masuk;
            masuk.next = point1;
        }
        return point1;
    }
cara untuk memasukkan data sebelum angka yang ditunjuk:
    public Kotak insertSebelum(int insert){
        Kotak masuk = new Kotak(6, 6.0, "enam");
        Kotak point1 = awal;
        Kotak point2 = awal;
        while(point1.angka != insert){
            if(point1.next == null){
                return null;
            }
            else{
                point2 = point1;
                point1 = point1.next;
            }
        }
        if(point1 == awal){
            point1 = null;
        }
        else{
            point2.next = masuk;
            masuk.next = point1;
        }
        return point1;
    }

Jangan lupa bahwa method di atas diletakkan di class KotakList. Untuk lebih jelasnya lihat artikel sebelumnya.
Semoga artikel ini bermanfaat. Mohon maap apabila ada kesalahan :)

Pada artikel mendatang akan dijelaskan tentang penerapan link list.Check it out!!!