Selamat Datang Di Blog Kami Semoga Bermanfaat


Sunday, November 21, 2010

Tag-tag Applet HTML

Pada contoh sebelum-sebelumnya, Anda sudah melihat bagaimana tag-tag applet HTML
digunakan dalam dokumen HTML atau source code java. Sekarang, Anda akan
dikenalkan pada versi tag-tag applet HTML yang lebih lengkap.

Kata kunci Applet HTML Tag
CODEBASE
Direktori dimana class applet diletakkan. Untuk dokumen HTML, direktori URL sesuai
dengan setting awalnya/defaultnya.
CODE
Nama file yang berisi kode applet. Dengan atau tanpa nama ekstensi .java atau .class .
ALT
Text ditampilkan jika browser mengerti applet tags tapi applet tidak dapat dieksekusi
secara langsung. Mungkin terjadi jika Javanya disabled.
NAME
Nama dari applet. Digunakan untuk memungkinkan applet yang lain untuk
berkomunikasi dengan applet ini dengan menunjukkan suatu applet berdasarkan
namanya.
WIDTH, HEIGHT
Width dan height dari window applet. Dinyatakan dalam pixel.
ALIGN

Kata kunci Applet HTML Tag
Alignment atau pengaturan posisi dari applet. Satu diantara "left", "right", "top",
"bottom", "middle", "baseline", "texttop", "absmiddle", atau "absbottom". Peletakan
posisi secara Default tergantung pada lingkungan.
"top" – posisi atas dari applet diratakan dengan item tertinggi dalam baris yang ada.
"bottom", baseline – posisi bawah dari applet diratakan dengan bawah dari content lain
dalam baris yang sama.
"middle" – tengah dari applet diratakan dengan bawah dari content yang lain dalam
baris yang sama.
"texttop" – posisi atas dari applet diratakan dengan posisi atas dari applet diratakan
dengan posisi tertinggi dari posisi atas pada baris yang sama.
"absmiddle" – tengah dari applet diratakan dengan vertical middle dari content lain
pada baris yang sama.
"absbottom" – posisi bawah dari applet diratakan dengan posisi bawah dari content lain
dalam baris yang sama.
VSPACE, HSPACE
Spasi diatas dan dibawah (VSPACE) dan pada sisi (HSPACE) dari applet..
PARAM NAME, VALUE
Untuk mengelompokkan parameter yang dapat menampilkan applet; applet dapat
meminta method getParameter(String paramName).
Table 1.3: Applet HTML Tags
Contoh dibawah ini mendemokan bagaimana untuk mengakses parameter tertentu pada
HTML tag.
import java.awt.*;
import java.applet.*;
/*



*/
public class ParamDemo extends Applet {
public void paint(Graphics g) {
g.drawString(getParameter("myParam"), 80, 25);
}
}
Output dari program ini sama seperti applet Hello World.

Method paint

Method lain yang tidak kalah penting adalah method paint, yang mana class Applet
menurunkannya dari class induknya yaitu class Component, yang meminta output applet
setiap waktu yang diperlukan untuk dapat digambar kembali. Sebagai contoh dari setiap
instance adalah ketika sebuah applet tersembunyi oleh window lain dapat dibuat terlihat
lagi. Method ini selalu menolak ketika Anda ingin membuat bagaimana applet yang Anda
buat harus terlihat seperti yag Anda inginkan. Pada contoh Hello World, applet memiliki
string "Hello world!"pada background setelah menolak method paint.
11.3.3 Method ShowStatus
Applet memiliki window status, dimana memberi informasi kepada Anda tentang apa
yang sebenarnya dilakukan applet. Jika Anda ingin memberi output ke window status,
secara sederhana memanggil method showStatus.
Contoh berikut ini sama seperti contoh Hello World tapi dengan pernyataan tambahan
yang memodifikasi isi dari window status.import java.awt.*;
import java.applet.*;
/*


*/
public class AppletDemo extends Applet {
public void paint(Graphics g) {
g.drawString("Hello world!", 80, 25);
showStatus("This is an important information.");
}
}
Memainkan Klip Audio
Applet juga menyediakan layanan melalui adanya suatu method yang memungkinkan
Anda untuk memainkan file audio. Memainkan audio clips dalam sebuah applet
melibatkan dua langkah dasar :
1. Dapatkan audio clip menggunakan method getAudioClip.
2. Untuk memainkan audio clip, menggunakan method play atau loop pada object audio
clip. play memungkinkan Anda untuk memainkan audio satu kali mengingat loop
berulang pada audio clip dan berhenti hanya ketika method stop dipanggil.
Contoh berikutnya memainkan file audio secara terus-menerus hingga method stop
applet dipanggil.


import java.awt.*;
import java.applet.*;
/*


*/
public class AudioApplet extends Applet {
AudioClip ac;
public void init() {
try {
/*audio clip tersimpan dalam direktori yang sama
seperti kode javanya*/
/* spaceMusic telah terdownload dari java.sun.com */
ac = getAudioClip(getCodeBase(), "spaceMusic.au");
ac.loop();
} catch (Exception e) {
System.out.println(e);
}
}
public void stop() {
ac.stop();
}
public void paint(Graphics g) {
g.drawString("Playing space music!", 80, 25);

}
}

Method-Method Applet

Bagian ini membahas manfaat-manfaat method applet.
11.3.1 Siklus Applet (The Applet Life Cycle)
Bahkan untuk memulai eksekusi pada method main seperti dalam aplikasi khas Java,
browser atau applet viewer berhubungan dengan applet melalui method-method
berikut:
1. init()
init adalah method yang dipanggil pertama kali. Yang sebenarnya berisi permintaan
pertama ketika applet di load.
2. start()
Setelah meminta method init, mulai dengan method yang dipangil selanjutnya.
method ini meminta dokumen HTML yang ditampilkan applet setiap waktu. Eksekusi
ringkasan dengan method ini dilakukan ketika applet ditampilkan kembali.
3. stop()
Ketika web browser meninggalkan dokumen HTML applet,method ini dipanggil untuk
menginformasikan applet bahwa dia harus menghentikan proses eksekusinya.
4. destroy()
Method ini dipanggil ketika applet perlu dihapus dari memory. Method stop selalu
dipanggil sebelum method ini diminta untuk dijalankan.
Ketika membuat applet, sedikitnya beberapa dari method ini telah meng-override.
contoh applet berikut meng-override method berikut.
import java.applet.*;
import java.awt.*;
/*


*/
class LifeCycleDemo extends Applet {
String msg ="";
public void init() {
msg += "initializing... ";
repaint();
}
public void start() {
msg += "starting... ";
repaint();
}
public void stop() {
msg += "stopping... ";
repaint();
}
public void destroy() {
msg += "preparing for unloading...";
repaint();
}
public void paint(Graphics g) {
g.drawString(msg, 15, 15);
}
}
Contoh dokumen html berikut tergabung dalam applet LifeCycleDemo .

Life Cycle Demo


Membentuk Applet Java Program

Sebuah applet adalah tipe yang spesial dari program java yang dieksekusi melalui
internet. Secara khusus berjalan pada suatu web browser seperti Netscape Navigator,
Mozilla, atau Microsoft Internet Explorer. Bagaimanapun juga, jika dibandingkan dengan
aplikasi Java yang normal, tidak diperbolehkan mengakses applet pada komputer yang
dijalankan untuk alasan keamanan. Applet ini cukup terbatas jika dibandingkan dengan
aplikasi Java.
Pada module ini, Anda akan mempelajari tentang membuat applet menggunakan AWT.

Hello World Applet
Class Applet adalah sebuah subclass dari class Panel yang didefinisikan dalam AWT.
Cara terbaik untuk memahami bagaimana membuat applet adalah dengan contoh. Jadi,
berikut ini adalah contoh applet sederhana yang menampilkan "Hello world!".
import java.awt.*;
import java.applet.*;
/* masukkan bagian ini dalam kode html


*/
public class AppletDemo extends Applet {
public void paint(Graphics g) {
g.drawString("Hello world!", 80, 25);
}
}
Setelah proses kompilasi, usahakan menjalankan contoh ini menggunakan perintah java.
Apa yang terjadi? Ingat bahwa applet adalah aplikasi java yang spesial. Mereka tidak
dieksekusi menggunakan perintah java. Bahkan applet berjalan pada web browser atau
menggunakan applet viewer. Untuk membuka applet melalui sebuah web browser,
secara sederhana buka dokumen HTML dimana applet terintegrasi ke dalamnya
menggunakan applet HTML tag (Perintah mengeluarkan kode pada contoh Hello World).
Cara lain untuk menjalankan sebuah applet adalah melalui perintah appletviewer. Untuk
lebih mudahnya ikuti syntax berikut ini:
appletviewer
Untuk menjalankan contoh applet yang dijalankan , menggunakan:
appletviewer AppletDemo.java
Tag HTML pada contoh yang diberikan mengindikasikan bahwa sebuah applet dibuat
dengan lebar 300 pixel dan tinggi 100 pixel. Kemudian, method drawString
menggambar string "Hello world!" pada posisi pixel (80,25) menghitung kebawah dari
bagian kanan.

Ketika membuat sebuah applet, diharuskan meng-extend class Applet. Sebagaimana
yang disebutkan sebelumnya, classnya dapat ditemukan dalam package java.applet.
Oleh karena itu, mengimport package java.applet merupakan suatu keharusan. Juga,
telah disebutkan sebelumnya bahwa class Applet adalah subclass dari class Panel. Hal ini
mengimplikasikan bahwa beberapa method dari class applet ditemukan dalam class
Panel. Untuk mengakses method atau field dalam class Panel atau class-class induk,
diperlukan suatu aksi untuk import package java.awt .

Apa itu Exception? Dalam Java

Bugs dan error dalam sebuah program sangat sering muncul meskipun program
tersebut dibuat oleh programmer berkemampuan tinggi. Untuk menghindari
pemborosan waktu pada proses error-checking, Java menyediakan mekanisme
penanganan exception.
Exception adalah singkatan dari Exceptional Events. Kesalahan (errors) yang terjadi
saat runtime, menyebabkan gangguan pada alur eksekusi program. Terdapat
beberapa tipe error yang dapat muncul. Sebagai contoh adalah error pembagian 0,
mengakses elemen di luar jangkauan sebuah array, input yang tidak benar dan
membuka file yang tidak ada.

Error dan Exception Classes

Seluruh exceptions adalah subclasses, baik secara langsung maupun tidak langsung,
dari sebuah root class Throwable. Kemudian, dalam class ini terdapat dua kategori
umum : Error class dan Exception class.
Exception class menunjukkan kondisi yang dapat diterima oleh user program.
Umumnya hal tersebut disebabkan oleh beberapa kesalahan pada kode program.
Contoh dari exceptions adalah pembagian oleh 0 dan error di luar jangkauan array.
Error class digunakan oleh Java run-time untuk menangani error yang muncul pada
saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya
disebabkan oleh run-time environment. Sebagai contoh adalah out of memory dan
harddisk crash.

Sebuah Contoh

Perhatikan contoh program berikut :
class DivByZero {
public static void main(String args[]) {
System.out.println(3/0);
System.out.println(“Cetak.”);
}
}
Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai berikut :
Exception in thread "main" java.lang.ArithmeticException: / by
zero at DivByZero.main(DivByZero.java:3)
Pesan tersebut menginformasikan tipe exception yang terjadi pada baris dimana
exception itu berasal. Inilah aksi default yang terjadi bila terjadi exception yang tidak
tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi, aksi
default akan bekerja otomatis. Aksi tersebut pertama-tama akan menampilkan
deskripsi exception yang terjadi. Kemudian akan ditampilkan stack trace yang
mengindentifikasi method dimana exception terjadi. Pada bagian akhir, aksi default
tersebut akan menghentikan program secara paksa.
Bagaimana jika Anda ingin melakukan penanganan atas exception dengan cara yang
berbeda? Untungnya, bahasa pemrograman Java memiliki 3 keywords penting dalam
penanganan exception, yaitu try, catch dan finally.

Saturday, September 25, 2010

Contoh Script Program Java

Buat teman teman jika ingin belajar java dengan cepat.
ini ada beberapa tips yaitu Banyak baca buku mengenai bahasa pemograman Java lalu banyak berlatih untuk menulis script dengan bahasa pemograman itu.
Untuk memudahkan saya akan memberikan beberapa contoh demo dari bahasa pemograman bahasa Java.Dibawah ini ada beberapa contoh demo yang saya dapat dari beberapa sumber silahkan di klik linknya untuk di download.

Array
Catch
Chart
Constructor
Contoh Script
Equals
Exepsi
Hitung Bangun
Insert
Luas Bangun
Method
Menu
Pegawai
Replace
FOR
Overload
Rekursi
Switch
While
String
Super
Super Threads
Throws
While 1
Aritmatika dan Variabel
Baca File dan Hapus Elemen
Button Box
Capacity
Object dan Value
Tree dan Boolean

Friday, July 16, 2010

Exception dalam Input Java Program

Java bukan bahasa pemrograman untuk Console (seperti DOS atau Linux), sehingga untuk mengambil input dari user diperlukan sedikit trik yang tidak sesederhana readln pada bahasa pemrograman lain.

Di sini saya akan menjelaskan untuk membuat program yang bisa mengambil input dari konsol teks. Di bagian lain, setelah kita belajar pemrograman berorientasi objek, kita akan menggunakan GUI untuk mendapatkan interaksi dari user.

Membaca String yang diketik oleh user di konsol

Kita membutuhkan kelas yang beberapa kelas, yaitu BufferedReader, InputStreamReader, dan System.in (lawan dari System.out yang kita gunakan untuk menampilkan pesan di layar).

Dua kelas pertama terdapat dalam package yang dinamakan java.io. Untuk itu, kita harus menambah satu baris perintah

import java.io.*

yang berarti mengimport semua kelas dalam paket java.io (tanda * berarti semua).

Kemudian kita harus juga membuat suatu objek dari kelas BufferedReader. Kelas BufferedReader adalah kelas abstrak yang menangani baca tulis ke suatu media.

Kelas ini membutuhkan kelas lain sebagai pekerjanya, yaitu InputStreamReader. Dan InputStreamReader membutuhkan media tempat baca tulis dilakukan, yaitu System.in.

Semua ini bisa dituliskan dalam satu perintah yaitu :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Di sini variabel br merupakan objek yang merupakan jelmaan dari kelas BufferedReader.

Untuk memerintahkan Java mengambil input dari user, kita gunakan fungsi readline() yang terdapat pada kelas BufferedReader, dalam hal ini terealisasi pada objek br.

nama = br.readLine();

Karena kita berhubungan langsung dengan sistem IO (input-output) komputer yang harus diasumsikan tidak pasti (misalnya ada masalah pada sistem keyboard, atau komputer sedang bekerja berat sehingga input dari user tidak bisa diambil), kita harus menempatkan fungsi readLine() pada klausa

try {
...
} catch (IOException ioe) {
...
}


Perintah di dalam try { ... } adalah perintah yang kita ingin jalankan pada situasi yang "mungkin" tidak berhasil.

Parameter pada catch, yaitu IOException ioe adalah jenis kesalahan yang ingin kita tangkap. Dalam hal ini kita ingin menangkap adanya kesalahan IO, yaitu kesalahan yang bertipe IOException.

Perintah di dalam catch { ... } adalah perintah yang akan dilakukan apabila kesalahan ditangkap. Jika tidak ada kesalahan IO yang ditemukan, maka bagian ini akan dilewatkan (tidak dijalankan).

Mari kita lihat program akhir untuk mengambil input dari user.

package ambilinputkonsol;

import java.io.*;

public class AmbilInputKonsol {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.print("Masukkan nama Anda : ");

// buat objek baru untuk mengambil input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// tempat di mana input dari user akan diletakkan
String nama = null;

try {
nama = br.readLine();
} catch(IOException ioe) {
System.out.println("Kesalahan IO pada saat menanyakan nama Anda");
System.exit(1);
}

System.out.println("Terima kasih, " + nama);
}
}


Untuk menguji program tersebut, jalankan "Run -> Run" atau Ctrl-F11. Kemudian arahkan kursor Anda ke bagian bawah di kotak yang bernama Console.

Masukkan nama Anda, kemudian hasilnya akan ditampilkan pada baris berikutnya.

sumber:http://belajarjava.googlecode.com/svn/trunk/AmbilInputKonsol

Tuesday, June 22, 2010

Konstruktor dalam JAVA

Berikut ini adalah hal hal yang harus kita perhatikan berkaitan dengan pembuatan konstruktor:
1.Konstruktor harus menggunakan nama yang sama dengan class.termasuk huruf besar dan kecilnya.
2.Dalam satu class bisa terdapat lebih dari satu konstruktor.
3.konstruktor akan dieksekusi setiap kli ada pembuatan objek.
4.Setiap class harus mempunyai paling tidak sebuah konstruktor.
5.Jika sudah mendeklarasikan konstruktor, maka konstruktor default tidak akan dibuat oleh kompiler Java.

Sebuah class memiliki beberapa konstruktor.Konstruktor yang dibuat lebih dari satu dibunakan untuk keperluan berikut:
1.Menentukan nilaiInstance variabel yang berbeda. Jadi, pada setiap konstruktor diinisialisasi variabel yang berbeda.
2.Melakukan tugas awal dengan menjalankan metode tertentu,seperti untuk melakukan penghitungan. Jadi, selama konstruktor dijalankan,akan dilakukan penghitungan.
Contoh deklarasi konstruktor

identifier_class([tipe identifier,tipe identifier,...]){
// inisialisasi variabel
// perhitungan awal


Pada contoh ini akan dibuat empat buah konstruktor yang berfungsi untuk membuat objek dengan tipe lingkaran.Class lingkaran diidentifikasi dengan kode berikut:

public class Lingkaran{
Float x,y,jari;
// konstruktor diletakan disini
}


Dibawah ini adalah contoh konstruktor yang dapat didefinisikan untuk class Lingkaran diatas.

1. Lingkaran dibuat dengan nilai default, jari jarinya = 1 dan berada di koordinat (0,0)

public Lingkaran (){

this jari = 1;
this x = 0;
this y = 0;
}



2. Konstruktor digunakan untuk membuat lingkaran dengan jari jari dan posisi yang kita tentukan sendiri.

public Lingkaran(float jari,float X,float y) {

this.jari=jari;
this.x=x;
this.y=y;


3. konstruktor digunakan untuk membuat lingkaran dengan jari jari default = 1, dengan posisi yang kita tentukan sendiri

public lingkaran(float x, float y){
this.jari=1;
this.x=x;
this.y=y;
}


4.Konstruktor digunakan ntuk membuat lingkaran dengan posisi default,yaitu di koordinat (0,0), namun jari jarinya kita tentukan sendiri.

public Lingkaran(float jari){
this.jari=jari;
this.x=x;
this.y=y;
}


dengan satu nama konstruktor, dapat dibuat objek lingkaran dengan jari jari dan posisi yang berbeda.

Monday, June 14, 2010

Tipe Data Primitif Dalam Java

Semua nilai yang ada didalam program Java adalah referensi terhadap objek.
Tipe data primitif adalah tipe data yang mempunyai nilai tertentu,bukan referensi Class ataupun objek. Berdasarkan tipe datanya data primitif dapat dikelompokan menjadi empat :

1. Tipe data Integer atau bilangan bulat meliputi : byte, short,int,long
2. Tipe data float atau bilangan nyata meliputi : float dan double
3. Tipe data char atau karakter yaitu : char
4. Tipe data Boolean : boolean

berikut adalah besar nilai dari yang dapat diterapkan pada masing masing tipe data primitif:


Tipe data= byte Besar storage= 8 bit(1byte) Nilai minimal= -128 Nilai maksimal= 127
Tipe data= short Besar storage= 16 bit(2byte) Nilai minimal= -32768 Nilai maksimal= 32767
Tipe data= int Besar storage= 32 bit(4byte) Nilai minimal= -2147483648 Nilai maksimal= 2147483647
Tipe data= long Besar storage= 64 bit(8byte) Nilai minimal=-9223372036854775808 Nilai maksimal= 9223372036854775807
Tipe data= float Besar storage= 32 bit(4byte) Nilai minimal= +/-3.4E-38 Nilai maksimal= +/-3.4E+38
Tipe data= double Besar storage= 64 bit(8byte) Nilai minimal= +/-1.7E-308 Nilai maksimal= +/-1.7E+308
Tipe data= char Besar storage= 16 bit(2byte) Nilai minimal= \u0000 Nilai maksimal= \uFFFF
Tipe data= boolean Besar storage= 1 bit Nilai maksimal= True atau False

Tipe data Boolean
Digunakan untuk menentukan suatu kondisi apakar suatu pernyataan True (benar) atau False(salah).Nilai boolean sering digunakan untuk mengatur alur program, terutama dalam perulangan dan percabangan.
contoh:

boolean isLulus = True; // sudah lulus
boolean isCumlaude = False; // tidak Cumlaud


Tipe data Char
Tipe data karakter dalam bahasa pemograman Java mempunyai ukuran 16 bit atau setara dengan 2 pangkat 16 = 65.536 kode. 256 adalah kode pertama dalam tipe data char digunakan oleh karakter ASCII.
Karakter ASCII merupakan karakter yang banyak digunakan dalam bahasa inggris.
Tipe data karakter harus didefinisikan menggunakan tanda petik satu (') missalnya:

char bs='B'

Dalam char terdapat escape karaker yang digunakan untuk menampilkan karakter khusus, seperti tab atau pergantian baris:

\b keterangannya = Backspace
\t keterangannya = Tab
\n keterangannya = Linefeed
\f keterangannya = Formfeed
\r keterangannya = Carriage Return
\\ keterangannya = Backslash
\' keterangannya = Single Quoute
\" keterangannya = Double Quoute
\ddd keterangannya = Oktal, misal '\123' setara dengan huruf S
\udddd keterangannya = Karakter unicod, misal '\u1234' setara dengan tanda tanya ?

Berikut kode untuk menampilakan tulisan: Aku ingin " Hidup bahagia selamanya!"
pada comand promt.

System.out.println("Aku ingin\"Hidup bahagia!\"");

Tipe data Integer

Integer adalah tipe data yang merupakan bilangan bulat.
Dalam bahasa java terdapat empat buah integer.Semuanya dapat bernilai negatif maupun positif yaitu ; byte,short,long,dan int.
Perbedaan dari keempatnya hanyalah dari pada ukurannya saja.
Semakin besar ukuran tipe data integer tersebut maka akan semakin besar nilai yang dapat ditampung.

contoh bit z = 1;

Tipe data Floating point

Tipe data ini merupakan bilangan rasional.Dalam bahasa pemograman terdapat dua tipe yaitu Float dan double. perbedaan keduanya terletak pada ukurannya yaitu 32bit dan 64 bit.
Penulisan bilangan floating point menggunakan tanda titik sebagai tanda desimal atau bisa juga menggunakan tanda eksponensial e atau E.

contoh:
double a = 12.34; // 12,34
double b = .01; // 0,01
double c = 1e-6 // 1* 10^-6 atau 0,000006
double d =5200000D // 5,2*10^6


Demikianlah uraian mengenai tipe data..
semoga dapat membantu menambah wawasan anda tentang tipe data dalam bahasa Java.

Saturday, June 12, 2010

Inisiasi dan Deklarasi dalam Java

Ketika perintah deklarasi variabel dilaksanakan, komputer akan menyiapkan memori untuk digunakan oleh variabel ini. Memori ini harus diinisialisasi,yaitu diberi suatu nilai awal sebelum bisa digunakan dalam perintah berikutnya. Pada variabel lokal, pernyataan deklarasi sering diikuti oleh perintah pemberi nilai awal. Misalnya,

int i; // Deklarasi variabel yang bernama i
i = 0; // Beri nilai awal


Kita bisa juga melakukan deklarasi sekaligus inisialisasi variabel tersebut. Kedua pernyataan di atas bisa kita gabung menjadi

int i = 0; // Deklarasi variabel i sekaligus memberi nilai awal 0

Komputer akan tetap melakukan perintah di atas dalam dua langkah: deklarasi variabel, kemudian mengisi nilai awal 0. Nilai awal tidak harus berupa suatu bilangan, tetapi bisa juga berupa ekspresi yang menghasilkan suatu nilai. Dan juga kita boleh melakukan inisialisasi beberapa variabel sekaligus dalam 1 baris. Misalnya:

int x = 0, y = 1;
int awal, akhir = 'A' // Ok, tapi hanya akhir yang akan diinisialisasi
int N = 3, M = N+2; // Ok, karena N sudah diberi nilai awal sebelum digunakan oleh

Fitur ini biasa ditemui pada perulangan for, karena pernyataan 1 baris ini bisa dimasukkan sebagai variabel kontrol di awal pernyataan for. Karena variabel kontrol biasanya tidak berhubungan dengan bagian program di luar perulangan, maka akan lebih praktis jika deklarasi variabel kontrol itu dilakukan di awal perulangan.Contoh:

for ( int i = 0; i < 10; i++ ) {
System.out.println(i);
}


Tanda kurung { dan } di awal dan akhir untuk mempertegas bahwa i hanya bersifat lokal di dalam perulangan yang tidak bisa diakses lagi setelah perulangan selesai.

{
int i;
for ( i = 0; i < 10; i++ ) {
System.out.println(i);
}
}


Variabel anggota juga bisa diinisialisasi di mana dia dideklarasikan.Contoh:

public class Bank {
static double sukuBunga = 0.1; // sama dengan 10%
static long maxPenarikan = 3000000;
.
. // Perintah dan variabel lain
.
}


Variabel anggota statik akan dibuat pada saat kelas mulai dimasukkan memori oleh interpreter Java, inisialisinya pun dilaksanakan pada saat itu. Pada variabel anggota, deklarasi dan inisialisasi ini bukan hanya sekedar singkatan dari 2 perintah seperti pada variabel lokal. Pernyataan deklarasi adalah pernyataan yang bisa dibuat di luar subrutin, sedangkan inisialisasi tidak bisa dilakukan di luar subrutin.
Contoh di bawah tidak diperbolehkan dalam Java.

public class Bank {
static double sukuBunga;
sukuBunga = 0.1; // ILEGAL, perintah ini harus ada di dalam subrutin
}


Karenanya, deklarasi variabel anggota biasanya juga dirangkai dengan inisialisasi nilai awalnya. Jika tidak ada nilai awal yang diberikan, maka nilai awal bawaan akan digunakan.
Misalnya "static int i;" setara dengan "static int i = 0;".
Konstanta dan Sifat "final"

Kadang-kadang dalam kondisi tertentu, kita ingin nilai suatu variabel tidak boleh berubah setelah diberi nilai awal. Misalnya, D diinisialisasi dengan nilai 3.14159, maka nilai ini akan bisa diubah oleh bagian lain dalam program. Di sini mungkin sang programmer ingin mendefinisikan suatu konstanta yang diberi nama "D" sebagai pengganti dari bilangan 3.14159.

Dengan cara ini, program akan lebih mudah dimengerti apabila program tersebut ditulis dalam "keliling = D*diamater;" daripada "pokok = 3.14159*diameter;".
Dalam java, sifat "final" bisa digunakan pada deklarasi variabel untuk membuat nilai suatu variabel tidak bisa diubah setelah diinisialisasi. Misalnya
final static double D = 3.14159;
Apabila kita mencoba mengganti isi variabel tersebut, misalnya di tengah program dengan perintah "D = 20;" komputer akan menampilkan pesan kesalahan sintaks pada saat kompilasi.
Sifat "final" boleh diberikan pada variabel lokal dan bahkan pada parameter formal, akan tetapi paling berguna apabila diberikan pada variabel anggota. Variabel anggota statik yang dideklarasikan dengan sifat "final" juga disebut sebagai konstanta yang diberi nama.
Program akan jauh lebih mudah dibaca dengan menggunakan konstanta bernama ini jika diberikan pada sesuatu angka penting yang digunakan dalam program. Gaya penulisan yang dianjurkan untuk konstanta bernama ini adalah dengan menggunakan huruf besar dengan baris bawah (jika diperlukan).Contohnya:

final static double PI = 3.14159;

Gaya penulisan seperti ini juga digunakan oleh kelas standar Java, yang di dalamnya terdapat banyak sekali konstanta bernama. Misalnya, konstanta D sudah didefinisikan Java dalam kelas Math, yaitu Math.D, sehingga kita tidak perlu mendefinisikannya sendiri.
Contoh lain adalah memberikan nama untuk gaya huruf, seperti Font.PLAIN, Font.BOLD dan Font.ITALIC. Konstanta ini digunakan untuk menandai gaya huruf untuk digunakan oleh subrutin lain dalam kelas Font.
Salah satu alasan untuk menggunakan konstanta bernama adalah supaya kita bisa mengubah isinya dengan cepat apabila di kemudian hari kita ingin memiliki nilai konstanta yang berbeda. Apabila nilai ini diubah, maka kita harus mengkompilasi ulang program kita, karena nilai ini tidak bisa diubah ketika program dieksekusi.
Misalnya kita definisikan suku Bunga pada contoh di atas sebagai konstanta bernama, yaitu
static final double SUKU_BUNGA = 0.1;

Suatu saat misalnya 2 tahun kemudian, bank tersebut ingin mengubah suku bunganya menjadi 5% atau 0.05. Kita bisa mengubah nilainya hanya di satu tempat yaitu di mana deklarasi SUKU_BUNGA berada. Kita tidak perlu mencari semua nilai 0.1 di dalam program untuk menggantinya satu per satu. Selain repot, mungkin membingungkan karena 0.1 bisa digunakan untuk nilai lainnya, bukan hanya nilai suku bunga.

Aturan Penamaan dan Jangkauan (scope)
Ketika deklarasi variabel dieksekusi, komputer akan menyediakan tempat di memori untuk variabel tersebut. Nama variabel dapat digunakan oleh kode program untuk mengacu pada alamat di mana data tersebut disimpan di dalam memori. Bagian di dalam kode sumber (yaitu program Java yang kita tulis, masih dalam bentuk yang dimengerti manusia sebelum dikompilasi menjadi bahasa mesin) di mana variabel tersebut valid dan bisa digunakan disebut jangkauan variabel. Bukan hanya variabel yang memiliki jangkauan, tetapi juga nama subrutin dan nama parameter formal.
Untuk subrutin statik, jangkauannya lebih mudah dipahami. Jangkauan subrutin statik adalah kelas di mana ia didefinisikan. Kita bisa juga memanggil subrutin itu dari dalam kelas dirinya sendiri. Dalam pemrograman tingkat lanjut, teknik ini disebut rekursi (recursion), yaitu subrutin yang memanggil dirinya sendiri.
Untuk variabel anggota suatu kelas, aturannya sama, tetapi dengan sedikit pengecualian. Kita boleh memiliki variabel lokal atau parameter formal yang namanya sama dengan variabel anggota static. Jika ini terjadi, maka variabel anggota akan disembunyikan oleh Java. Dalam contoh berikut :

public class Game {
static int hitung; // variabel anggota
static void mainGame() {
int hitung; // variabel lokal
.
. // Perintah untuk main game
.
}
.
. // Variabel dan subrutin lain
.
} // akhir kelas Game


Kita lihat bahwa dalam subrutin mainGame(), "hitung" mengacu pada dua hal yaitu variabel lokal dan variabel anggota statik. Di luar kelas Game, "hitung" hanya mengacu pada variabel anggota statik. Dalam situasi seperti ini, di dalam subrutin mainGame() maka "hitung" sebagai variabel anggota akan disembunyikan oleh Java. Untuk menggunakan variabel anggota ini, kita bisa menggunakan nama lengkapnya yaitu Game.hitung. Akan tetapi trik ini tidak bisa digunakan untuk variabel anggota yang tidak statik.
Jangkauan parameter formal di dalam suatu subrutin berada di dalam blok di mana ia dideklarasikan. Sehingga pada "for (int i=0; i<10; i++)" variabel i hanya bisa di lihat di dalam blok perulangan for, tetapi tidak valid di luar perulangan ini meskipun pada subrutin yang sama.
Akan tetapi kita tidak boleh mendeklarasikan parameter formal dengan nama yang sama dengan variabel lokal yang berlaku di sana.Contohnya:

void subrutinJelek(int y) {
int x;
while (y > 0) {
int x; // ERROR: x sudah didefinisikan sebelumnya
.
.
.
}
}


Dalam bahasa pemrograman lain, pernyataan di atas masih dibolehkan, yaitu dengan menyembunyikan x pada deklarasi sebelumnya. Akan tetapi pada Java, segera setelah blok yang memuat suatu variabel selesai, namanya bisa dipergunakan kembali.Contohnya:

void subrutinBagus(int y) {
while (y > 10) {
int x;
.
.
.
// Jangkauan x berakhir di sini
}
while (y > 0) {
int x; // OK: Deklarasi x sebelumnya sudah kadaluarsa
.
.
.
}
}


Ada beberapa hal lain yang menarik di Java. Nama subrutin dan variabel boleh sama, karena komputer akan selalu dapat membedakan mana subrutin atau variabel dengan melihat tanda buka kurung '(' setelah namanya. Variabel tidak pernah menggunakan tanda kurung setelah namanya. Sehingga suatu kelas boleh memiliki variabel anggota yang bernama "hitung" dan subrutin yang bernama "hitung()".
Lebih jauh lagi, nama suatu kelas boleh menggunakan nama subrutin atau variabel yang sudah ada. Komputer bisa melihat apakah suatu nama berupa kelas, variabel atau subrutin. Kelas adalah juga tipe data, sehingga suatu kelas bisa digunakan untuk mendeklarasikan variabel dengan tipe kelas tersebut, atau membuat subrutin yang keluarannya bertipe kelas tersebut.
Atau sebagai contoh, perintah berikut bisa diterima oleh program Java :

static Test Test(Test Test) {
.
.
.
}


Test pertama adalah tipe keluaran suatu fungsi. Test kedua adalah nama subrutin. Yang ketiga adalah tipe data parameter, dan keempat adalah nama parameter normal.
Selamat belajar.

Thursday, June 10, 2010

System input dari key board

Membaca input dari key board
Untuk membaca inputan dari program java kita membutuhkan suatu tool program.
Java menyiapkan tools yang namanya System.in sebagai input stream untuk mendapatkan input berbasis teks dari keyboard, sedangkan input yang berbasis grafis menggunakan kelas JTekxtField atau JTextArea.
Karena System.In adalah Input stream, agar input bisa didapat melalui pembacaan maka perlu di Enkapsulasi.
Berikut ini adalah langkah langkah dari proses enkapsulasi:

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader buf = new BufferReader(isr);

Stringstr = buf.readLine(); // String dapat diperoleh dengan memanggil readLine90 dari objek milik kelas BufferedReader.

Penggunaan method readLine() dilakukan didalam blok try-catch.

Ada tiga cara memasukan data melalui key board yaitu:

1. Menggunakan method readLine() yang dipanggil melalui objek milik kelas BufferReader.

2. Menggunakan method showInputDialog() yang langsung dipanggil dari class JOptionPane.

3. Menggunakan method next() yang dipanggil dari objek milik class scanner.


Contoh dalam penulisan program:

import java.io.*;

class DemoInputString {
public static void main(String[] args) throws IOException {

System.out.print("Masukkan nama Anda: ");

String nama;

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

nama = br.readLine();

System.out.println("Halo " + nama +
", sudahkah Anda mengerti Java?");
}
}


Beberapa contoh script silahkan klik:
http://www.ziddu.com/download/10236306/Systeminput.rar.html

Kelas Dalam String

Kelas String memodelkan deretan karakter.Kelas ini terdapat dalam package java.lang.
Sesuai dengan kuantitas constructornya,
ada 7 cara untuk membuat object String :

1. String(); // cara 1

2. String(String value); // cara 2

3. String(char value[]); // cara 3

4. String(byte ascii[], int hibyte); // cara 4

5. String(char value[],int offset,int count); // cara 5

6. String(byte ascii[], int hibyte, int offset, int count); // cara 6

7. String(StringBuffer buffer); // cara 7

Package dalam bahasa pemograman JAVA

Pengertian package adalah sebuah sarana untuk mengelompokan atau mengorganisasikan kelas dan interface yang sama atau sekelompok menjadi satu unit tunggal dalam library.
Secara fisik, package dapat berupa folder yang berisi file file/kelas interface/enum lain yang kegunaannya hampir sama sehingga patut untuk dikelompokan.
Package mempengaruhi mekanisme hak akses ke kelas didalamnya.
Ada tiga langkah dalam membuat package yaitu:

1.Mendeklarasikan dan memberi nama package.
2.Membuat struktur dan nama folder yang sesuai dengan struktur dan nama package.
3.Mengkompilasikan kelas kelas sesuai dengan nama package masing masing.

Mendeklarasikan dan memberi nama package.
Deklarasi package harus diletakan pada bagian paling awal darisuatu source code setiap kelas yang dibungkus package tersebut.

Bentuk umum deklarasi package:

package namaPackage;

Deklarasi tersebut akan memberitahukan interpreter,libraey kelas/ interface yang manakah yang dirujuk dan digunakan.

Syarat nama package:
1. Diawali huruf kecil
2. Menggambarkan kelas kelas yang dibungkusnya.
3. Harus unik
4. Merepresentasikan path dari package tersebut.
5. Harus sama direktorinya.

Contoh package standard:

Berisi kelas fundamental yang sering digunakan : java.lang
Berisi kelas untuk membangun GUI: java.awt dan java.swing
Berisi kelas untuk proses input output: java.io

Membuat Struktur direktori

langkah langah dalam pembuatan direktori mengunakan file manager sesuai struktur package dari langkah yang kita buat sebelumnya. kemudian tempatkan kelas kelas tersebut kedirektori yang bersesuaian.
Package dapat bersarang di package lain,sehingga dapat dibuat hirarki package.

Contoh bentuk umum pernyataan package multilevel:

package namaPackage1[.namaPackage2[.namaPackage3]];

Contoh hirarki package di JDK:

package java.awt.image;


Selanjutanya setiap kelas dalam package tersebut,masing masing dikompilasi menjadi byte code(*.class), sehingga package tersebut siap digunakan.

Menggunakan package

Ada dua cara menggunakan suatu package yaitu:

1. kelas menggunakan suatu package,berada dalam direktori yang sama dengn kelas kelas yang digunakan,sehingga tidak diperlukan import.

2. Kelas yang menggunakan suatu package,berada dalam direktori yang berbeda dengan kelas kelas yang digunakan, sehingga pada awal source code di kelas yang menggunakan harus mencantumkan:

import namaPackage.NamaKelas; atau
import namaPackage.*;

Contoh :

import java.text.DecimalFormat;
import javaxc.swing.*;

Saturday, May 15, 2010

Perulangan for dalam JAVA

Perulangan for
Posted Jum, 02/20/2009 - 07:07 by belajarprogram
Versi ramah cetakVersi ramah cetak
Sumber :http://java.lyracc.com
Kita akan membahas bentuk perulangan lain, yaitu perulangan for. Setiap bentuk perulangan for dapat diubah menjadi bentuk perulangan while dengan fungsi yang sama tanpa mengubah alur program. Tetapi tergantung dari permasalahan yang akan kita pecahkan, menulis program dengan for akan membuat alur program lebih mudah dipahami.

Misalnya, kita akan menghitung 1+2+3+4+5+...+100. Kita bisa ekspresikan program tersebut dalam bentuk

i = 1;
jumlah = 0;
while (i <= 100) {
jumlah += i;
i++;
}


Perulangan ini dapat ditulis juga dengan

jumlah = 0;
for (i = 1; i <= 100; i++)
jumlah += i

Apa point-point penting yang kita lihat dari perubahan ini? Pertama mari kita lihat bentuk penggunaan while yang umum dilakukan

inisialisasi variabel
while (suatu_kondisi_variabel) {
perintah
update_variabel
}


Di sini perulangan while memiliki 3 komponen penting, yaitu inisialisasi,untuk memberikan nilai awal suatu variabel, suatu_kondisi_variabel, yaitu pengujian bahwa perulangan akan terus dilakukan selama kondisi ini bernilai true, dan terakhir update_variabel, yaitu instruksi mengubah nilai kondisi variabel untuk membatasi perulangan sehingga akan selesai suatu saat, tidak berulang terus menerus.

Pada perulangan for, ketiga komponen ini dirangkai menjadi satu dalam bentuk

for (inisialisasi_variabel; kondisi_variabel; update_variabel)
perintah


atau jika perintah merupakan blok yang terdiri dari banyak perintah, dapat dituliskan juga dalam bentuk

for (inisialisasi_variabel; kondisi_variabel; update_variabel) {
banyak_perintah
}


Di sini inisialisasi variabel bisa berupa apa saja yang berbentuk perintah, misalnya memberikan variabel dengan nilai awal tertentu, dalam bentuk variabel = nilai_awal.

kondisi_variabel harus berbentuk pernyataan boolean seperti suatu_kondisi pada pernyataan while. Sedangkan update_variabel juga berbentuk perintah.

inisialisasi_variabel, kondisi_variabel, atau update_variabel dapat dikosongkan dan tidak harus selalu diisi. Bagian yang tidak diisi yang selalu digantikan dengan true, yang artinya perulangan akan terus dieksekusi tanpa henti. Untuk menghentikannya, perintah break harus diberikan ditengah-tengah badan perulangan.

Bentuk paling umum dari perulangan for adalah menghitung. Biasanya perulangan ini memiliki bentuk seperti

for (variabel = nilai_minimum; variabel <= nilai_maksimum; variabel++) {
perintah
}


Perhatikan bagian terakhir adalah menaikkan nilai variabel dengan 1, yang artinya perulangan akan dimulai dengan nilai_minimum, diakhiri dengan nilai_maksimum dengan jeda 1.

Contoh, jika kita ingin berhitung 2,5,8,11,14,17, atau dengan kata lain, mulai dari 2 hingga 17 dengan jeda 3, kita bisa mengekspresikan for dengan

for (i = 2; i <= 17; i += 3) {
System.out.println(i);
}


Untuk menghitung mundur, kita bisa menggunakan perintah seperti

for (i = 20; i >= 0; i--) {
System.out.println(i);
}


Atau jika kita ingin menghitung maju dan mundur pada saat yang bersamaan, misalnya i dari 1 hingga 10 dan j dari 10 hingga 1, kita bisa ekspresikan dengan

for (i = 1, j = 10; i <= 10; i++, j--) {
System.out.println(i + " " + j);
}


Catatan penting! Variabel yang akan digunakan, dalam contoh di atas i dan j, adalah variabel yang harus dideklarasikan sebelumnya. Java adalah bahasa pemrograman ketat, yang artinya semua harus didefinisikan dengan jelas sebelum digunakan. Untuk banyak kasus, deklarasi variabel dan perulangannya bisa dilakukan serentak pada bagian inisialisasi variabel. Misalnya

for (int i = 1; i <= 10; i++) {
System.out.println(i)
}


Perhatikan ada imbuhan int di depan inisialisasi variabel i, yang merupakan deklarasi variabel i dengan tipe data int sekaligus menginisialisasi nilainya dengan 1.

Perulangan for bertingkat

Seperti pada perulangan while, perulangan for pun dapat dilakukan bertingkat, artinya perulangan for di dalam perulangan for.

Kita ambil contoh sederhana misalnya membuat tabel perkalian seperti

1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
4 8 12 16 20 24 28 32 36 40 44 48
5 10 15 20 25 30 35 40 45 50 55 60
6 12 18 24 30 36 42 48 54 60 66 72
7 14 21 28 35 42 49 56 63 70 77 84
8 16 24 32 40 48 56 64 72 80 88 96
9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120
11 22 33 44 55 66 77 88 99 110 121 132
12 24 36 48 60 72 84 96 108 120 132 144

Program untuk membuat tabel perkalian tersebut bisa diekspresikan dengan algoritma pseudocode sebagai berikut

untuk setiap baris i = 1,2,3...,12
cetak perkalian i dengan 1,2,3..12
cetak baris baru


Kalau kita jabarkan lebih lanjut, perintah kedua juga merupakan perulangan dari 1 hingga 12, sehingga algoritma di atas bisa kita tulis sebagai

untuk setiap baris i = 1,2,3...,12
untuk setiap kolom j = 1,2,3...,12
cetak i*j
cetak baris baru


Kita bisa terjemahkan ke dalam bahasa Java sebagai

for (int i = 1; i <= 12; i++) {
for (int j = 1; j <= 12; j++) {
System.out.print(i*j + " ");
}
System.out.println("");
}


Berikut ini adalah contoh program yang bisa diunduh dalam bentuk zip file atau dari gudang SVN di alamat http://belajarjava.googlecode.com/svn/trunk/TabelPerkalian :

package tabelperkalian;

public class TabelPerkalian {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 1; i <= 12; i++) {
for (int j = 1; j <= 12; j++) {
System.out.print(i*j + " ");
}
System.out.println("");
}
}
}



Sumber :http://java.lyracc.com

Blok, Perulangan, dan Percabangan Dalam JAVA

Blok, Perulangan, dan Percabangan
Posted Sen, 02/16/2009 - 00:29 by belajarprogram
Versi ramah cetakVersi ramah cetak
Sumber:http://java.lyracc.com
Kemampuan suatu program untuk melakukan tugas kompleks dilakukan dengan menggabungkan perintah sederhana menjadi struktur kontrol. Dalam bahasa Java, ada 6 struktur tersebut, yaitu blok, perulangan while, perulangan do ... while, perulangan for, pernyataan if, dan pernyataan switch.

Masing-masing struktur ini sebetulnya merupakan pernyataan tunggal yang berdiri dengan sendirinya, tetapi di dalamnya terdiri dari satu atau lebih perintah sehingga keseluruhannya menjadi suatu struktur perintah.

Blok

Blok adalah pernyataan sederhana yang dimulai dengan { dan diakhiri dengan }. Tujuannya untuk mengelompokkan beberapa perintah sehingga lebih dimengerti. Misalnya

{
perintah
}


Pernyataan blok biasanya terdapat dalam struktur kontrol, tetapi sebetulnya tanpa struktur kontrol pun, blok tetap berlaku. Contoh sederhana penggunaan blok ini adalah dalam subrutin main() yang kita lakukan pada contoh-contoh sebelumnya.

Berikut ini adalah 2 contoh penggunaan blok.

{
System.out.println("Hallo");
System.out.println("Dunia");
}

{ // blok ini digunakan untuk menukar isi variable x dan y
int temp;
temp = x;
x = y;
y = temp;
}


Pada blok kedua, kita mendeklarasikan variable baru temp. Dalam blok kedua ini, variabel apapun yang dideklarasikan tidak akan dapat diakses dari luar blok ini. Variabel ini disebut variabel lokal, karena hanya bisa diakses dari dalam blok.

Ketika komputer menjalankan program ini, komputer akan mempersiapkan memori untuk menyimpan variabel yang dideklarasikan di dalam blok ini. Ketika blok ini selesai dijalankan, komputer akan melepas memori yang digunakan dalam blok ini untuk digunakan oleh bagian program lain.

Konsep "scope" atau jangkauan pada konsep pemrograman, mengacu pada bisa atau tidaknya suatu variabel dilihat oleh bagian program lain. Jangkauan suatu variabel menyatakan di bagian mana variabel ini valid atau dengan kata lain bisa diakses. Jangkauan variabel dalam suatu blok terbatas hanya pada blok tersebut.

Blok sendiri sebetulnya bukan merupakan struktur kontrol. Program akan berjalan seperti biasa dari atas kebawah seperti biasa. Secara umum struktur kontrol dibagi menjadi 2 bagian, yaitu : perulangan dan percabangan.

Perulangan

Sebagai contoh untuk membahas tentang perulangan, kita lihat pernyataan while, yang memiliki bentuk seperti

while (suatu_kondisi) {
perintah
}


Semantik pada pernyataan while tersebut adalah sebagai berikut. Ketika komputer sampai pada pernyataan while, komputer akan melakukan perhitungan pada suatu_kondisi. Apabila suatu_kondisi bernilai true, blok yang berisi perintah akan dilakukan. Setelah komputer sampai pada bagian akhir blok, komputer akan menghitung kembali suatu_kondisi. Jika masih bernilai true, maka blok tersebut akan dieksekusi, dan jika tidak, program akan melompat ke bagian program berikutnya setelah blok berakhir. Atau dengan kata lain, jika suatu_kondisi bernilai false, blok perintah tidak akan dieksekusi.

Berikut ini adalah contoh untuk menulis bilangan 1 hingga 5.

int angka = 1; // inisialisasi variabel, kita mulai dengan mengisi variabel angka dengan 1

while (angka <= 5) {
System.out.println(angka); // cetak isi angka di layar
angka = angka + 1; // tambah angka dengan 1
}

System.out.println("Selesai...");

Variabel angka kita inisialiasi (persiapkan) dan kita isi mula-mula dengan 1. Ketika program sampai pada pernyataan while, program akan mengevaluasi apakah angka <= 5. Pada saat program baru dimulai, angka masih bernilai 1, sehingga pernyataan angka <= 5 bernilai true. Dalam hal ini perintah di dalam blok akan dieksekusi, yaitu mencetak angka ke layar, kemudian menambah angka dengan 1. Sekarang angka bernilai 2.

Setelah sampai pada akhir blok, program akan kembali pada awal pernyataan while. Sekarang angka bernilai 2, dan karena 2 masih kurang dari atau sama dengan 5, program akan kembali mengeksekusi perintah dalam blok. Begitu seterusnya hingga angka bernilai 6. Pada saat ini program akan berhenti melakukan perulangan dan berhenti melakukan eksekusi perintah di dalam blok tersebut, kemudian melakukan perintah berikutnya, yaitu menampilkan kata "Selesai...".

Percabangan

Pernyataan if memperintahkan komputer untuk memilih salah satu aksi yang akan dilakukan, tergantung pada suatu kondisi tertentu. Bentuknya dapat ditulis sebagai berikut

if (suatu_kondisi)
perintah_1;
else
perintah_2;

Perintah_1 dan perintah_2 juga bisa berbentuk blok, sehingga pernyataan di atas dapat ditulis juga sebagai berikut

if (suatu_kondisi) {
perintah_1;
} else {
perintah_2;
}


Ketika komputer sampai pada pernyataan if, komputer akan menghitung apakah suatu_kondisi bernilai true. Jika iya, maka blok perintah berikutnya akan dieksekusi, dalam hal ini perintah_1. Jika tidak, maka blok setelah pernyataan else akan dieksekusi, yaitu perintah_2.

Sebagai contoh, mari kita kembali pada contoh program untuk membalik nilai x dan y, dengan syarat x harus lebih besar dari y. Dalam hal ini, setelah program ini dieksekusi, nilai x akan selalu bernilai lebih kecil dari y, karena jika nilai x lebih besar, nilai x akan ditukar dengan nilai y.

if (x > y) { // jika x lebih besar dari y
// blok ini digunakan untuk menukar isi variable x dan y
int temp;
temp = x;
x = y;
y = temp;
}


Contoh berikut adalah program untuk menentukan apakah suatu bilangan merupakan bilangan genap atau bilangan ganjil. Dengan menggunakan operator %, yaitu sisa pembagian, kita dapat menentukan apabila sisa pembagian suatu bilangan dengan 2 adalah 0, maka bilangan tersebut merupakan bilangan genap. Jika tidak, maka bilangan tersebut adalah bilangan ganjil.

if ((x % 2) == 0) {
System.out.println(x + " adalah bilangan genap");
} else {
System.out.println(x + " adalah bilangan ganjil");
}


Kita akan bahas tentang struktur kontrol di bagian berikutnya. Semoga bagian ini yang merupakan bagian pendahuluan tentang struktur kontrol dapat dimengerti sehingga kita bisa mempelajari konsep yang lebih kompleks lagi.

Sumber:http://java.lyracc.com

Pernyataan while

Pernyataan while
Sumber :http://java.lyracc.com/artikel/java-untuk-pemula/while-dan-do-while
Pernyataan while telah diperkenalkan pada bagian sebelumnya. Perulangan while memiliki bentuk

while (suatu_kondisi)
perintah


perintah bisa juga berupa blok yang berisi kumpulan perintah-perintah di antara { dan }. perintah ini disebut juga dengan inti perulangan. Inti perulangan akan terus dieksekusi selama suatu_kondisi bernilai true. suatu_kondisi ini disebut juga penguji perulangan.

Ada beberapa hal yang mungkin jadi pertanyaan. Apa yang terjadi jika suatu_kondisi sudah bernilai false sejak pertama kali komputer sampai pada pernyataan ini? Dalam hal ini blok perulangan tidak akan dieksekusi sama sekali. Program akan melompat ke perintah berikutnya di luar blok perulangan.

Lalu apa yang terjadi jika suatu_kondisi bernilai false di tengah-tengah perulangan, apakah program keluar dari perulangan saat itu juga? Dalam hal ini, tentunya tidak. Program akan mengeksekusi semua perintah hingga akhir blok selesai. Setelah itu program akan kembali ke pernyataan while, dan setelah mengevaluasi kembali suatu_kondisi, dan jika hasilnya salah, baru program akan melompat ke perintah berikutnya di luar blok.

Mari kita ubah sedikit algoritma yang kita buat di bagian sebelumnya. Kali ini kita akan membuat program yang menghitung rata-rata dengan cara menanyakan suatu bilangan kepada user, kemudian program akan berhenti jika masih ada data yang akan diproses.

Inisialisasi jumlah dengan 0
Inisialisasi n (berapa data yang dimasukkan user) dengan 0
while (masih ada data yang akan diproses):
Minta input dari user
Tambah jumlah dengan input dari user
Tambah n dengan 1
Bagi jumlah dengan n untuk menghitung rata-rata
Cetak rata-rata ke layar

Pertanyaan berikutnya, bagaimana menentukan masih ada data yang akan diproses? Cara yang paling mudah adalah melihat apakah nilai yang dimasukkan user bernilai 0. Nol di sini bukan termasuk data yang akan dijumlahkan tetapi bertugas sebagai sinyal bahwa tidak ada lagi data yang harus dimasukkan.

Lalu bagaimana kita harus menguji bahwa data yang dimasukkan bernilai 0 atau bukan? (Ingat, kita baru menanyakan data di dalam blok perulangan. Pada saat komputer pertama kali menemui perulangan while, komputer tidak tahu apa-apa.) Dalam hal ini, kita akan sedikit ubah algoritma kita seperti berikut :

Inisialisasi jumlah dengan 0
Inisialisasi n (berapa data yang dimasukkan user) dengan 0
Minta input dari user
while (input tidak sama dengan 0):
Tambah jumlah dengan input dari user
Tambah n dengan 1
Minta input dari user
Bagi jumlah dengan n untuk menghitung rata-rata
Cetak rata-rata ke layar


Pada dasarnya, kita tanyakan user terlebih dahulu sebelum perulangan while. Dengan cara ini, kita bisa mendapat nilai input untuk dievaluasi pada pernyataan while. Di dalam perulangan while, kita tempatkan pertanyaan untuk mendapat input dari user di akhir perulangan. Artinya, setelah kita memproses input dari user, kita akan tanyakan lagi kepada user untuk mendapatkan kondisi untuk mengevaluasi kondisi while berikutnya.

Perhatikan juga bahwa ketika 0 dimasukkan, program tidak akan menghitung nilai 0 lagi. Di algoritma sebelumnya, nilai 0 akan ikut dijumlahkan dan n akan bertambah 1, padahal 0 bukan data. Nol hanya berfungsi sebagai sinyal bahwa perulangan harus selesai. Masalah ini sangat amat umum ditemui oleh programmer, karena menghitung satu demi satu ternyata tidak mudah. Untuk itu debugger diperlukan untuk melihat lebih detail apa yang dilakukan oleh komputer.

Kita bisa ubah algoritma di atas menjadi program Java sebagai berikut. (Seperti biasa program ini bisa diunduh dalam bentuk zip file atau di alamat SVN berikut: http://belajarjava.googlecode.com/svn/trunk/RataRata )

package ratarata;

import java.io.*;

public class RataRata {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double jumlah = 0;
double bilangan = 0;
int n = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String strbilangan = null;

System.out.print("Masukkan bilangan pertama : ");
try {
strbilangan = br.readLine();
} catch (IOException ioe) {
System.out.println("Kesalahan IO, program berhenti");
System.exit(1);
}

// mengubah input menjadi double agar bisa diproses lebih lanjut
bilangan = Double.parseDouble(strbilangan);

while (bilangan != 0) {
jumlah += bilangan; // sama dengan : jumlah = jumlah + bilangan
n++; // sama dengan : n = n+1

// tanya user input
System.out.print("Masukkan bilangan berikutnya (atau 0 untuk mengakhiri) : ");
try {
strbilangan = br.readLine();
} catch (IOException ioe) {
System.out.println("Kesalahan IO, program berhenti");
System.exit(1);
}

// mengubah input menjadi double agar bisa diproses lebih lanjut
bilangan = Double.parseDouble(strbilangan);
}

// hitung rata-rata
double ratarata = jumlah/n;

// cetak hasilnya ke layar
if (n == 0) {
System.out.println("Data kosong, rata-rata tidak bisa dihitung");
} else {
System.out.println("Anda memasukkan " + n + " data");
System.out.println("Rata-rata bilangan yang dimasukkan adalah " + ratarata);
}
}
}

Berikut hasil keluarannya :

Pernyataan do ... while

Kadang-kadang akan lebih mudah menulis perulangan jika penguji perulangan dilakukan di akhir badan perulangan. Dalam hal ini badan perulangan akan dieksekusi terlebih dahulu tanpa memperdulikan apakah suatu kondisi bernilai true atau false. Pengujian dilakukan di akhir setelah suatu kondisi didapat dalam eksekusi perulangan pertama kali.

Pernyataan do ... while pada dasarnya merupakan pernyataan while terbalik, dengan bentuk.

do
perintah
while (suatu_kondisi);

Atau apabila perintah berbentuk blok kumpulan perintah-perintah, bisa juga ditulis dalam bentuk

do {
perintah-perintah
} while (suatu_kondisi);


Perlu diingat bahwa pernyataan do ... while diakhiri dengan tanda ; di akhir while.

Contoh sederhana adalah program bermain game, di mana game akan menanyakan apakah user ingin bermain lagi.

do {
main game
tanya user apakah ingin main lagi
} while (user menjawab ya);


Jika suatu saat Anda harus menulis kondisi pada pernyataan while seperti ini while (jawaban == true), Anda bisa mengganti pernyataan ini menjadi while (jawaban). Menguji apakah jawaban sama dengan true sama artinya dengan melihat apakah jawaban berisi "true".

Demikian juga dengan while (jawaban == false), bisa diganti dengan while (!jawaban). Seperti dijelaskan pada bab tentang operator boolean, operator ! membalik isi dari boolean, misalnya dari true menjadi false atau sebaliknya. Dengan menuliskan while (!jawaban) berarti sama dengan menguji apakah jawaban berisi false.

Pernyataan do ... while memberikan keleluasaan kepada Anda untuk berekspresi dengan lebih lugas. Sebenarnya, untuk memecahkan suatu masalah dengan perulangan do ... while juga bisa diekspresikan dengan perintah while, demikian juga sebaliknya.

do
perintah
while (suatu_kondisi);


bisa dituliskan dalam bentuk

perintah
while (suatu_kondisi)
perintah

Demikian juga dengan

while (suatu_kondisi)
perintah


bisa juga dituliskan dalam bentuk

if (suatu_kondisi) {
do {
perintah
while (suatu_kondisi);
}


tanpa merubah aliran program sama sekali.

Pernyataan break dan continue

Pernyataan while dan do ... while menguji kondisi di awal atau di akhir badan perulangan. Pengujian bisa juga dilakukan di tengah-tengah badan perulangan, kemudian memerintahkan program untuk keluar dari badan perulangan saat itu juga. Caranya dengan menggunakan perintah

break, sehingga program seperti

while (suatu_kondisi)
perintah


bisa ditulis dalam bentuk

while (true)
perintah
if (!suatu_kondisi)
break;


Apa makna dari program di atas? while (true)

artinya memerintahkan program untuk melakukan perulangan selamanya, karena true tidak akan berubah. Di tengah-tengah program, kita uji apakah suatu_kondisi bernilai false. Jika ya, maka perintah break akan dieksekusi yang menyebabkan program keluar dari badan perulangan ke perintah berikutnya di luar badan perulangan.

Kadang-kadang gaya penulisan ini lebih masuk akal ketimbang gaya penulisan baku seperti while atau do ... while, tapi tentu saja ini tergantung dari cara pikir masing-masing programmer dan juga masalah yang akan dipecahkan.

Pernyataan while atau do ... while dapat dibuat bertingkat, misalnya membuat blok while dalam blok while.

while (suatu_kondisi) {
perintah
while (kondisi_lain) {
perintah_lain
while (kondisi_lain_lagi) {
perintah_baru
}
}
}


Apabila perintah break diberikan, maka program akan keluar dari perulangan yang berada persis di atasnya. Misalnya, apabila perintah break diberikan setelah perintah_lain maka program akan keluar dari dalam perulangan while (kondisi_lain).

Perlu diingan juga apabila perintah break diberikan di dalam pernyataan if, maka program akan keluar dari perulangan yang persis di atasnya.

Selain perintah break yang secara langsung menghentikan perulangan, perintah continue digunakan untuk menghentikan operasi saat itu, mengabaikan perintah hingga perulangan berakhir, kemudian kembali kepada perintah while lagi. Misalnya,

while (suatu_kondisi) {
perintah
continue;
perintah_lagi
perintah_lain_lagi
}


Perulangan akan menjalankan perintah, mengabaikan perintah_lagi dan perintah_lain_lagi, kemudian kembali kepada pernyataan while untuk mengevaluasi apakah suatu_kondisi bernilai true. Jika ya perulangan akan diteruskan. Tetapi karena ada perintah continue, artinya selama perulangan tersebut berjalan, perintah_lagi dan perintah_lain_lagi tidak akan pernah dieksekusi.

Sumber :http://java.lyracc.com/artikel/java-untuk-pemula/while-dan-do-while

Friday, May 14, 2010

Tips penulisan program dalam Java

Tips penulisan program dalam Java
Untuk menghindari kesalahan sejak dini, pada saat membuat program selalu diusahakan mengetikan deklarasi class secara utuh terlebih dahulu:
Class Hello {}
Kemudian setelah itu ketikan kode isi dari class didalam antara kurung kurawal :
Class Hello {
// Isi class
}

Hal ini untuk mencegah error dini terjadinya syntax error( error karena kurang penutup kurung kurawal). Demikian juga ketika membuat deklarasi untuk method main;
Class Hello{
Public static void main(String[])args){}
}

Setelah membuat deklarasi method main dengan lengkap, kemudian barulah kita mengetikan isi dari method tadi.
Class Hello{
Public static void main (String[]args){
// isi method main}
}

Hal seperti ini yang sering terjadi dan jangan dianggap sepele karena akan menyulitkan kita di akhir penulisan, pada saat kita menjalankan program.
Setiap kita membuat program selalu berika baris kosong/ spasi kosong untuk memudahkan dalam membaca program yang kita tulis.
Class Hello{
Public static void main (String[]args){
// isi method main
}
}


Contoh diatas adalah contoh penulisan program yang baik karena terdapat spasi kosong diantara tanda { }.

Friday, April 30, 2010

Program Java : Kelas Hello

Membuat program "Hello semua"

Setelah semua software untuk mendukung program java terpasang dengan baik maka kita sudah dapat memulai untuk membuat beberapa program sederhana dalam bahasa java tentunya.
Program yang paling sederhana adalah menulis kata " Hello semua"
langkah langkah nya adalah sebagai berikut:
1. Jalankan text editor
2. Tuliskan kode program nya sebagai berikut:

// file program ini harus disimpan dalam nama Hello.java

public class Hello {
public static void main (String[] args {
System.out.println ("Hello semua"); // setiap akhir perintah harus diberi tanda ;
}
}

3. Simpan file dengan nama Hello.java

Sekarang mari kita telaah kode yang telah kita tulis:

// file program ini harus disimpan dalam nama Hello.java
Kode dengan // adalah kode yang dipakai di dalam bahasa java untuk memberikan komentar tanpa ikut tereksekusi dalam program.
Baris berikutnya adalah sebagai berikut:
public class Hello {
Bari ini merupakan kata kunci Class untuk mendefinisikan sebuah kelas baru dan diikuti dengan nama kelas nya. tanda kurung kurawal adalah untuk mengawali sebuah blok program;sedangkan tanda kurung kurawal tutup untuk menutup sebuah blok program.

Baris selanjutnya adalah
public static void main (String[] args {
Baris ini akan memulai method main(), yaitu method utama yang pasti dimiliki oleh semua program java dan akan dieksekusi pertama kali pada saat program dijalankan.

Strings[] args adalah method main menerima variabel dengan nama args dan tipe String sebagai parameter. tanda [] berarti args merupakan variabel array.

Baris selanjutnya dari kode diatas adalah sebagai berikut :
System.out.println ('Hello semua");
Kode tersebut digunakan untuk menampilkan teks " Hello semua" kelayar out put ( dalam hal ini, layar monitor).
terakhir, kode diatas ditutup dengan tanda kurung kurawal tutup ( } )tanda tersebut digunakan sebagai akhir dari definisi kelas Hello.

Setelah itu, lakukan kompilasi program menggunakan perintah javac pada command prompt.

Caranya sebagai berikut:
1. jalankan command prompt dengan mengetik cmd pada run lalu tekan enter keyboard.
2. Masuk ke drive C dengan mengetik cd\ lalu tekan enter keyboard.
3.Lakukan kompilasi dengan mengetik Javac diikuti nama file java, yaitu Javac Hello.java lalu tekan enter keyboard.
perhatikan bahwa tulisan huruf harus sama dengan yang kita ketik sebelumnya. perhatikan juga huruf besar dan huruf kecilnya.
4.Jalankan program dengan mengetik Java diikuti nama file yang telah dikompilasi, tanpa menyertakan.class.
jadi kita ketik : java Hello maka pada out put akan keluar tulisan "Hello semua"

Program Java : Bytecode

Java adalah sebuah bahasa pemograman yang cukup dikenal luas di dunia programer.
Dalam sebagian besar bahasa pemograman, sebuah kode program harus di kompilasi dan di terjemahkan(interpet) sehingga dapat dijalankan didalam sebuah komputer.
Software untuk menjalankankompilasi di sebut kompiler. dan untuk melakukan interpretasi dibutuhkan sofware interpreter.perbedaan diantara keduanya terletak pada proses eksekusi kodenya.Kompiler akan menerjemahkan isi kode program scara keseluruhan sedangkan interpreter bekerja dengan cara baris demi baris, maka dengan demikian interpreter bekerja lebih lambat di bandingkan kompiler.
Untuk program Java menggunakan keduanya. sehingga berarti bahwa Java berperan sebagai Compiler dan interpreter. Konsepnya sederhana mula mula kode program yang ditulis dengan bahasa Java akan dikompilasi menjadi suatu kode objek.
Dalam Terminologi Java kode objek ini disebut Bytecode.Jadi dalam bahasa Java hasil akhir programnya akan berupa bytecode berektansi class, bukan file.EXE.
Selanjutnya Bytecode akan dieksekusi baris demi baris oleh interpreter.Dengan demikian, proses kompilasi hanya dilakukan sekali, akan tetapi proses interpet akan dilakukan setiap program di eksekusi.

Friday, March 19, 2010

Kode Huffman

Kode Huffman pada dasarnya merupakan kode Initialize model prefiks (prefix code) yang merupakan himpunan yang berisi sekumpulan kode biner. Kode prefiks direpresentasikan sebagai pohon biner berlabel dimana setiap sisi diberi label 0 (cabang kiri) atau 1 (cabang kanan).
Rangkaian bit yang terbentuk pada setiap lintasan dari akar ke daun merupakan kode prefiks untuk karakter yang berpadanan.
Kode ini pun memiliki berbagai macam variasi antara lain :

1. Adaptive kode Huffman
2. Length-Limited kode Huffman
3. N-Ary Huffman Template Algoritma
4. Huffman With Unequal Letter Costs

1. Macam-macam Variasi Kode Huffman

A. Adaptive kode Huffman
Metode Adaptive digunakan pada saat pembaharuan (update) model algoritma baru baik dari proses kompresi maupun dekompresi
Konsep Dasar :
Encoder :
Initialize_model
Repeat for each character
{
Encode character
Update_model
}
Decoder
Initialize_model
Repeat for each character
{
Decode character
Update_model
}
Masalahnya adalah bagaimana meng-update model algoritma yang terdiri dari menambah jumlah dan mengupdate pohon Huffman. Caranya adalah dengan meng-update bagian pohon di mana terjadi proses pemampatan/nirmampat.

Pohon Huffman diinisialisasikan dengan simpul single yang dikenal dengan Not-Yet-Transmitted (NYT) Code yang dikirimkan setiap kali ditemukan karakter baru. Algoritma bekerja dengan penomoran yang unik pada simpul dengan jumlah daun yang berbeda.

Langkah-langkah peng-update-an model
1. Jika kode yang pertama kali ditemukan adalah NYT, maka tambahkan dua simpul pada simpul NYT. Satu simpul sebagai simpul NYT dan simpul yang lain sebagai daun. Tambahkan jumlah daun. Jika bukan NYT, langsung menuju daun.

2. Jika pada blok tidak terdapat angka tertinggi, tukarkan dengan angka tertinggi pada blok.

3. Tambahkan jumlah dari simpul tersebut.

4. Periksa apakah simpul tersebut merupakan simpul akar. Jika bukan pergi ke simpul parent.

B. Length-Limited Huffman Coding

Variasi Huffman ini digunakan untuk mendapatkan jarak kedalaman terkecil dari suatu simbol, dengan batasan bahwa panjang masing-masing yang dimasukkan tidak kurang dari nilai konstanta yang diberikan. Metode ini biasanya digunakan pada GNU gzip.
Langkah-langkah dalam Metode Length-Limited Huffman adalah :

1. Memilih dua atau lebih simbol yang ingin dimampatkan

2. Gabungkan simbol-simbol tersebut dan gantikan dengan pseudo-symbol beserta frekuensinya.

3. Lakukan langkah di atas secara Literatif sampai semua simpul yang ada menjadi satu simpul akar.

4. Jika simpul-simpul tersebut memiliki frekuensi yang sama, maka pilihlah simpul dengan kedalaman terpendek.

C. Binary Huffman Template Algorima

Algoritma ini sebenarnya mirip dengan algoritma Huffman biasa. Bedanya, pohon Huffman yang digunakan dalam algoritma ini memiliki lebih dari dua akar (0 dan 1). Sementara dengan Huffman template algorithm, memungkinkan untuk menggunakan ukuran non-numerik (ukuran selain biaya dan frekuensi).

D. Huffman With Unequal Letter Costs
Pada metode ini terdapat suatu permasalahan dimana suatu set kode yang terdiri dari beberapa huruf dengan frekuensi kemunculan dan biaya (cost) yang berbeda. Metode ini ditujukan untuk mencari kode prefiks (prefix code) dan menghitung biaya minimumnya (minimum cost). Prefiks Kode merupakan sekumpulan kode yang prefix-free. Biaya (cost ) dari ini merupakan jumlah biaya dari masing-masing huruf pada kode tersebut.
Langkah-langkah umum metode Kode Huffman with Unequal Letter Cost :

1. Mencari kode K-Prefiks yang optimal.

2. Mengubah kode K-Prefiks menjadi kode prefiks yang optimal.

3. Setelah didapat kode hasil kemudian hitung biaya (cost)-nya.

Kesimpulan
Kode Huffman ternyata memiliki banyak variasi, di antaranya adalah Kode Adaptive Huffman,Kode Length-limited Huffman, n-ary Huffman template algoritma, dan Kode Huffman dengan unequal letter costs. Berbagai teknik ini dapat digunakan pada aplikasi yang berbeda-beda, tetapi umumnya digunakan untuk pemampatan data. Hal ini wajar saja terjadi karena inti dari seluruh variasi teknik ini adalah sama dengan kode Huffman, yaitu memecahkan permasalahan optimasi.

Tree dalam Heap Sort

Tree Dalam Heap Sort

2.1 Pengertian Heap
Adalah struktur data yang berbentuk pohon yang memenuhi sifat-sifat heap yaitu jika B adalah anak dari A, maka nilai yang tersimpan di simpul A lebih besar atau sama dengan nilai yang tersimpan di simpul B. Hal ini mengakibatkan elemen dengan nilai terbesar selalu berada pada posisi akar, dan heap ini disebut max heap. (Bila perbandingannya diterbalikkan yaitu elemen terkecilnya selalu berada di simpul akar, heap ini disebut adalah min heap). Karena itulah, heap biasa dipakai untuk mengimplementasikan prioriti queue.
Operasi-operasi yang digunakan untuk heap adalah :

Delete-max atau delete-min: menghapus simpul akar dari sebuah max atau min heap.
Increase-key atau decrease-key: mengubah nilai yang tersimpan di suatu simpul.
Insert: menambahkan sebuah nilai ke dalam heap.
Merge: menggabungkan dua heap untuk membentuk sebuah heap baru yang berisi semua elemen pembentuk heap tersebut.

Heap Sort

Diagram Pohon Dalam Heap Sort

Pengertian Heap Adalah struktur data yang berbentuk pohon yang memenuhi sifat-sifat heap yaitu jika B adalah anak dari A, maka nilai yang tersimpan di simpul A lebih besar atau sama dengan nilai yang tersimpan di simpul B.

Hal ini mengakibatkan elemen dengan nilai terbesar selalu berada pada posisi akar, dan heap ini disebut max heap.

(Bila perbandingannya diterbalikkan yaitu elemen terkecilnya selalu berada di simpul akar, heap ini disebut adalah min heap).

Karena itulah, heap biasa dipakai untuk mengimplementasikan priority queue. Operasi-operasi yang digunakan untuk heap adalah:


• Delete-max atau delete-min: menghapus simpul akar dari sebuah max atau min heap.

• Increase-key atau decrease-key: mengubah nilai yang tersimpan di suatu simpul.

• Insert: menambahkan sebuah nilai ke dalam heap.

• Merge: menggabungkan dua heap untuk membentuk sebuah heap baru yang berisi semua elemen pembentuk heap tersebut.

.2
Jenis-jenis Heap

.2.1 Binary heap


adalah heap yang dibuat dengan menggunakan pohon biner.

.2.2 Binomial heap


adalah heap yang dibuat dengan menggunakan pohon binomial.

Pohon binomial bila didefinisikan secara rekursif adalah:

• Sebuah pohon binomial dengan tinggi 0 adalah simpul tunggal

• Sebuah pohon binomial dengan tinggi k mempunyai sebuah simpul akar yang anak-anaknya adalah akar-akar pohon pohon binomial.

.2.3
Fibonacci Heap

Fibonacci heap adalah kumpulan pohon yang membentuk minimum heap.

Pohon dalam struktur data ini tidak memiliki bentuk yang tertentu dan pada kasus yang ekstrim heap ini memiliki semua elemen dalam pohon yang berbeda atau sebuah pohon tunggal dengan tinggi Keunggulan dari Fibonacci heap adalah ketika menggabungkan heap cukup dengan menggabungkan dua list pohon.

Heap Sort


HeapSort adalah algoritma pengurutan data berdasarkan perbandingan, dan termasuk golongan selection sort.

Walaupun lebih lambat daripada quick sort pada kebanyakan mesin , tetapi heap sort mempunyai keunggulan yaitu kompleksitas algoritma pada kasus terburuk adalah n log n.

Algoritma pengurutan heap sort ini mengurutkan isi suatu larik masukan dengan memandang larik masukan sebagai suatu Complete Binary Tree (CBT).
Setelah itu Complete Binary Tree (CBT) ini dapat dikonversi menjadi suatu heap tree. Setelah itu Complete Binary Tree (CBT) diubah menjadi suatu priority queue.

Algoritma pengurutan heap dimulai dari membangun sebuah heap dari kumpulan data yang ingin diurutkan, dan kemudian menghapus data yang mempunyai nilai tertinggi dan menempatkan dalam akhir dari larik yang telah terurut.
Setelah memindahkan data dengan nilai terbesar, proses berikutnya adalah membangun ulang heap dan memindahkan nilai terbesar pada heap tersebut dan menempatkannya dalam tempat terakhir pada larik terurut yang belum diisi data lain.
Proses ini berulang sampai tidak ada lagi data yang tersisa dalam heap dan larik yang terurut penuh. Dalam implementasinya kita membutuhkan dua larik – satu untuk menyimpan heap dan satu lagi untuk menyimpan data yang sudah terurut.
Tetapi untuk optimasi memori, kita dapat menggunakan hanya satu larik saja.
Yaitu dengan cara menukar isi akar dengan elemen terakhir dalam heap tree.
Jika memori tidak menjadi masalah maka dapat tetap menggunakan dua larik yaitu larik masukan dan larik hasil.

Heap Sort memasukkan data masukan ke dalam struktur data heap.

Nilai terbesar (dalam max-heap) atau nilai terkecil (dalam min-heap) diambil satu per satu sampai habis, nilai tersebut diambil dalam urutan yang terurut.

Algoritma untuk heap sort :

function heapSort(a, count) is
input: sebuah larik tidak terurut a dengan panjang length
(pertama letakkan a dalam max-heap) heapify(a, count)
end := count -1
while end > 0 do
remove ( )
reheapify ( )
end := end – 1

Algoritma Heapify


Algoritma Heapify adalah membangun sebuah heap dari bawah ke atas, secara berturut-turut berubah ke bawah untuk membangun heap.
Permasalahan pertama yang harus kita pertimbangkan dalam melakukan operasi heapify adalah dari bagian mana kita harus memulai.
Bila kita mencoba operasi heapify dari akar maka akan terjadi operasi runut-naik seperti algoritma bubble sort yang akan menyebabkan kompleksitas waktu yang ada akan berlipat ganda.

Sebuah versi lain adalah membangun heap secara atas-bawah dan berganti-ganti ke atas untuk secara konseptual lebih sederhana untuk ditangani.
Versi ini mulai dengan sebuah heap kosong dan secara berturut-turut memasukkan data.
Versi lainnya lagi adalah dengan membentuk pohon heap-pohon heap mulai dari subtree-subtree yang paling bawah.
Jika subtree-subtree suatu simpul sudah membentuk heap maka pohon dari simpul tersebut mudah dijadikan pohon heap dengan mengalirkannya ke bawah.

Setelah diuji, maka ide yang paling efisien adalah versi yang terakhir, yang kompleksitas algoritmanya pada kasus terburuk adalah O(n), sedangkan versi membentuk heap tree-heap tree dari atas ke bawah kompleksitas nya O(n log n)Jadi, algoritma utama heapify adalah melakukan iterasi mulai dari internal simpul paling kanan bawah (pada representasi larik, adalah elemen yang berada di indeks paling besar) hingga akar, kemudian kearah kiri dan naik ke level di atasnya, dan seterusnya hingga mencapai akar (sebagai larik [0..N-1]). Oleh karena itu, iterasi dilakukan mulai dari j= N/2 dan berkurang satu-satu hingga mencapai j=0. Pada simpul internal tersebut, pemeriksaan hanya dilakukan pada simpul anaknya langsung (tidak pada level-level lain di bawahnya). Pada saat iterasi berada di level yang lebih tinggi, subtree subtree selalu sudah membentuk heap. Jadi, kasus akan mengalirkan simpul tersebut kearah bawah. Dengan demikian, heapify versi ini melakukan sebanyak N/2 kali iterasi, dan pada kasus yang paling buruk akan melakukan iterasi sebanyak log (N) kali.

Algoritma Remove

Algoritma remove ini menukar akar (yang berisi nilai maksimum) dari heap dengan elemen terakhir. Secara logika, simpul yang berada paling kanabawah dipindahkan ke akar untuk menggantikan simpul akar yang akan diambil.

Algoritma Reheapify

Algoritma reheapify ini melakukan pembuatan ulang heap dari atas ke bawah seperti halnya iterasi terakhir dari algoritma metoda heapify. Perbedaan antara metode heapify dengan metode reheapify ada pada iterasi yang dilakukan oleh kedua algoritma tersebut. Algoritma metode reheapify ini hanya melakukan iterasi terakhir dari algoritma heapify. Hal ini disebabkan baik subtree kiri maupun subtree kanannya sudah merupakan heap, sehingga tidak perlu dilakukan iterasi lengkap seperti algoritma heapify. Dan setelah reheapify maka simpul yang akan diiterasikan berikutnya akan berkurang satu.

Representasi Alokasi Dinamis Algoritma Pengurutan Heap Sort

Karakteristik dari algoritma pengurutan heap sort adalah bahwa dalam implementasinya heap sort menggunakan heap tree agar dapat diselesaikan secara heap sort. Oleh karena itu, untuk mengimplementasikan algoritma pengurutan heap sort dalam suatu program aplikasi, dibutuhkan adanya alokasi dinamis dengan menggunakan struktur data tree (pohon). Prinsip-prinsip dasar mengenai struktur data tree yang digunakan untuk merealisasikan heap tree adalah sebagai berikut:
a. Simpul-simpul saling berhubungan dengan menggunakan pointer.
Pada struktur data tree ini digunakan minimal dua buah pointer pada setiap simpul,masing-masing untuk menunjuk ke cabang kiri dan cabang kanan dari tree tersebut. Misalnya dalam bahasa C, struktur data tree dideklarasikan sebagai berikut:
Class BinaryTreeSimpul {
keyType key;
infoType info;
BinaryTreeSimpul Left,
Right; // metoda-metoda
}

b. Left dan Right berharga NULL apabila tidak ada lagi cabang pada arah yang bersangkutan.

c. Struktur dari binary tree, termasuk hubungan-hubungan antar-simpul, secara eksplisit direpresentasikan oleh Left dan Right. Apabila diperlukan penelusuran naik (backtrack), maka hal tersebut dapat dilakukan dengan penelusuran ulang dari root, penggunaan algoritma-algoritma yang bersifat rekursif, atau penggunaan stack.

d. Alternatif lain adalah dengan menambahkan adanya pointer ke parent.
Namun hal ini akan mengakibatkan bertambahnya jumlah tahapan pada proses-proses penambahan/penghapusan simpul

Perbandingan Dengan Algoritma Pengurutan Lain

Heapsort hampir setara dengan quick sort, algoritma pengurutan data lain berdasarkan perbandingan yang sangat efisien. Quick sort sedikit lebih cepat, karena cache dan faktor-faktor lain, tetapi pada kasus terburuk
kompleksitasnya O(n), yang sangat lambat untuk data yang berukuran sangat besar. Lalu karena heap sort memiliki (N log N) maka sistem yang memerlukan pengamanan yang ketat biasa memakai heap sort sebagai algoritma pengurutannya. Heap sort juga sering dibandingkan dengan merge sort, yang mempunyaikompleksitas algoritma yang sama, tetapi kompleksitas ruang nya (n) yang lebih besar dari heap sort. Heap sort juga lebih cepat pada mesin dengancache data yang kecil atau lambat.

Kesimpulan
Dengan memanfaatkan struktur data pohon, kita bisa mendapatkan algoritma pengurutan data yang mangkus yang bisa dimanfaatkan untuk membangun program aplikasi yang baik. Algoritma pengurutan heap sort bisa dimasukkan ke dalam algoritma divide and conquer yang disebabkan pembagian dilakukan dengan terlebih dahulu menerapkan algoritma metoda heapify sebagai inisialisasi untuk mentransformasi suatu tree menjadi heap tree, dan pada setiap tahapan diterapkan algoritma metoda reheapify untuk menyusun ulang heap tree.
Related Posts Plugin for WordPress, Blogger...

Info Gadget Terbaru



*****



*****



*****