Anda di halaman 1dari 66

Bab I - Pendahuluan

Mengenal Bahasa Pemrograman Java Kelebihan Java

Mengenal Bahasa Pemrograman Java


Sejarah Java Java dipelopori oleh James Gosling, Patrick Naughton, Chris Warth, Ed Frank, dan Mike Sheridan dari Sun Microsystems, Inc pada tahun 1991. Mereka membutuhkan kurang lebih 18 bulan untuk membuat versi pertamanya. Bahasa ini pada awalnya disebut Oak tapi kemudian diubah menjadi Java pada tahun 1995 karena nama Oak telah dijadikan hak cipta dan digunakan sebagai bahasa pemrograman lainnya. Antara pembuatan Oak pada musim gugur 1992 hingga diumumkan ke publik pada musim semi 1995, banyak orang yang terlibat dalam desain dan evolusi bahasa ini. Bill Joy, Arthur van Hoff, Jonathan Payne, Frank Yellin, dan Tim Lindholm merupakan kontributor kunci yang mematangkan prototipe aslinya. Java Modern Java telah digunakan dalam banyak hal dan telah membuktikan keberadaannya pada abad ke 21. Saat ini, Java digunakan bermacam jenis aplikasi seperti aplikasi embedded, aplikasi keuangan, desktop, simulasi pesawat, pemrosesan citra, game, aplikasi perusahaan terdistribusi yang disebut J2EE dan masih banyak lagi. Java Virtual Machine (JVM) Java Virtual Machine merupakan aplikasi sederhana yang ditulis dalam bahasa C untuk mengeksi program yang ditulis dalam bahasa Java. Pada saat kompilasi (perubahan dari bahasa tingkat tinggi ke bahasa lebih rendah), program tersebut diubah menjadi KODE BYTE. Kemudian pada saat eksekusi, JVM membaca kode byte tersebu dan mengubahnya menjadi bahasa mesin yang dimengerti oleh sistem operasi tempat program tersebut dijalankan. Karena JVM sangat bergantung pada platformnya (bahasa mesin merupakan bahasa level rendah yang hanya dimengerti oleh suatu mesin tertentu, misalnya Intel, tapi tidak dapat dimengerti oleh mesin lain, seperti Macintosh), byte code ini dapat dibuat untuk terbebas dari kungkungan platform tertentu. Code byte yang dihasilkan dalam proses kompilasi bahasa Java akan selalu sama untuk setiap sistem operasi atau jenis mesinnya, tetapi JVM akan mengubah kode byte tersebut menjadi bahasa mesin tujuannya. Just In Time Compiler (JIT) Meskipun Java didesain untuk diinterpretasi, secara teknis tidak ada yang menghalangi Java untuk dikompilasi menjadi bahasa mesin seperti bahasa-bahasa pemrograman lainnya. Sun menyediakan kompiler Just In Time Compiler (JIT) untuk mengkompilasi kode byte itu menjadi bahasa mesinnya pada saat yang bersamaan dengan eksekusinya. Walaupun

demikian, pendekatan JIT ini menghasilkan kemampuan yang lebih dibandingkan dengan interpretasi biasa.

Kelebihan Java
Bahasa pemrograman lain yang telah ada sebelum Java lahir sudah merupakan bahasa yang baik dan mudah dipelajasi oleh programmer profesional. Akan tetapi para programmer ini menginginkan sesuatu yang baru yang memiliki banyak hal yang menyelesaikan masalah mereka. Utamanya adalah keamanan kode mereka. Hal ini melahirkan pikiran yang revolusioner untuk menemukan bahasa pemrograman lain yang disebut Java. Tidak hanya keamanan tapi juga beberapa hal yang sering disebut sebagai Java-Buzzwords. Kata-kata ini menjelaskan berbagai fitur tambahan dan beberapa hal yang membuat Java demikian sukses dan diterima oleh dunia perangkat lunak. Berikut ini adalah penjelasan serta keuntungan dari kata-kata tersebut. Sederhana dan Berorientasi Objek Seperti diuraikan sebelumnya, Java lahir dari suatu pemikiran mendalam akan bahasa pemrograman yang ada pada saat itu, seperti C dan C++. Hal ini akan memudahkan programmer profesional untuk dapat mengerti lebih jelas tentang Java, fungsionalitas, dan lain sebagainya apabila ia memiliki pengetahuan dasar tentang C++ dan konsep pemrograman berorientasi objek. Tujuannya agar konsep dasar dari teknologi Java dapat dimengerti dengan mudah, dan programmer dapat segera menghasilkan sesuatu sedini mungkin. Tidak hanya ini, penemu Java memastikan bahwa Java juga bermula dari bahasa pemrograman dasar yang sudah ada pada saat itu. Kemudian mereka membuang berbagai fitur yang rumit dan membingungkan. Bahasa pemrograman Java didesain sejak awal untuk menjadi bahasa yang berorientasi objek. Setelah kira-kira 30 tahun, akhirnya teknologi objek menjadi kenyataan dan diterima oleh sebagian besar komunitas pemrograman. Konsep berorientasi objek memungkinkan pembuatan software yang kompleks, berbasis network, sehingga dapat disimpulkan bahwa teknologi Java menghasilkan platform pembuatan perangkat lunak yang baik dan efisien serta berorientasi objek. Keuntungan yang Anda dapat dari Java

Mulai dengan cepat: Java merupakan bahasa pemrograman berorientasi objek, mudah dipelajari, terutama untuk programmer yang sudah menguasai C atau C++ Tulis lebih sedikit program: Jumlah kelas, jumlah metode, dll, menunjukkan bahwa program yang ditulis dalam bahasa pemrograman Java memiliki jumlah 4 kali lipat lebih kecil dari program sama yang ditulis dalam bahasa C++ Tulis program lebih baik: Bahasa pemrograman Java menganjurkan praktek membuat program yang baik, dan automatic garbage collection membantu Anda

untuk menghindari kebocoran memori. Orientasi objeknya, arsitektur komponen JavaBeans, dan jangkauannya yanga luas, API yang mudah diperluas, memungkinkan Anda menggunakan kode yang ada.

Membuat program dengan lebih cepat: Bahasa pemrograman Java lebih mudah dari C++, pemrograman akan menjadi 2 kali lipat lebih cepat, dengan jumlah baris yang jauh lebih sedikit. Menghindari kebergantungan pada platform tertentu: Anda dapat menjalankan program Anda pada banyak platform dengan TIDAK menggunakan library yang ditulis spesifik untuk platform tertentu. Tulis sekali, jalankan di mana saja: Karena aplikasi yang ditulis dalam bahasa Java dikompilasi ke dalam kode byte yang bebas platform, aplikasi yang ditulis dapat jalan secara konsisten pada platform apa saja. Distribusikan software Anda dengan mudah: Dengan Java Web Start, pengguna program Anda akan dapat menggunakan aplikasi Anda dengan mudah. Sistem pengecekan versi otomatis pada saat program dimulai menjamin pengguna Anda selalu menjalankan versi terkini. Apabila versi baru tersedia, Java Web Start akan melakukan instalasi secara otomatis.

Bab II - Instalasi
Software yang digunakan :

Eclipse 3.4 Ganymede digunakan dalam situs ini sebagai IDE (integrated development environment) atau Java 6 SDK

Eclipse IDE
Eclipse merupakan komunitas open source yang bertujuan menghasilkan platform pemrograman terbuka. Eclipse terdiri dari framework yang dapat dikembangkan lebih lanjut, peralatan bantu untuk membuat dan memanage software sejak awal hingga diluncurkan. Platform Eclipse didukung oleh ekosistem besar yang terdiri dari vendor tekonologi, start-up inovatif, universitas, riset institusi serta individu. Banyak orang mengenal Eclipse sebagai IDE (integrated development environment) untuk bahasa Java, tapi Eclipse lebih dari sekedar IDE untuk Java. Komunitas Eclipse memiliki lebih dari 60 proyek open source. Proyek-proyek ini secara konsep terbagi menjadi 7 categori : 1. 2. 3. 4. 5. 6. 7. Enterprise Development Embedded and Device Development Rich Client Platform Rich Internet Applications Application Frameworks Application Lifecycle Management (ALM) Service Oriented Architecture (SOA)

Secara umum Eclipse digunakan untuk membangun software inovatif berstandar industri, dan alat bantu beserta frameworknya membantu pekerjaan menjadi lebih mudah. Lisensi Eclipse menggunakan EPL (Eclipse Public License), yaitu lisensi yang memungkinkan organisasi untuk menjadikan Eclipse sebagai produk komersialnya, dan pada saat yang sama meminta orang yang melakukan perubahan untuk mengkontribusikan hasilnya kembali kepada komunitas. Instalasi

Anda membutuhkan Java 5 JRE untuk menjalankan Eclipse. Download Eclipse IDE for Java Developers untuk menggunakan kode pada situs Belajar Java ini.

Gunakan utility pada sistem operasi anda untuk membuka kompresi file tersebut ke dalam hard disk anda. Catatan untuk Windows: Apabila Anda menggunakan utilitas kompresi file yang berasal dari Windows XP atau Windows Vista itu sendiri, kadang kala utilitas tersebut tidak berhasil membuka file dengan nama yang panjang. Jika Anda mengalami masalah dekompresi Eclipse pada Windows, letakkan hasil dekompresi pada root directory (misalnya C:\eclipse) atau gunakan software dekompresi lain yang gratis seperti 7-Zip

Menjalankan Eclipse untuk pertama kali


Posted Sab, 02/07/2009 - 06:12 by belajarprogram Versi ramah cetak Menjalankan Eclipse untuk pertama kali

Cari file bernama eclipse.exe (pada Windows) atau eclipse (pada Ubuntu) kemudian double-click Pada saat Eclipse pertama kali dijalankan, Eclipse akan menanyakan workspace, yaitu folder tempat proyek dan data diletakkan. Anda bisa menempatkan di mana saja asalkan jangan di dalam folder Eclipse itu sendiri. Click Browse dan pilih folder yang ada inginkan. Tik "Use this as default and do not ask again" Halaman pembuka akan muncul. Klik "Workspace", tombol paling kanan berbentuk anak panah untuk masuk ke dalam workspace Anda.

Program Java pertama Anda


Klik "File -> New -> Java Project" Isi nama proyek (misalnya SelamatDatang), kemudian klik "Finish" Setelah Eclipse membuat proyek untuk Anda, di bagian kiri workspace Anda akan melihat struktur direktori proyek Anda yang dimulai dengan nama proyek, folder src, dan folder JRE System Library Klik kanan pada folder src, kemudian "New -> Package" Isi nama package (misalnya selamatdatang), kemudian klik "Finish" Klik kanan lagi pada folder selamatdatang, kemudian "New -> Class" Isi nama class (misalnya SelamatDatang) Karena class ini adalah class utama yang akan langsung dijalankan oleh JRE (Java Runtime Environment), click "public static void main(String[] args)" pada bagian "Which method stubs would you like to create?"

Klik "Finish" Eclipse akan membuat program kosong yang berisi package dan class sesuai dengan nama yang Anda masukkan pada tahap sebelumnya Sekarang ketik program berikut di bawah "// TODO"

System.out.println("Selamat Datang!");

Kemudian simpan hasilnya

Menjalankan program Java pertama Anda


Untuk menjalankan program Anda, klik "Run -> Run" Di bagian bawah pada tab yang berjudul "Console" hasil program Anda ditampilkan Program ini akan menampilkan tulisan Selamat Datang! seperti pada gambar berikut ini

Sisipan Ukuran selamatdatang-class.gif 68.33 KB Eclipse IDE ke atas Mengimport proyek ke dalam Eclipse

Mengimport proyek ke dalam Eclipse


Posted Sab, 02/07/2009 - 06:55 by belajarprogram Versi ramah cetak Dalam situs ini, akan ada beberapa program yang cukup panjang dan mungkin menyusahkan Anda apabila harus mengetik satu per satu. Anda dapat juga mendownload berkas terkompresi untuk kemudian diimport ke dalam Eclipse.

Download file ini ke komputer Anda Pada Eclipse, klik "New -> Import -> General -> Existing Project into Workspace" Lalu tik "Select Archieve", pilih file yang telah Anda download tersebut, dan klik "Finish"

Sisipan Ukuran selamatdatang1.zip 1.5 KB

Instalasi Subversive, Plugin SVN untuk Eclipse


Untuk menggunakan contoh kode pada situs ini, Anda juga bisa menggunakan Subversion untuk mengambil file langsung dari gudang SVN. Untuk menginstall Plugin Subversive, dengan melakukan langkah-langkah berikut ini : 1. Klik "Help -> Software Updates -> Available Software" 2. Klik tombol "Add Site", kemudian masukkan alamatnya sebagai berikut : http://subclipse.tigris.org/update_1.4.x

3. Setelah mengambil data plugin yang tersedia, pilih beberapa plugin seperti pada gambar berikut, lalu klik "Install" :

4. Window baru akan muncul, klik "Finish", jangan lupa untuk mengaccept license agreementnya.

Menguji Koneksi SVN

Menguji Koneksi SVN

Setelah Anda berhasil melakukan instalasi plug-in Subversive, langkah-langkah berikut ini akan membimbing Anda untuk menguji koneksi ke gudang (repository) kode pada SVN server. 1. Klik "New -> Project -> SVN -> Checkout Project from SVN" 2. Klik "Create a new repository location" 3. Masukkan http://belajarjava.googlecode.com/svn/trunk 4. Pilih folder selamatdatang dan klik Finish

5. Project baru akan tersedia di sebelah kiri workspace Anda. Klik "Run -> Run" dan pilh "Java Application" untuk menjalankan program ini. 6. Selamat, Anda telah mempersiapkan software yang diperlukan.

Bab III - Memulai Java


Program komputer adalah rangkaian instruksi yang diberikan agar komputer dapat bekerja. Suatu pekerjaan yang mungkin sederhana bagi manusia tidak dapat dimengerti oleh komputer. Manusia harus memberikan petunjuk kepada komputer bagaimana melakukan

suatutugas dalam bentuk bahasa pemrograman. Bahasa pemrograman berbeda dengan bahasa manusia, karena komputer membutuhkan aturan yang lebih baku apa yang boleh dan apa yang tidak boleh dalam suatu bahasa pemrograman. Aturan ini disebut sintaks bahasa. Sintaks bahasa pemrograman ditentukan berdasarkan apa yang bisa dilakukan oleh komputer, misalnya loop (perulangan), cabang (branch), atau fungsi. Hanya program dengan sintaks yang benar yang dapat dikompilasi atau diinterpretasi yang pada akhirnya bisa dijalankan di komputer. Kompiler akan memberikan pesan kesalahan apabila ada kesalahan dalam sintaks sehingga kita memperbaikinya. Untuk menjadi programmer yang sukses, kita harus mengerti secara detail sintaks dari bahasa pemrograman yang kita akan gunakan. Tetapi, sintaks hanya sebagian cerita. Kita ingin program yang kita buat berjalan sesuai dengan yang kita inginkan. Artinya program tersebut harus benar secara logika. Program yang benar secara logika disebut memiliki semantik yang benar. Di situs ini kita akan mempelajari tentang sintaks dan semantik dari dari setiap bahasa pemrograman Java. Sintaks mudah dihafal, tetapi semantik lebih seperti perasaan. Untuk itu, coba download dan jalankan contoh-contoh program sehingga kita dapat memahami bagaimana setiap program bekerja.

Melihat lebih dekat SelamatDatang Variabel dan Tipe Data String, Objek dan Subrutin Operator Intermezzo : Membaca Input dari User Intermezzo : Mengubah String ke int dan double

Melihat lebih dekat SelamatDatang


Applikasi SelamatDatang memiliki 4 komponen, yaitu :

definisi paket (package) komentar definisi kelas (class) metode main

package selamatdatang; public class SelamatDatang { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Selamat Datang!"); }

Mari kita bahas satu per satu. Definisi paket (package)


package selamatdatang;

Package dalam Java merupakan kumpulan dari berbagai kode yang terangkum dalam satu paket. Untuk memudahkan penulisan dan pembagian logika suatu program, satu paket terbagi menjadi beberapa berkas (file) di mana setiap file memiliki fungsi atau tugas yang sangat khusus, misalnya satu file berfungsi untuk mendeklarasikan konstanta dan kelas, sementara file yang lain berisi implementasi kelas dan prosedurnya. Pada contoh aplikasi SelamatDatang di atas, paket ini hanya berisi satu buah file yang isinya terdiri dari satu kelas dan satu metode. Definisi paket tidak selalu diperlukan, tetapi hal ini merupakan kebiasaan baik untuk melatih kita berfikir secara logis dan sistematis. Komentar
/** * @param args */ // TODO Auto-generated method stub

Komentar tidak akan diproses oleh kompiler tetapi berguna bagi programmer lain. Bahasa Java memiliki 3 jenis komentar :

/* text */ Compiler akan mengabaikan kata kata antara /* dan */ /** documentation */ Ini merupakan komentar yang dipergunakan khusus untuk dokumentasi. Kompiler akan mengabaikan komentar dari /* hingga */. Alat bantu javadoc akan memproses komentar dokumentasi untuk membuat dokumentasi secara otomatis dari sumber program. // text Kompiler akan mengabaikan segala sesuatu dari // hingga akhir baris

Definisi Kelas
public class SelamatDatang { ... }

Kelas merupakan bagian integral dari bahasa Java karena Java merupakan bahasa berorientasi objek. Setiap aplikasi harus terdiri dari satu kelas. Di sini kita definisikan kelas SelamatDatang sebagai kelas utama. Metode main

Dalam bahasa pemrograman Java, setiap aplikasi harus memiliki satu buah metode main yang bentuknya seperti berikut :
public static void main(String[] args) { ... }

Metode main mirip dengan fungsi main pada bahasa C/C++ di mana fungsi ini merupakan pintu gerbang dimulanya suatu program. Metoda main dapat dipanggil dengan menyertakan variabel, baik hanya satu variabel, banyak variabel atau bahkan tidak ada sama sekali. Yang terakhir adalah perintah berikut untuk menampilkan Selamat Datang pada komputer Anda.
System.out.println("Selamat Datang!");

Perintah tersebut menggunakan pustaka inti Java, yaitu kelas Sistem.

Variabel dan Tipe Data


Nama merupakan hal penting dalam teknik pemrograman. Dalam suatu program, nama digunakan untuk menyebut sesuatu. Untuk menggunakan "sesuatu" tersebut, programmer harus mengerti bagaimana aturan pemberian nama dan aturan untuk menggunakan nama tersebut dalam programnya. Atau dengan kata lain, programmer harus mengerti sintaks dan semantik dari nama. Menurut aturan sintaks Java, nama merupakan rangkaian dari 1 atau lebih karakter. Harus dimulai dengan huruf dan harus terdiri dari huruf, angka atau karakter garis bawah '_'. Berikut ini adalah contoh nama yang diperbolehkan:
N n rate x15 quite_a_long_name HelloWorld

Hurus kecil dan huruf besar dianggap berbeda, sehingga HelloWorld, helloworld, HELLOWORLD, dan heLLOwoRLD adalah nama yang berbeda-beda. Beberapa kata tertentu merupakan nama yang memiliki kegunaan tertentu oleh Java, dan tidak dapat dipergunakan oleh programmer. Kata-kata ini disebut reserved words (kata-kata cadangan) misalnya: class, public, static, if, else, while, dan lain-lain. Hal lain yang penting adalah compound names atau nama campuran, yaitu yang merupakan nama biasa yang dihubungkan dengan titik, misalnya System.out.println. Idenya adalah "sesuatu" pada Java dapat terdiri dari "sesuatu" yang lain. Nama System.out.println artinya System menampung out dan out menampung println. Kita sebut "sesuatu" sebagai identifier (pengenal) tidak peduli apakah ia berupa nama tunggal atau campuran.

Program melakukan manipulasi data yang disimpan dalam memori. Dalam bahasa mesin, data hanya bisa diambil dengan menyebut alamatnya di memori. Dalam bahasa pemrograman

tingkat tinggi seperti Java, nama bisa digunakan untk mengganti alamat data tersebut di memori. Tugas komputer adalah untuk melacak di mana data tersebut di simpan, sedangkan programmer menggunakan nama untuk memerintahkan komputer mengambil data tersebut dari memori. Nama yang digunakan seperti ini disebut variable. Variabel sebenarnya berarti lebih kompleks. Variabel bukan isi dari data, tapi lokasi di memori yang menyimpan data tersebut. Variabel bisa diibaratkan sebagai kotak penyimpanan data, bukan isi kotaknya. Karena data di dalam kotak bisa berubah, variabel hanya dapat dipercaya pada satu saat saja, walaupun tempatnya selalu sama. Dalam bahasa Java, satu-satunya cara untuk memasukkan data ke dalam variabel adalah dengan menggunakan assignment statement, atau pernyataan pemberian nilai. Pernyataan ini berbentuk:
variable = ekspresi;

di mana ekspresi menyatakan apapun yang berhubungan dengan nilai suatu data. Ketika komputer menjalankan instruksi ini, komputer akan menghitung dan menyimpan hasilnya ke dalam variabel. Contoh:
kecepatan = 40;

Variable dalam pernyataan di atas adalah kecepatan dan ekspresinya adalah angka 40. Komputer menghitung pernyataan ini dan menyimpan 40 ke dalam variabel kecepatan, dan mengganti apapun yang telah disimpan sebelumnya. Sekarang misalnya kita ingin melakukan perhitungan yang lebih kompleks:
jarak = kecepatan * waktu

Di sini, * merupakan operasi perkalian. Komputer mengambil data yang disimpan dalam variabel kecepatan dan waktu, melakukan perkalian, dan menyimpan hasilnya dalam jarak. Variabel dalam bahasa Java didesign untuk menyimpan hanya 1 jenis tipe data. Kompiler akan menampilkan kesalahan sintax apabila variabel ini dicoba untuk diberi tipe data jenis lain. Oleh karena itu Java disebut bahasa pemrograman bertipe kuat atau strongly typed language. Ada 8 tipe data primitif dalam bahasa Java. Jenis Data boolean char byte short int Deskripsi Hanya bisa berisi benar atau salah Karakter Unicode Bilangan bulat Bilangan bulat Bilangan bulat Ukuran 1-bit 16-bit 8-bit 16-bit 32-bit Minimum Maksimum

-127 -32768 -2147483648

128 32767 2147483647

long float double

Bilangan bulat Bilangan riil Bilangan riil

64-bit 32-bit 64-bit

-9223372036854775808 9223372036854775807 1.40129846432481707e3.40282346638528860e+38 45 4.94065645841246544e1.79769313486231570e+308 324

Suatu variabel baru dapat digunakan apabila telah dideklarasikan. Pernyataan deklarasi variabel digunakan untuk mendeklarasikan satu atau lebih variabel dan memberinya nama. Ketika komputer mengeksekusi deklarasi variabel, komputer akan menyediakan ruangan di memori kemudian menyimpan alamat ini sesuai dengan nama variabel yang diberikan. Deklarasi variable berbentuk seperti :
nama_tipe nama_variabel;

nama_variabel dapat berupa sebuah nama variabel atau beberapa nama sekaligus yang dipisah dengan koma. Gaya pemrograman yang baik yaitu dengan mendeklarasikan satu variabel dalam satu pernyataan, kecuali variabel tersebut berhubungan erat satu sama lain. Misalnya:
float num; String nama; String nama; boolean bol; int x,y;

Atau pendeklarasian variabel bisa juga dilakukan sekaligus dengan pemberian nilainya, seperti pada contoh berikut:
int num = 1000; char ch = 'e'; float angka = -1.504; boolean bol = true;

Jenis-jenis Variabel Java memiliki beberapa jenis variabel yang dapat dikelompokkan sebagai berikut :

Instance Variables (tidak statis). Dalam bahasa pemrograman berorientasi objek, objek menyimpan variabel yang tidak dideklarasikan dengan kata kunci static dalam kategori non-statis, atau dapat berubah-ubah. Suatu kelas dapat dijelmakan ke dalam beberapa objek. Nilai yang terkandung dalam variabel tak-statis ini berbeda untuk setiap objeknya. Class Variables (statis). Variabel ini merupakan bagian integral dari suatu kelas, dan tidak ada satu objek pun yang dapat menyatakan kepemilikan atas variabel ini. Variabel yang dideklarasikan sebagai statis digunakan bersama oleh semua objek. Variabel ini lebih bersifat global yang nilainya sama untuk setiap objek pada kelas yang bersangkutan. Local Variables. Variabel ini didefinisikan di dalam suatu metoda (method) atau dalam suatu prosedur. Variabel ini bersifat lokal karena hanya dapat diakses oleh metoda atau prosedur tersebut.

Parameter. Paramater atau argumen adalah variabel yang digunakan pada saat suatu metoda atau prosedur dipanggil. Parameter berguna untuk memberikan nilai awal untuk diteruskan (pass) ke dalam suatu prosedur atau metoda.

Literal Pada bagian ini akan dijelaskan tentang literal, yaitu rangkaian kata atau huruf yang menyatakan suatu nilai. Misalnya
int angka = 10;

Pada pernyataan di atas, yang dinamakan literal adalah 10, karena 10 berarti bilangan bulat atau integer. Pada bahasa pemrograman java, terdapat beberapa jenis literal yang melambangkan bilangan bulat, riil, kalimat, atau boolean. Literal Bilangan Bulat Bilangan bulat dapat dilambangkan dalam beberapa bentuk. Bilangan bulat biasa dilambangkan dengan deretan angka yang dimulai dengan angka yang bukan nol.
int angka = -10;

Bilangan oktal adalah bilangan bulat berbasis 8, yang berarti hanya dapat terdiri dari angkaangka 0 hingga 7. Bilangan oktal ditulis seperti bilangan bulat biasa dimulai dengan 0.
// 22 basis delapan atau 18 dalam desimal int angka = 022;

Bilangan heksadesimal adalah bilangan berbasis 16. Bilangan heksadesimal dilambangkan dengan 0 hingga 9 dan a hingga f dan dimulai dengan 0x.
// 2a heksadesimal atau 42 dalam desimal int angka = 0x2a;

Long integer. Seperti dijelaskan pada bab terdahulu long integer membutuhkan memori sebesar 64bit, yang artinya kita dapat menyimpan bilangan bulat hingga 2 ^ 64. Untuk merepresentasikan long integer, tambahkan huruf L pada akhir bilangan.
int angka = 22L;

Literal Karakter Kita dapat melambangkan suatu karakter dengan tanda petik tunggal misalnya a atau 3 atau =. Suatu karakter dapat juga dilambangkan dengan kode ASCII nya. Caranya dengan

memulainya dengan \u00 (garis miring terbalik) kemudian diikuti dengan kode ASCII nya dalam bentuk heksadesimal.
// huruf 'A' dalam ASCII char huruf = '\u0041';

Selain itu ada beberapa karakter lain selain alfabet yang dapat dilambangkan dengan escape sequence. Berikut ini beberapa contohnya. \n = tombol enter atau baris baru. \r = carriage return. \t = tombol tab. \b = tombol backspace. \\ = karakter \ \ = karakter \ = karakter Literal Boolean Nilai true dan false pada java merupakan literal boolean. Suatu variabel bertipe boolean hanya dapat memiliki nilai true atau false.
boolean ok = true;

Ingat bahwa boolean true atau false TIDAK menggunakan tanda petik tunggal seperti ekspresi pada karakter. Literal Bilangan Riil Bilangan riil, misalnya -0.00127 atau 415.842, pada java dapat disimpan baik sebagai float atau double. Bilangan real dapat direpresentasikan dalam bentuk desimal biasa, pecahan, atau eksponen (dilambangkan dengan e atau E). Ukuran bytes bit 4 8

Tipe float double

Rentang

Presisi (jumlah digit) 6-7 15

32 +/- 3.4 x 1038 64 +/- 1.8 x 10


308

Imbuhan akhir d atau D dan f atau F dapat pula ditambahkan untuk menentukan tipenya secara eksplisit. Berikut beberapa contohnya.
double d = 3.27E+32; float f = 4f;

float pi = 3.14159;

Literal String String merupakan untaian huruf dan angka yang tersusun menjadi satu kalimat. Dalam bahasa java, string bukan merupakan tipe primitif, tetapi merupakan kelas. String pada java tidak disimpan dalam bentuk array seperti pada C. Java menyediakan beberapa metoda untuk melakukan penggabungan, modifikasi, atau perbandingan. String ditulis di antara dua tanda petik ganda seperti contoh berikut.
String salam = "Selamat Datang";

String juga dapat mengandung karakter spesial seperti dibahas pada literal karakter. Misalnya
String hallo = "Selamat Datang \"Bapak Presiden\""; System.out.println("Hallo Bambang\nSelamat pagi,\nSemoga hari anda cerah\n";

Berikut ini adalah beberapa contoh lainnya.


// Contoh string kosong String teks = ""; // Contoh string berisi " teks = "\""; // String dapat juga dipisah menjadi beberapa baris teks = "ini baris pertama " + "dan ini lanjutannya."

Literal Null Literal terakhir pada bahasa java adalah literal null. Null merupakan kondisi di mana suatu objek tidak diberi alokasi memori. Pada saat suatu objek dideklarasikan, komputer akan mengalokasikan memori untuk objek tersebut. Apabila objek tersebut telah selesai dipergunakan, kita dapat melepas lokasi memori yang digunakan oleh objek tersebut sehingga memori itu dapat digunakan oleh objek lain. Berikut ini adalah contohnya
obj = null;

Literal null berfungsi memberi tahu garbage collector (pemulung memori) bahwa objek tersebut tidak lagi terpakai. Kemudian memori akan dilepaskan agar dapat digunakan oleh objek lain.

Contoh Program Variabel dan Tipe Data

Contoh Program Variabel dan Tipe Data


Berikut ini adalah listing program penghitungan bunga bank. Kode program dapat anda unduh dalam bentuk zip file atau melalui SVN di alamat berikut : http://belajarjava.googlecode.com/svn/trunk/BungaBank Lihat cara mengimpor contoh-contoh program ke dalam Eclipse di Bab II - Instalasi.
package bungabank; public class BungaBank { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub /* Deklarasi variable */ double pokok; // nilai investasi double sukubunga; // suku bunga bank double bunga; // nilai bunga /* Perhitungan */ pokok = 20000; sukubunga = 0.10; // sama dengan 10% bunga = pokok * sukubunga; pokok = pokok + bunga; /* Cetak hasil keluaran */ System.out.print("Bunga yang dihasilkan adalah Rp. "); System.out.println(bunga); System.out.print("Nilai investasi setelah 1 tahun adalah Rp. "); System.out.println(pokok); } }

Berikut adalah hasil keluarannya :

Sisipan Ukuran BungaBank-src.zip 1.76 KB

String, Objek dan Subrutin


Bagian sebelumnya memperkenalkan 8 jenis tipe data primitif dan tipe data String. Perbedaan mendasar antara tipe primitif dan String adalah : nilai dari tipe String berupa objek. Objek akan dibahas pada bagian lain mengenai kelas (class). Di bagian ini kita akan belajar bagaimana String digunakan dan juga mempelajari konsep pemrograman penting yang lain, yaitu subrutin. Subrutin adalah kumpulan instruksi program yang digabungkan sehingga memiliki fungsi tertentu. Dalam bahasa Java, setiap subrutin termasuk di dalam bagian suatu kelas atau objek. Java menyediakan kelas standar yang siap digunakan. Nilai tipe String adalah objek yang memiliki kumpulan subrutin yang dapat digunakan untuk memanipulasi String tersetbut. Kita bisa memanggil subrutin tersebut tanpa harus mengerti bagaimana subrutin tersebut bekerja. Sebenarnya ini adalah tujuan subrutin, yaitu sekumpulan perintah yang memiliki fungsi tertentu tanpa harus mengetahui secara detail apa yang terjadi di dalam.

Kelas terdiri dari variabel dan subrutin yang disimpan di dalamnya. Variabel dan subrutin ini disebut static member (anggota statis). Contohnya adalah pada program SelamatDatang, kelas SelamatDatang memiliki anggota main() yang merupakan anggota statis kelas itu. Anggota yang berupa static member diberi imbuhan static, seperti pada main(). Fungsi kelas yang lain adalah untuk mendeskripsikan suatu objek. Kelas di sini berfungsi seperti tipe data. Nilai yang disimpan dalam tipe data itu adalah objek. Misalnya String sebenarnya merupakan nama kelas yang disediakan bahasa Java. String juga berupa tipe data dan kalimat seperti "Selamat Datang!" adalah isi dari tipe data String. Kegunaan kelas baik sebagai gabungan subrutin ataupun sebagai objek sering membingungkan. Misalnya kelas String juga menyimpan beberapa subrutin statik selain juga sebagai tipe data. Contoh kelas standar lainnya adalah Math yang berisi kumpulan subrutin statik untuk melakukan berbagai perhitungan matematis.

Kelas sebagai tipe data Kelas sebagai kumpulan subrutin dan variabel statik Kelas Math Kelas String

Intermezzo : Membaca Input dari User


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); } }

Program tersebut dapat Anda unduh dalam bentuk zip file atau melalui SVN di http://belajarjava.googlecode.com/svn/trunk/AmbilInputKonsol 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.

Sisipan Ukuran AmbilInputKonsol-src.zip 1.22 KB

Intermezzo : Mengubah String ke int dan double


Kita dapat mengubah tipe data String, misalnya hasil input dari konsol atau dari hasil bacaan file, ke tipe data bilangan untuk pengolahan lebih lanjut. Sebagai contoh, kita akan membuat program untuk menghitung nilai investasi setelah n tahun. Input yang diminta dari user adalah :

Nama Investasi awal (Rp) Bunga (%) Periode (tahun)

Dengan menggunakan teknik yang sama pada contoh sebelumnya, kita bisa mengambil input tersebut menggunakan kelas BufferedReader seperti berikut.
nama = br.readLine(); strawal = br.readLine(); strbunga = br.readLine(); strperiode = br.readLine();

Tetapi karena keluaran dari readLine() bertipe String, kita harus mengubahnya menjadi bentuk bilangan agar dapat diproses lebih lanjut. Untuk mengubah String menjadi int, kita dapat menggunakan kelas Java Integer yang di dalamnya memiliki fungsi parseInt(str). Fungsi ini dapat dipanggil dengan:
periode = Integer.parseInt(strperiode);

Sedangkan untuk mengubah String menjadi double, kita menggunakan kelas Java Double yang di dalamnya memiliki fungsi parseDouble(str). Fungsi ini dapat dipanggil dengan:
awal = Double.parseDouble(strawal); bunga = Double.parseDouble(strbunga);

Setelah semua variabel didapat dan diubah, kita baru bisa untuk memulai perhitungan. Untuk menghitung bunga bank setelah n tahun, kita bisa menggunakan rumus berikut : akhir = awal * (1 + bunga)periode Dalam Java, rumus tersebut bisa dituliskan dengan ekspresi berikut
akhir = awal * Math.pow(1 + bunga,periode);

Berikut ini adalah listing program lengkap yang dapat diunduh dalam bentuk zip file atau melalui SVN di alamat http://belajarjava.googlecode.com/svn/trunk/HitungInvestasiNPeriode
package hitunginvestasinperiode; import java.io.*; public class HitungInvestasiNPeriode { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // 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; String strawal = null; String strbunga = null; String strperiode = null; try { System.out.print("Masukkan nama Anda : "); nama = br.readLine(); System.out.print("Masukkan jumlah awal investasi (Rp) : "); strawal = br.readLine(); System.out.print("Masukkan bunga (mis 0.1 = 10%) : "); strbunga = br.readLine(); System.out.print("Masukkan periode (tahun) : "); strperiode = br.readLine(); } catch(IOException ioe) { System.out.println("Kesalahan IO pada saat menanyakan nama Anda"); System.exit(1); } // deklarasi variabel tipe bilangan double awal; double bunga; int periode;

double akhir; // mengubah input dari Sting ke tipe data bilangan periode = Integer.parseInt(strperiode); awal = Double.parseDouble(strawal); bunga = Double.parseDouble(strbunga); // menghitung hasil investasi selama n periode akhir = awal * Math.pow(1+bunga, periode); // tampilkan hasil perhitungan di layar System.out.println(); System.out.println("Terima kasih, " + nama); System.out.print("Hasil investasi Anda setelah " + periode + " tahun "); System.out.println("adalah Rp. " + akhir); } }

Berikut ini adalah hasil keluarannya :

Sisipan Ukuran HitungInvestasiNPeriode-src.zip 1.58 KB

Bab IV - Memulai Java Lebih Lanjut Struktur Kontrol


Komponen mendasar dari suatu program -- variabel, ekspresi, penyataan, dan pemanggilan subrutin -- telah dijelaskan pada Bab sebelumnya. Mulai dari bab ini, kita akan melihat bagaimana komponen dasar tersebut berinteraksi sehingga menjadi program yang lebih kompleks. Pada bab ini, kompleksitas program akan lebih dititikberatkan pada apa yang bisa dilakukan dari dalam sebuah subrutin. Lebih khusus, akan dijelaskan lebih lanjut tentang struktur kontrol. Struktur kontrol, yaitu perulangan (loop) dan percabangan (branch), dapat digunakan untuk mengulangi perintah berulang-ulang atau untuk memilih dua atau lebih skenario. Java memiliki beberapa struktur kontrol dan kita akan lihat secara lebih detail kemudian. Bab ini juga akan membahas tentang desain suatu program. Jika kita dihadapkan pada suatu permasalahan yang akan dipecahkan oleh program komputer, bagaimana caranya kita berfikir untuk merancang program tersebut. Kita akan melihat sebagian jawabannya di bab ini, dan kemudian akan kita gunakan dalam beberapa contoh yang tersedia.

Blok, Perulangan, dan Percabangan Perancangan Algoritma Membuat kode, menguji, dan mencari kesalahan (debugging) while dan do ... while Perulangan for Pernyataan if Pernyataan switch

Blok, Perulangan, dan Percabangan


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.

Perancangan Algoritma
Posted Min, 02/15/2009 - 21:06 by belajarprogram Versi ramah cetak Komputer itu bodoh! Kenapa? Karena sebagai programmer, kita harus memberikan perintah hingga sangat detail apa yang harus dikerjakan oleh komputer. Programmer adalah orang yang bertugas untuk menerjemahkan suatu tugas menjadi instruksi detail yang dapat dimengerti oleh komputer. Komputer hanya melakukan apa yang diperintahkan baris demi baris, tetapi komputer tidak bisa berfikir bagaimana melakukan suatu tugas seefisien mungkin. Untuk itu programmer baru harus dilengkapi dengan cara berfikir dan peralatan yang memungkinkan mereka untuk sukses dalam menerjemahkan suatu tugas menjadi rangkaian perintah yang bisa dimengerti oleh komputer. Program komputer itu seperti seni yang memuat suatu ide. Seorang programmer mulai dengan suatu tugas di kepalanya, misalnya menghitung sisi miring dari segitiga siku-siku. Kemudian dia akan berfikir tentang apa yang harus dilakukan untuk menyelesaikan tugas tersebut dalam bahasa manusia. Dalam hal ini misalnya, sisi miring dapat dihitung dengan

mengambil akar kuadrat dari jumlah kuadrat sisi siku-sikunya. Pemecahan masalah ini kemudian diterjemahkan ke dalam bahasa pemrograman yang berupa perintah langkah demi langkah bagaimana komputer harus menyelesaikan tugas tersebut. Perintah langkah demi langkah hingga detail ini disebut algoritma. (Secara teknis, algoritma adalah kumpulan langkah-langkah sederhana yang jelas, tidak membingungkan karena hanya ada satu cara untuk melakukan langkah sederhana tersebut, dilakukan selama kurun waktu tertentu. Kita tidak ingin program menghitung selamanya tanpa batas waktu.) Program ditulis dalam bahasa pemgrograman tertentu. Tetapi algoritma ditulis secara umum atau generic, dalam bahasa manusia, sehingga bisa diimplementasikan menggunakan bahasa pemrograman apapun. Atau dengan kata lain, algoritma mirip seperti ide di belakang program yang akan kita tulis. Tetapi ide tersebut harus jelas, dan memuat langkah demi langkah yang sederhana. Jadi darimana algoritma itu datang? Biasanya orang harus membuat algoritma itu. Dengan skill, latihan dan pengalaman, orang akan lebih mudah membuat suatu algoritma. Di bagian ini akan dibahas tentang bagaimana membuat suatu algoritma. Jadi bahasa Java akan kita tinggalkan sementara. Kita akan beralih untuk berfikir secara abstrak.

Misalnya, kita memiliki suatu tugas di kepala. Salah satu cara untuk menyelesaikan tugas itu adalah menuliskan penyelesaiannya langkah demi langkah, dan dari sana kita membuat algoritma untuk menyelesaikan masalah itu. Kemudian dari setiap langkah tersebut, kita bisa membuat langkah-langkah lain yang lebih detail, sampai kita bisa menerjemahkan langkahlangkah itu ke dalam bahasa pemrograman. Metode ini disebut penghalusan bertahap (stepwise refinement), dan sifatnya top-down atau dari atas ke bawah. Sambil kita menambah detail pada setiap langkah, kita bisa mulai menuliskan algoritma dalam bentuk pseudocode (kode palsu) yang bentuknya tidak harus persis atau mengikuti suatu bahasa pemrograman. Misalnya, kita ambil contoh untuk menghitung rata-rata dari 5 bilangan. Kita bisa menuliskan pseudocode dalam bentuk berikut :
ambil input user untuk bilangan pertama masukkan ke variabel x ambil input user untuk bilangan kedua tambahkan variabel x dengan bilangan kedua ambil input user untuk bilangan ketiga tambahkan variabel x dengan bilangan ketiga ambil input user untuk bilangan keempat tambahkan variabel x dengan bilangan keempat ambil input user untuk bilangan kelima tambahkan variabel x dengan bilangan kelima bagi variabel x dengan 5 tampilkan hasilnya di layar

Algoritma di atas betul, tetapi terlalu banyak perulangan. Bagaimana jika bilangan yang akan dirata-ratakan ada 100? Kita bisa udah algoritma di atas dengan pseudocode yang lebih mudah dimengerti, misalnya

while a kurang dari 5 ambil input user untuk bilangan ke-a tambahkan nilai x dengan bilangan ke-a tambah a dengan 1 bagi variabel x dengan 5 tampilkan di layar

Sekarang, ambil input user bisa dideskripsikan lebih jauh. Kita harus memberikan pertanyaan kepada user. Dan seperti dipelajari pada bab sebelumnya, input dari user berupa String yang harus diterjemahkan ke dalam tipe data bilangan untuk bisa dikalkulasi. Pseudocode di atas dapat ditulis ulang sebagai berikut :
while a kurang dari 5 beri pertanyaan kepada user untuk memasukkan bilangan ke-a ambil input user untuk bilangan ke-a ubah input menjadi bilangan tambahkan nilai x dengan bilangan ke-a tambah a dengan 1 bagi variabel x dengan 5 tampilkan di layar

Dan juga dari pelajaran sebelumnya, untuk mengambil input user, kita bisa dihadapkan pada permasalahan IO (input output). Selain itu kita juga harus menginisialisasi pembaca dan tempat meletakkan string sementara. Untuk itu, kita harus mengubah pseudocode nya menjadi seperti ini
inisialisasi pembaca inisialisasi tempat string sementara while a kurang dari 5 beri pertanyaan kepada user untuk memasukkan bilangan ke-a "coba" ambil input user untuk bilangan ke-a jika ada masalah keluar dari program ubah input menjadi bilangan tambahkan nilai x dengan bilangan ke-a tambah a dengan 1 bagi variabel x dengan 5 tampilkan di layar

Kemudian, perlu diperhatikan bahwa variabel a dan x tidak diketahui nilai awalnya oleh komputer. Bayangkan jika nilai a dan x ditentukan oleh komputer secara acak, bukan saja hasil rata-ratanya menjadi tak tentu, tetapi juga perulangannya menjadi tak menentu. Untuk itu kita harus tambahkan perintah untuk menginisialisasi a dan x dengan 0, sehingga pseudocodenya menjadi
inisialisasi x dengan 0 inisialisasi a dengan 0 inisialisasi pembaca inisialisasi tempat string sementara while a kurang dari 5 beri pertanyaan kepada user untuk memasukkan bilangan ke-a "coba" ambil input user untuk bilangan ke-a jika ada masalah keluar dari program ubah input menjadi bilangan tambahkan nilai x dengan bilangan ke-a tambah a dengan 1 bagi variabel x dengan 5 tampilkan di layar

Dari sini kita bisa menerjemahkan pseudocode tersebut menjadi program Java, yaitu
double x = 0; int a = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strbilangan = null; while (a < 5) { System.out.print("Masukkan bilangan ke-" + a + " : "); try { strbilangan = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } x = x + Double.parseDouble(strbilangan); a = a + 1; } x = x / 5; System.out.println("Rata-rata bilangan yang dimasukkan adalah " + x);

Jangan lupa bahwa program tersebut membutuhkan paket java.io.*, sehingga kita harus menambah
import java.io.*

di awal kelas. Berikut ini adalah program lengkapnya dan dapat diunduh dalam bentuk zip file atau melalui SVN di alamat berikut http://belajarjava.googlecode.com/svn/trunk/HitungRataRata5Bil
package hitungratarata5bil; import java.io.*; public class HitungRataRata5Bil { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub double x = 0; int a = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String strbilangan = null; while (a < 5) { System.out.print("Masukkan bilangan ke-" + a + " : "); try { strbilangan = br.readLine(); } catch (IOException ioe) { System.out.println("Kesalahan IO, program berhenti"); System.exit(1); } x = x + Double.parseDouble(strbilangan);

a = a + 1; } x = x / 5; System.out.println("Rata-rata bilangan yang dimasukkan adalah " + x); } }

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

Berikut ini adalah hasil keluarannya, Anda bisa mencoba-coba dengan bilangan apapun.

Sisipan Ukuran HitungRataRata5Bil-src.zip 1.28 KB

Membuat kode, menguji, dan mencari kesalahan (debugging)


Akan sangat sederhana dan indah apabila program yang kita tulis akan berjalan 100% tanpa kesalahan sama sekali. Kita tinggal memencet tombol run, dan semuanya berjalan sesuai rencana. Nyatanya tidak demikian. Coba Anda ganti salah satu dari beberapa contoh yang sudah diberikan dengan mengganti salah satu kurung { menjadi (. Kemudian pada Eclipse, jalankan dengan "Run -> Run". Lihat apa yang terjadi. Eclipse akan menampilkan pesan kesalahan, itu artinya secara sintaks, atau format penulisan program ada memiliki kesalahan, dan Anda harus memperbaikinya sebelum program bisa dijalankan.

Sintaks adalah salah satu cara menentukan bagaimana komputer harus bekerja. Manusia tidak membutuhkan sintaks untuk berbicara karena manusia bisa menentukan mana subjek, predikat, atau objek dengan mudah, bahkan untuk kalimat yang belum pernah dibaca atau didengar sekalipun.

Bagi komputer, sintaks membantu komputer mengelola logika, mana yang merupakan variabel, mana yang berupa subrutin, mana perulangan, mana percabangan dan lain-lain. Dalam bahasa Java, yang merupakan bahasa dengan sintaks ketat, perbedaan sintaks sedikit saja membuat Java tidak mengerti apa yang dimaksud dalam program. Bagi beberapa programmer, ketidakluwesan Java mungkin menghambat, tetapi perlu diingat bahwa kesalahan hanya datang dari manusia. Ketidakluwesan Java membantu programmer harus menggunakan logika yang benar, dan tidak boleh salah dalam menggunakan variabel. Variabel yang sudah ditentukan tipenya tidak dapat diubah ditengah jalan, kecuali dengan membuat variabel baru dengan tipe yang berbeda. Debugging Ketika program Anda tidak menunjukkan kesalahan sintaks, bukan berarti program Anda bebas dari kesalahan. Program harus diuji apakah ia berjalan sesuai dengan yang diharapkan. Idealya apabila program menerima input yang tidak sesuai dengan yang diharapkan, program akan memberikan pesan kepada penggunanya tentang kesalahan tersebut, bukan tiba-tiba keluar tanpa pesan. Kita mungkin harus melakukan testing secara lebih perlahan-lahan. Apabila jumlah baris dalam program kita kecil, mungkin kesalahan tersebut dengan mudah akan kita temui. Tetapi apabila program tersebut sangat besar, maka mencari kesalahan yang kelihatannya sederhana tidaklah mudah. Pencarian kesalahan ini dalam bahasa pemrograman disebut dengan "debugging", yang jika diterjemahkan ke dalam bahasa Indonesia berarti membersihkan kutu, karena kesalahan kecil dianggap sebagai kutu yang mengganggu jalannya program. Eclipse menyediakan peralatan untuk melakukan debugging, yaitu dengan menekan tombol "Run -> Debug". Dalam Eclipse, debugging yang bisa dilakukan antara lain: membuat breakpoint (tempat berhenti program), mengeksekusi satu demi satu perintah, mengeksekusi satu subrutin, melihat isi variabel saat ini, dan bahkan mengganti variabel pada saat program dijalankan. Untuk mendemonstrasikan debugging ini, mari kita gunakan program menghitung rata-rata pada bagian terdahulu. Membuat breakpoint Kita bisa menjalankan program baris demi baris, tetapi sebelum kita melakukannya, kita harus memberhentikan program tersebut di satu tempat terlebih dahulu. Tempat pemberhentian program sementara ini disebut breakpoint. Untuk mengeset breakpoint, double klik bagian paling kiri dari baris di mana Anda ingin program tersebut berhenti. Misalnya pada tampilan berikut, program berhenti di baris double x=0;. Perhatikan juga bahwa baris yang diberi breakpoint memiliki tanda bulat di sampingnya.

Untuk menghapus breakpoint, double click lagi tanda bulat di baris yang sudah diberi breakpoint tadi. Menjalankan program hingga breakpoint Coba tekan tombol F11 atau "Run -> Debug". Pada saat Anda memulai debugging, Eclipse akan memberikan pertanyaan bahwa perspective (atau tampilan Eclipse) Anda akan diubah ke debugging perspective. Tekan Yes untuk mengubah perspective tersebut.

Berikut ini adalah perspektif dalam mode debugging.

Perhatikan bahwa di samping tanda bulat tadi, ada tanda panah (->) yang menunjukkan saat ini komputer telah melaksanakan program hingga pada baris ini. Di samping kanan adalah daftar variabel yang dideklarasikan dalam program ini. Karena baris yang kita pilih adalah baris pertama setelah deklarasi pada subrutin main, maka hanya satu variabel yang tersedia, yaitu yang berasal dari arg. Menjalankan program langkah per langkah Apabila Anda sudah berada dalam mode debugging, Anda bisa melakukan navigasi untuk melakukan eksekusi sesuka Anda. Ada beberapa pilhan yang disediakan oleh Eclipse, semuanya terdapat dalam menu Run yaitu :

Resume melanjutkan eksekusi program yang berhenti. Suspend menghentikan sementara program yang sedang jalan. Terminate menghentikan sesi debugging saat ini. Step Into mengeksekusi SATU perintah atau masuk ke dalam subrutin. Step Over mengeksekusi SATU perintah. Jika perintah tersebut merupakan perintah panggilan subrutin, maka subrutin tersebut akan dieksekusi tanpa masuk ke dalam subrutin yang dipanggil tersebut. Step Return mengeksekusi seluruh perintah pada subrutin ini kemudian kembali kepada pemanggilnya. Run to Line menjalankan program dari baris tempat berhentinya program sekarang hingga baris yang Anda tentukan. Atau jika di antaranya terdapat breakpoint lagi, maka program akan berhenti di breakpoint tersebut.

Mari kita coba untuk menjalankan progam satu langkah dengan menggunakan "Run > Step Over" atau tombol F6. Berikut ini adalah screen shot setelah program maju satu langkah. Perhatikan bahwa tanda panah maju satu langkah. Dan juga karena instruksi pada baris ini adalah mendeklarasikan variabel x bertipe double, dan kemudian mengisinya dengan 0, variabel ini akan muncul di kanan atas perspektif Debug.

Lakukan terus Step Over hingga program berakhir, dan Anda akan melihat langkah demi langkah bagaimana program dijalankan secara bertahap. Perlu diingat, pada saat program sampai pada instruksi untuk mengambil input Anda, klik bagian bawah (tab yang bernama Console), dan masukkan angka sebagai input kemudian tekan Enter. Lihat bagaimana variabel di kanan atas berubah sesuai dengan input yang Anda berikan. Melihat dan mengubah isi variabel Di sini saya jalankan program setiap baris hingga a = a + 1 seperti pada gambar berikut.

Kemudian, saya ingin memperpanjang perulangan, sehingga bukan melakukan 5 kali perulangan, tetapi 6 kali, yaitu dengan mengubah nilai a menjadi -1. Ini bisa dilakukan yaitu dengan mengklik nilai dari a, yang semula 0, kemudian diganti menjadi -1, seperti pada screen shot berikut.

Setelah diganti coba jalankan program hingga selesai, misalnya dengan "Run -> Resume". Jangan lupa untuk memasukkan inputnya di bagian Console. Lihat sekarang bilangan ke-0 ditanyakan 2 kali, yang artinya user diperintahkan untuk memasukkan 6 bilangan. Tentunya hasil rata-ratanya salah, karena perhitungan ratarata dilakukan dengan rumus x = x/5, dalam hal ini seharusnya adalah 6.

Setelah selesai melakukan debugging, Anda mungkin ingin mengubah perspektif kembali seperti semula. Caranya, di bagian paling kanan (lihat gambar dibawah), klik tanda >> kemudian pilihan akan muncul. Klik perspektif Java untuk mengubahnya menjadi tampilan semula.

while dan do ... while


Pernyataan 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; jumlah + bilangan n++; // sama dengan : jumlah = // 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<code>, sehingga program seperti <code>while (suatu_kondisi) perintah

bisa ditulis dalam bentuk


while (true) perintah if (!suatu_kondisi) break; <code>

Apa makna dari program di atas? <code>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. Sisipan Ukuran RataRata-src.zip 1.39 KB

Perulangan for
Posted Jum, 02/20/2009 - 02:07 by belajarprogram Versi ramah cetak 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, yaitu 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 pernyataan while. Sedangkan update_variabel juga berbentuk perintah. inisialisasi_variabel, kondisi_variabel,

pada

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 9 10 11 12 16 18 20 22 24 24 27 30 33 36 32 36 40 44 48 40 45 50 55 60 48 54 60 66 72 56 63 70 77 84 64 72 80 88 96 72 81 90 99 108 80 90 100 110 120 88 99 110 121 132 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(""); } } }

Berikut ini hasil kelurannya:

Sisipan Ukuran TabelPerkalian-src.zip 1.02 KB

Pernyataan if
Pernyataan if merupakan salah satu pernyataan percabangan pada Java, dengan bentuk umum seperti
if (suatu_kondisi) perintah1 else perintah2

Seperti biasa, perintah1 dan perintah2 bisa berbentuk blok yang terdiri dari beberapa perintah. Pernyataan if merupakan bentuk percabangan 2 arah. Bagian else yang terdiri dari kata "else" dan perintah2 tidak selalu harus ada. Perhatikan bahwa baik perintah1 dan perintah2 bisa merupakan pernyataan if itu sendiri. Ada beberapa hal menarik yang mungkin berguna. Ambil contoh dalam pernyataan berikut
if (x > 0) if (y > 0) System.out.println("perintah1");

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

Pertama-tama, komputer tidak peduli bagaimana Anda memformat paragraf dan indentasi dari pernyataan if tersebut. Java akan menganggap else terkait dengan if terdekat, sehingga kode di atas akan dianggap seperti
if (x > 0) if (y > 0) System.out.println("perintah1"); else System.out.println("perintah2"); else

di program di atas akan dianggap bagian dari pernyataan jika y > 0, padahal yang kita maksud adalah else jika x > 0. Untuk memperbaikinya, kita tambahkan tanda kurung {} sehingga menjadi
if (x > 0) { if (y > 0) System.out.println("perintah1"); } else System.out.println("perintah2");

Kedua pernyataan tersebut memiliki arti yang berbeda. Jika x <= 0, pada kode pertama Java tidak mencetak apa-apa ke layar, sedangkan kode kedua java akan mencetak "perintah2". Lebih menarik lagi, perhatikan kode berikut
if (kondisi_pertama) perintah1 else if (kondisi_kedua) perintah2 else perintah3

Lagi-lagi karena Java tidak membedakan indentasi penulisan, maka kode tersebut akan diterjemahkan Java seperti
if (kondisi_pertama) perintah1 else if (kondisi_kedua) perintah2 else perintah3

Dengan kata lain perintah tersebut lebih seperti percabangan 3 arah. Komputer akan mengeksekusi hanya salah satu dari perintah1, perintah2, atau perintah3. Komputer akan mengevaluasi kondisi_pertama, jika true, maka perintah1 dieksekusi sementara perintah2 dan perintah3 diabaikan. Jika false, maka kondisi_kedua akan dievaluasi. Jika true, maka perintah2 akan dieksekusi dan perintah3 diabaikan. Jika false, maka hanya perintah3 saja yang dieksekusi.

Berikut ini adalah contoh penggunaan percabangan 3 arah.


if (suhu < 20) System.out.println("Dingin"); else if (suhu < 30) System.out.println("Lumayan"); else System.out.println("Panas");

Kita bahkan dapat membentuk pernyataan if-else ini menjadi percabangan N arah, misalnya
if (kondisi_pertama) perintah1 else if (kondisi_kedua) perintah2 else if (kondisi_ketiga) perintah3 else if (kondisi_keempat) perintah4 . . . else if (kondisi_keNminus1) perintahNmin1 else perintahN

Contoh berikut ini adalah mengurutkan 3 bilangan dari kecil ke besar. Misalnya kita mempunyai 3 variabel a,b dan c. Bilangan yang paling kecil adalah bilangan yang lebih kecil dari kedua bilangan yang lain. Sekarang mari kita rangkai logika untuk menentukan urutan bilangan dari kecil ke besar. Mula-mula kita cek apakah a lebih kecil dari b dan c, yaitu dengan pernyataan
if (a < b && a <c)

Jika a betul merupakan bilangan terkecil, maka kita uji apakah b lebih kecil dari c dengan perintah
if (b < c)

Jika a bukan bilangan terkecil, maka b atau c, salah satunya bisa merupakan bilangan terkecil. Kita hanya perlu membandingkan apakah b lebih kecil dari c dengan
if (b < c)

Jika b lebih kecil dari c, berarti kita tahu bahwa b adalah bilangan terkecil. Tetapi kita belum tahu apakah bilangan terkecil berikutnya adalah a atau c, sehingga kita harus menguji lagi dengan
if (a < c)

Jika a lebih kecil dari c, maka urutannya adalah b, a, c. Jika tidak, maka urutannya adalah b, c, a.

Demikian halnya apabila jika b > c, maka kita bisa tentukan urutan bilangannya. Keseluruhan logika ini, bisa kita tuangkan dalam bentuk :
if (a < b && a < c) { if (b < c) System.out.println(a else System.out.println(a } else if (b < c) { if (a < c) System.out.println(b else System.out.println(b } else { if (a < b) System.out.println(c else System.out.println(c }

+ " " + b + " " + c); + " " + c + " " + b); + " " + a + " " + c); + " " + c + " " + a); + " " + a + " " + c); + " " + b + " " + a);

Logika di atas bisa juga dituangkan dengan cara lain, yaitu melihat urutannya. Pertama kita cek apakah a < b. Jika ya, kita tahu bahwa urutannya pasti a terlebih dahulu baru b. Kemudian kita lihat apakah c berada di sebelah kiri a atau disebelah kanan b atau di tengahtengah. Demikian seterusnya jika urutannya b terlebih dahulu baru a. Sehingga kodenya bisa dituliskan dalam bentuk :
if (a < b) { if (c < a) System.out.println(c else if (c > b) System.out.println(a else System.out.println(a } else { if (c < b) System.out.println(c else if (c > a) System.out.println(b else System.out.println(b }

+ " " + a + " " + b); + " " + b + " " + c); + " " + c + " " + b); + " " + b + " " + a); + " " + a + " " + c); + " " + c + " " + a);

Pernyataan switch
Penyataan percabangan kedua yang dimiliki Java adalah switch. Pernyataan switch lebih jarang digunakan, tetapi sering bermanfaat apabila kita ingin menuliskan percabangan multi arah. Pernyataan switch memiliki bentuk sebagai berikut

switch (ekspresi) { case nilai1: perintah1 break; case nilai2: perintah2 break; case nilai3: perintah3 break; default: perintah_lain }

Di sini pernyataan switch akan mencari nilai ekspresi yang sesuai dengan nilai-nilai yang didaftarkan pada pernyataan case. Jika salah satu nilai ditemui, maka program akan melompat ke cabang case tersebut dan melakukan perintah yang terdapat di sana. Jika tidak ditemui, maka program akan melompat ke perintah yang terdapat pada pernyataan default. Catatan ekspresi hanya bisa berbentuk nilai bilangan bulat (int, short, dan sejenisnya) atau karakter, sehingga kita tidak bisa menggunakan switch untuk mengevaluasi ekspresi yang berbentuk String. Pernyataan break di atas sebetulnya tidak harus selalu ada. Tetapi, perintah break di sini memerintahkan komputer agar segera keluar dari blok switch apabila perintah tersebut telah selesai dilaksanakan. Apabila perintah break tidak diberikan, maka program akan terus mengeksekusi perintah lain meskipun sudah berada di luar nilai yang tertera dalam pernyataan casenya. Misalnya, lihat kode berikut ini :
switch (N) case 1: System.out.println("Angka break; case 2: case 3: case 4: case 5: System.out.println("Angka break; case 6: case 7: case 8: System.out.println("Angka break; default: System.out.println("Angka }

tersebut bernilai 1");

tersebut bernilai 2, 3, 4, atau 5");

tersebut bernilai 6, 7, atau 8"); tersebut tidak bernilai 1 - 8");

Salah satu aplikasi di mana pernyataan switch berguna adalah untuk memproses menu. Menu memiliki beberapa pilihan dan user akan diminta untuk memilih suatu pilihan. Kita dapat menggunakan switch untuk menginstruksikan komputer untuk melakukan tugas tertentu sesuai dengan menu yang dipilih oleh user.

Jika Anda ingat pernyataan main() pada program Java, pernyataan main memiliki parameter String[] args, di mana args merupakan argumen yang diberikan pada saat program dijalankan melalui konsol. Biasanya argumen yang diberikan berupa opsi bagaimana program harus dilaksanakan. Di sini pernyataan switch juga berguna untuk memilih bagaimana program akan berjalan. Jika Anda terbiasa atau pernah bergaul dengan Linux, maka tidak asing untuk menemukan perintah pada Linux seperti "ls -l" atau "tar xfz blabla". Di sini ls atau tar adalah nama program dan "-l" atau "xfz blabla" adalah argumen yang diberikan pada saat program dijalankan. Pernyataan kosong Pernyataan kosong sebenarnya merupakan blok kosong, atau sama dengan {} tanpa perintah apa-apa di dalamnya. Dalam Java, pernyataan kosong juga berarti tanda ; sehingga apabila Anda menulis kode seperti
if (x > 0); perintah1

maka perintah1 akan tetap dilaksanakan walaupun x <= 0. Perintah kosong sering merupakan sumber kesalahan dan salah satu fitur yang sulit untuk dicari kesalahannya pada saat debugging. Misalnya perintah berikut
for (i = 1; i <= 10; i++); System.out.println("hallo");

Anda berharap untuk mencetak kata hallo 10x di layar, pada kenyataannya hanya 1 hallo yang dicetak. Kenapa? Karena tanda ";" setelah for menyatakan bahwa program tidak melakukan apa-apa di dalam perulangan. Perintah System.out.println("hallo") tidak berada di dalam perulangan for, sehingga perintah ini hanya dijalankan 1x saja. Pernyataan-pernyataan lain Hingga saat ini kita sudah membahas hampir semua pernyataan yang Java sediakan. Ada beberapa yang akan kita bahas kemudian, tetapi pernyataan-pernyataan ini merupakan pernyataan lanjutan Java, seperti return yang digunakan untuk membuat subrutin sendiri, atau try...catch dan throw untuk mengontrol alur kesalahan apabila ditemui di tengah program (atau dengan kata lain eksepsi atau pengecualian), dan synchronized untuk mengatur kontrol untuk multi-threading. Beberapa kata kunci lain akan juga dibahas pada subjek tentang pemrograman berorientasi objek yang akan kita bahas kemudian.

Contoh Program switch case

Bab V - Subrutin
Pemrograman kompleks Salah satu cara yang digunakan untuk memecah permasalahan kompleks menjadi permasalahan yang lebih kecil adalah dengan subrutin. Subrutin terdiri dari sekelompok perintah yang melakukan suatu tugas tertentu. Subrutin memiliki nama, sehingga bisa dipanggil suatu saat di bagian lain program. Ketika komputer mengeksekusi program, setiap kali nama subrutin tersebut dipanggil, program akan melaksanakan semua perintah di dalam subrutin tersebut. Subrutin boleh digunakan berulang-ulang, dari mana pun di dalam program, bahkan dari dalam subrutin lain. Dengan cara ini kita bisa membuat subrutin sederhana yang digunakan berulang-ulang di seluruh program. Dengan cara ini, program besar dapat dipecah menjadi bagian-bagian kecil. yang masing-masing melakukan perintah sederhana. Seperti dijelaskan sebelumnya, subrutin bisa berbentuk statik atau non-statik. Dalam bagian ini hanya subrutin statik yang akan dijelaskan lebih lanjut. Subrutin non-statik adalah inti dari pemrograman berorientasi objek, dan akan dijelaskan lebih lanjut pada bab berikutnya.

Kotak Hitam Subrutin Statik dan Variabel Statik Parameter Tipe Keluaran Toolbox, API, dan Paket Tentang Deklarasi

Kotak Hitam
Subrutin terdiri dari beberapa instruksi yang melakukan suatu tugas tertentu, dikumpulkan dalam satu himpunan, dan diberi nama. Kumpulan instruksi ini bisa berupa suatu "tugas" yang cukup kompleks yang disatukan sebagai konsep. Dengan cara ini, kita tidak perlu lagi memikirkan bagaimana komputer melakukan tugas hingga sedetail mungkin. Kita hanya perlu memanggil nama subrutin tersebut untuk menjalankan suatu "tugas". Subrutin sering juga disebut dengan kotak hitam (atau black box) karena kita tidak perlu (atau tidak mau tahu) secara detail apa yang subrutin tersebut lakukan. Kita hanya ingin tahu hubungan kotak hitam tersebut dengan dunia luar. Hubungan ini disebut antar muka (interface). Di kotak itu mungkin ada tombol yang bisa kita tekan, ada keyboard yang bisa kita ketik, atau mungkin ada jendela untuk memberi dan mengambil informasi dari dalamnya. Karena kita bermaksud untuk menyembunyikan kompleksitas (dalam hal ini program yang akan kita buat), ada beberapa prinsip penting dari suatu kotak hitam : Antar muka harus sederhana, jelas, tak berbelit-belit, dan mudah dimengerti.

Apa contoh kotak hitam di sekitar kita? Sebetulnya banyak, misalnya TV, handphone, DVD player, MP3 player, kulkas, AC, dan sebagainya. Kita bisa menyalakan TV, mengganti channel, menaikkan dan menurunkan volume dengan mudah tanpa harus mengetahui bagaimana TV bekerja. Sama halnya dengan AC, Anda cukup menekan tombol, menaikkan dan menurunkan temperatur tanpa harus mengerti bagaimana AC bekerja. Sekarang mari kita lihat bagian dalam dari kotak hitam. Bagaimana AC atau TV bekerja disebut dengan implementasi. Aturan kedua dari suatu kotak hitam adalah : Untuk menggunakan kotak hitam, kita tidak perlu mengetahui tentang implementasi. Yang kita butuh adalah antar muka. Sebetulnya kita bisa mengganti implementasi selama apa yang dihasilkan dan apa yang diminta tetap sama. Atau dengan kata lain, perilakunya tidak berubah. Misalnya dulu TV menggunakan tabung hampa, tetapi sekarang menggunakan transistor. Tetapi perubahan implementasi (dari tabung hampa ke transistor) tidak mengubah bagaimana TV dioperasikan dan apa yang kita lihat di TV. Seperti halnya dengan program, kita bisa mengubah implementasi suatu subrutin, misalnya mengoptimasi subrutin tersebut agar lebih cepat, tanpa mengubah perilaku program secara keseluruhan, dan tanpa mengubah perilaku fungsi lain yang memanggil subrutin tersebut. Tentunya untuk membuat kotak hitam, kita perlu mengetahui detail tentang implementasinya. Kotak hitam digunakan untuk membantu baik si pembuat kotak hitam maupun penggunanya. Pada akhirnya, kotak hitam tersebut akan digunakan dalam bermacam-macam situasi. Orang yang membuat kotak hitam ini tidak perlu mengerti bagaimana kotaknya akan digunakan. Pembuatnya hanya menjamin bahwa kotak yang dibuat harus bekerja sesuai dengan yang diharapkan. Aturan ketiga dari kotak hitam : Pembuat (implementor) kotak hitam tidak perlu tahu bagaimana kotak hitam itu akan digunakan. Dengan kata lain, kotak hitam membagi dunia menjadi 2 bagian, yaitu bagian luar, untuk apa ia digunakan, dan bagian dalam, yaitu detail bagaimana ia bekerja. Antar muka kotak hitam tidak melulu harus berupa koneksi fisik antara kotak hitam dengan dunia luar. Antar muka bisa juga berupa spesifikasi yang menjelaskan apa yang dilakukan kotak hitam tersebut, dan perilakunya terhadap input yang diterimanya. Tidak cukup untuk menyebutkan bahwa TV membutuhkan colokan kabel, tetapi harus disebutkan bahwa colokan kabel digunakan untuk menyambung aliran listrik ke TV supaya TV bisa dinyalakan. Dalam bahasa pemrograman, antar muka dari suatu subrutin harus terdiri dari komponen sintaks dan semantik. Bagian sintaks dari subrutin mengandung penjelasan tentang apa yang harus diketik untuk memanggil subrutin tersebut. Dan bagian semantik menjelaskan bagaimana secara khusus apa yang akan dikerjakan oleh subrutin tersebut. Untuk menulis program yang benar, kita harus mengetahui spesifikasi sintaks dari subrutin tersebut. Untuk mengerti dan bisa menggunakan subrutin tersebut seefektif mungkin, kita harus mengetahui spesifikasi semantiknya. Kedua bagian dari subrutin tersebut bisa disebut sebagai kontrak subrutin.

Kontrak subrutin bisa dijelaskan seperti "Ini yang harus Anda lakukan untuk menggunakan saya, dan ini yang akan saya lakukan untuk Anda". Ketika kita menulis subrutin, komentar yang kita tulis untuk menjelaskan subrutin itu harus memuat kontrak subrutin tersebut. Kadang kala kontrak ini seringkali tidak dituliskan dengan benar, sehingga programmer yang menggunakannya harus menerka apa yang akan dilakukan. Tentu saja ini tidak efisien dan menghabiskan banyak waktu apabila kita harus menerka semua subrutin yang terdapat dalam bahasa pemrograman.

Subrutin Statik dan Variabel Statik


Setiap subrutin yang dideklarasikan dalam Java harus dideklarasikan di dalam suatu Kelas (Class). Hal ini mungkin membuat Java sedikit tidak normal, karena dalam bahasa pemrograman lain, subrutin bisa diletakkan di mana saja termasuk di luar kelas. Salah satu dari fungsi kelas adalah menggabungkan subrutin dan variabel bersama. Dan ini tidak mudah apabila subrutin dan variabel berada di luar kelas, terutama apabila beberapa paket harus digabungkan menjadi satu seperti dalam program kompleks. Akan terdapat banyak kebingungan yang mungkin diakibatkan dari nama subrutin atau nama variabel yang sama. Subrutin yang dideklarasikan di dalam kelas disebut dengan metode (method). Di bab kemudian kita akan menggunakan istilah metode, tetapi bab ini kita akan menggunakan subrutin dalam artiannya sebagai subrutin statik. Metode akan digunakan untuk subrutin nonstatik yang lebih merupakan sifat dari objek, dan bukan bagian dari kelas itu sendiri. Definisi subrutin dalam bahasa pemrograman Java dapat dituliskan dalam bentuk
sifat tipe_keluaran nama_subrutin ( daftar parameter ) { perintah }

Kita sudah pernah mendefinisikan suatu subrutin, yaitu subrutin main(). Paling tidak kita sudah kenal bagaimana subrutin didefinisikan.
perintah

yang terdapat di antara { dan } disebut juga badan subrutin. Perintah ini merupakan badan atau implementasi suatu subrutin, seperti yang dibahas sebelum pada penjelasan tentang kotak hitam. Perintah ini merupakan instruksi yang akan dieksekusi oleh komputer pada saat subrutin ini dipanggil.
sifat adalah sifat dari subrutin itu sendiri. Beberapa sifat yang pernah kita lihat adalah static dan public. Ada lebih dari selusin sifat yang bisa diberikan kepada subrutin.

Jika kita akan membuat fungsi, yaitu subrutin yang menghitung suatu nilai kemudian mengembalikan hasilnya, maka tipe_keluaran adalah tipe data dari keluaran yang dihasilkan oleh fungsi tersebut. Kita akan membahas lebih lanjut tentang keluaran pada bagian berikutnya. Jika subrutin kita bukan fungsi dan tidak menghasilkan nilai apa-apa, kita gunakan tipe data spesial yang dinamakan void untuk menunjukkan bahwa tidak ada nilai keluaran yang akan dikembalikan oleh subrutin tersebut.

Akhirnya kita sampai pada daftar parameter. Parameter adalah bagian dari antar muka suatu subrutin. Parameter adalah informasi yang diberikan kepada suatu subrutin dari dunia luar, untuk digunakan dalam eksekusi subrutin tersebut. Kasus sederhana misalnya televisi memiliki subrutin gantiChannel(). Pertanyaan yang akan muncul adalah ganti channel ke mana? Dalam hal ini parameter dapat digunakan, misalnya channel berbentuk bilangan bulat (int) dan deklarasi subrutin gantiChannel dapat berbentuk seperti
public void gantiChannel(int channel) { ... }

Pernyataan tersebut berarti subrutin gantiChannel() memiliki parameter channel yang bertipe int. Akan tetapi channel belum memiliki nilai. Nilainya akan diberikan pada saat subrutin ini dipanggil, misalnya dengan
gantiChannel(17);

Daftar parameter dari suatu subrutin bisa juga kosong, atau bisa berisi lebih dari satu parameter dalam bentuk
tipe_data nama_parameter

Jika ada lebih dari satu parameter, maka parameter-perameter tersebut dihubungkan dengan koma. Catatan bahwa masing-masing parameter harus terdiri dari satu tipe data dan satu nama, misalnya double x, double y dan bukan double x, y. Parameter akan dijelaskan lebih lanjut pada bagian berikutnya. Berikut ini adalah beberapa contoh deklarasi subrutin yang umum dilakukan :
public static void mainGame() { // "public" dan "static" ada sifat; "void" adalah tipe_keluaran // "mainGame" adalah nama subrutin // daftar parameternya kosong ... // perintah untuk memainkan game ditulis di bagian ini } int ambilNdata(int N) { // tidak ada sifat, "int" adalah tipe_keluaran // "ambilNdata" adalah nama subrutin // dan parameternya adalah N yang memiliki tipe data int ... // perintah untuk mengambil N data ditulis di bagian ini } static boolean kurangDari(double x, double y) { // "static" adalah sifat, "boolean" adalah tipe_keluaran // "kurangDari" adalah nama subrutin // parameternya ada 2, yaitu x yang bertipe data double // dan y yang juga bertipe data double .... // perintah untuk menguji apakah x lebih kecil dari y ditulis di sini }

Dalam contoh kedua perhatikan bahwa sifatnya tidak "static", dan subrutin ini tidak dibahas dalam bagian ini. Subrutin pertama memiliki sifat "public" yang artinya subrutin ini dapat dipanggil dari bagian manapun, termasuk dari luar kelas yang dimaksud. Ada lagi sifat subrutin yaitu "private" yang berarti hanya bisa dipanggil dari dalam kelas di mana subrutin tersebut didefinisikan. Sifat "public" dan "private" dinamakan penentu akses (access specifier). Jika tidak disebutkan jenis aksesnya dalam suatu definisi subrutin, maka otomatis subrutin itu memiliki sifat "package" yang artinya hanya bisa dipanggil dari paket yang sama dari kelas di mana ia didefinisikan. Sifat lain yang berkaitan dengan penentu akses adalah "protected" dan ini akan dibahas lebih lanjut pada bagian tentang pemrograman berorientasi objek. Ingatkah bahwa subrutin main() yang biasa kita gunakan dalam contoh-contoh program memiliki bentuk seperti berikut ?
public static main(String[] args) { ... }

Sifatnya adalah "public" dan "static", namanya adalah "main" dan parameternya adalah args yang bertipe data array dari String. Kita akan bahas tentang array pada bagian struktur data di bab berikutnya. Menjalankan subrutin Ketika kita mendefinisikan subrutin, pada dasarnya kita memberitahu Java bahwa suatu subrutin tersedia dalam suatu kelas. Subrutin tersebut tidak dijalankan sampai ia dipanggil. (Hal ini juga berlaku untuk kelas main(), meskipun kita tinggal memanggilnya secara spesifik, tetapi sistem operasi kita akan memanggil subrutin main() pada saat program tersebut dijalankan.) Misalnya subrutin mainGame() di atas dapat dipanggil seperti
mainGame();

Pernyataan ini dapat dipanggil di mana pun dalam kelas yang sama, meskipun dari dalam subrutin yang berbeda, misalnya dari dalam subrutin main(). Karena mainGame() bersifat "public", maka subrutin ini dapat juga dipanggil dari luar kelas di mana ia dideklarasikan. Misalnya, mainGame() dideklarasikan dalam kelas Gundu, maka mainGame dapat dipanggil dari kelas lain seperti
Gundu.mainGame();

Penggunaan nama kelas di sini berarti memberitahu Java di mana subrutin mainGame() harus dicari (dalam hal ini di dalam kelas Gundu). Dan ini juga membedakan bahwa yang dimainkan adalah Gundu, bukan Catur.mainGame() atau UlarTangga.mainGame(). Lebih umum, untuk memanggil suatu subrutin dapat dilakukan dengan bentuk
nama_subrutin(parameter);

Dan untuk memanggil subrutin dari luar kelas, bisa dilakukan dalam bentuk
nama_kelas.nama_subrutin(parameter);

apabila subrutin tersebut memiliki sifat "static". Apabila subrutin tersebut tidak bersifat "statik" maka nama_kelas harus diganti dengan nama objek jelmaan kelas tersebut. (Akan dijelaskan lebih jauh nanti pada bab tentang pemrograman berorientasi objek). Juga, apabila tidak ada parameter yang didefinisikan, maka parameter bisa dihilangkan, tetapi tanda kurungnya () harus tetap ada meskipun kosong. Variabel Statik Suatu kelas juga bisa berisi lain hal selain subrutin, misalnya variabel. Variabel juga bisa didefinisikan di dalam subrutin, yang disebut variabel lokal. Untuk membedakannya variabel yang didefinisikan di dalam kelas disebut variabel anggota, karena variabel tersebut adalah anggota kelas. Seperti subrutin, variabel juga bisa bersifat statik atau non-statik. Di bagian ini kita hanya akan membahas variabel statik. Variabel anggota statik dimiliki oleh kelas, dan akan selalu ada selama kelas tersebut ada. Komputer akan menyiapkan memori tempat penyimpanan variabel statik pada saat Java interpreter dijalankan. Perubahan variabel statik ini akan mengubah isi memori tersebut, tidak peduli dari bagian program mana perubahan variabel ini dilakukan. Kapanpun variabel ini dipanggil, ia akan mengambil data dari memori di mana dia disimpan, tidak peduli bagian program mana yang memanggilnya. Ini berarti variabel statik bisa diisi dari subrutin satu dan dimodifikasi dari subrutin lainnya. Atau dengan kata lain, variabel statik digunakan bersama oleh seluruh bagian kelas. Variabel lokal hanya bisa dipanggil dari dalam subrutin di mana ia dideklarasikan. Deklarasi variabel anggota dapat dilakukan dengan cara yang sama seperti deklarasi variabel dalam subrutin. Kecuali, mereka juga bisa diberi attribut yang berisi sifatnya, misalnya "static", "public", atau "private". Misalnya,
static int umur; static private double x;

Seperti halnya penentu akses pada subrutin, variabel yang bersifat "private" hanya bisa diakses dari dalam kelas yang bersangkutan, sedangkan variabel "public" dapat diakses dari manapun. Misalnya, kelas System, memiliki variabel out, sehingga bisa kita panggil dari luar dengan System.out. Ketika kita mendeklarasikan suatu variabel di dalam subrutin, kita harus memberi nilai awal untuk variabel tersebut. Akan tetapi untuk variabel anggota, Java otomatis memberi nilai awal, sehingga tidak perlu diinisialisasi terlebih dahulu. Misalnya int akan diberi nilai awal 0, karakter diberi nilai yang berupa karakter dengan nilai Unicode 0, dan String diberi nilai awal null, sementara boolean diberi nilai awal false. Kita tentu saja bisa memberi nilai awal apabila nilai awal yang diberi Java tidak cocok dengan aplikasi kita. Caranya misalnya dengan memberi nilai di awal subrutin main().

Contoh Subrutin - Mengubah Program RataRata Contoh Program Subrutin dan Variabel Statik

Bab VI - Pemrograman Berorientasi Objek


Jika subrutin hanya melambangkan suatu tugas, objek merupakan gabungan data (dalam bentuk variabel instansi - atau "instance variable") dan beberapa tugas atau disebut "perilaku" terhadap kumpulan data tersebut (dalam bentuk metode instansi - atau "instance method"). Oleh karena itu objek merupakan stuktur baru yang dapat menangani semakin rumitnya kompleksitas suatu program Bagian ini meliputi pembuatan dan penggunaan objek dalam bahasa Java. Juga akan dibahas inti tentang pemrograman berorientasi objek, yaitu : pewarisan dan poli morfisme (perubahan wujud).

Objek, Metode Instansi dan Variable Instansi Konstruktor dan Inisialisasi Objek Pemulung Memori (Garbage Collector) Pewarisan, Polimorfisme, dan Kelas Abstrak this dan super Antar Muka (interface), Kelas Bertingkat, dan Detail Lain

Bab VII - Kebenaran dan Ketangguhan Program


Kita sering sekali menemukan program komputer yang gagal. Kesalahan sedikit dapat membuat program berperilaku tidak sesuai dengan yang diharapkan atau bahkan mati total. Kita sendiri sering mengalaminya. Dan kita sering mendengar berita atau cerita tentang kesalahan suatu software yang menyebabkan pesawat jatuh, sambungan telepon putus seketika, atau bahkan (dalam kasus yang langka) menyebabkan kematian orang. Program sebetulnya tidak sejelek yang kita pikir. Mungkin kita tidak bisa membuat program yang sama sekali bebas dari masalah, akan tetapi pemrograman yang baik dan alat pemrograman yang didesain dengan baik akan membantu kita membuat program dengan masalah yang sesedikit mungkin. Bagian ini akan membahas tentang program yang "benar" dan "tangguh". Kita juga akan melihat pengecualian (exceptions), yaitu salah satu alat dalam bahasa Java yang dapat membantu kita membuat program yang "tangguh" tersebut.

Pengenalan tentang Program yang Benar dan Tangguh Membuat Program yang Benar Pengecualian dan Pernyataan "try ... catch" Pemrograman dengan Pengecualian

Bab VIII - Pengenalan Struktur Data dan Algoritma


Komputer bisa menjadi canggih seperti sekarang karena struktur data. Struktur dala adalah koleksi dari suatu data yang saling berhubungan. Suatu objek adalah struktur data, tapi tipe struktur data seperti ini -- yang memiliki sedikit variabel instansi -- hanya awalnya saja. Dalam banyak hal, programmer akan membuat struktur data kompleksnya sendiri, yaitu dengan menghubungkan objek satu sama lain. Bab ini akan membahas tentang array dan beberapa struktur data dalam Java.

Array Pencarian, Pengurutan dan Rekursi Struktur Data Berantai

Bab IX - Pemrograman Generik dan Kelas Koleksi


Bagaimana caranya menghindari "reinventing the wheel", atau membuat kembali sesuatu yang sudah ditemukan? Banyak struktur data dan algoritma, seperti yang sudah dibahas pada bab sebelumnya telah dipelajari, diprogram, dan diprogram ulang oleh mahasiswa ilmu komputer dalam beberapa generasi. Ini adalah kesempatan belajar yang sangat baik. Sayangnya, algoritma dan data stuktur ini juga diprogram dan diprogram ulang oleh profesional komputer. Mereka menghabiskan waktu yang tidak perlu untuk memrogram ulang sesuatu yang sudah ada, bukannya membuat sesuatu yang lebih inovatif dan kreatif. Programmer yang perlu menggunakan list atau pohon biner, seharusnya tidak perlu lagi membuat data struktur ini dari awal. Struktur data ini sudah banyak dimengerti dan diprogram ribuan kali sebelumnya. Masalahnya adalah bagaimana agar struktur data yang tangguh tersedia dan siap digunakan oleh programmer. Di bagian ini kita akan melihat bagaimana Java menyelesaikan masalah ini.

Pemrograman Generik Pemrograman Generik pada Java List Set (Himpunan) Kelas Map Tabel Hash

Bab X - Pengenalan Input/Output (I/O)


Posted Kam, 04/09/2009 - 18:22 by belajarprogram Versi ramah cetak Program komputer bisa berguna jika ia bisa berinteraksi dengan dunia lain. Interaksi di sini maksudnya input/output atau I/O. Pada bab ini, kita akan melihat input output pada file dan koneksi jaringan (network). Pada Java, input/output pada file dan jaringan dilakukan berdasarkan aliran (stream), di mana semua objek dapat melakukan perintah I/O yang sama. Standar output (System.out) dan standar input (System.in) adalah contoh aliran. Untuk bekerja dengan file dan jaringan, kita membutuhkan pengetahuan tentang pengecualian, yang telah dibahas sebelumnya. Banyak subrutin yang digunakan untuk bekerja dengan I/O melemparkan pengecualian yang wajib ditangani. Artinya subrutin tersebut harus dipanggil di dalam pernyataan try ... catch sehingga pengecualian yang terjadi bisa ditangani dengan baik.

Stream, Reader, dan Writer File Jaringan (network) Pemrograman Serentak (Concurrency)

Pengenalan GUI dengan Eclipse SWT


SWT adalah GUI berbagai platform yang dikembangkan oleh IBM. Kenapa IBM membuat sistem GUI lain dan tidak menggunakan rangka kerja GUI yang sudah ada pada Java? Untuk menjawab pertanyaan ini, kita perlu melihat kilas balik tentang Java di awal perkembangannya. Sun telah membuat rangka kerja GUI yang dinamakan AWT (Abstract Windowing Toolkit). Rangka kerja AWT menggunakan widget (komponen pada GUI, seperti tombol, menu, teks, dll) alami yang merupakan bawaan dari setiap sistem operasi. Akan tetapi widget tersebut memiliki masalah pada LCD. Masalah LCD ini mengakibatkan hilangnya beberapa fitur pada sistem operasi lain. Atau dengan kata lain, jika platform A memiliki widget 1 - 40 dan platform B memiliki widget 20 - 25, maka rangka kerja AWT hanya bisa digunakan untuk sebagian widget yang beririsan saja. Untuk memecahkan masalah ini, Sun membuat rangka kerja baru yang merupakan emulasi widget, bukan menggunakan widget bawaan platform. Hal ini memecahkan masalah LCD dan memberikan rangka kerja yang kaya widget, akan tetapi masalah lain muncul. Misalnya, aplikasi Swing tidak lagi mirip seperti aplikasi lain pada platform di mana ia dijalankan. Dengan adanya perbaikan pada JVM, aplikasi Swing tetap saja mengalami masalah kinerja karena sifatnya yang berupa emulasi. Hal ini tidak ditemukan pada widget bawaan platform

karena widget ini lebih dekat dengan sistem operasi. Lebih jauh, aplikasi Swing menghabiskan lebih banyak memori yang tidak bisa digunakan untuk piranti kecil seperti PDA dan telepon genggam. IBM memutuskan bahwa pendekatan tersebut tidak memenuhi kebutuhannya. Akhirnya, IBM membuat pustaka GUI baru yang disebut SWT, yang memecahkan masalah yang terdapat pada rangka kerja AWT dan Swing. Rangka kerja SWT langsung mengakses widget bawaan sistem operasi melalui JNI. Jika widget tersebut tidak tersedia, maka SWT akan mengemulasi widget yang hilang itu. Blok Penyusun Suatu Aplikasi SWT Display, Shell dan kumpulan Widget adalah blok penyusun aplikasi SWT. Display bertugas untuk mengatur perulangan event (dari keyboard atau mouse) dan mengatur komunikasi antara thread UI dan thread lainnya. Shell adalah jendela di mana aplikasi berjalan. Setiap aplikasi SWT memiliki paling tidak satu Display dan satu atau lebih instansi Shell.

Gambar di atas mengilustrasikan aplikasi SWT dari sudut pandang yang berbeda. Diagram pertama di sebelah kiri adalah diagram kelas-kelas turunan dari objek-objek UI. Diagram tengah adalah bagaimana objek UI diletakkan, dan gambar kanan adalah UI yang dihasilkan. Jika suatu aplikasi menggunakan beberapa thread, setiap thread akan memiliki instansi objek Display masing-masing. Kita bisa mengambil instansi suatu objek Display dengan menggunakan metode statik Display.getCurrent(). Suatu Shell melambangkan jendela suatu aplikasi. Shell bisa ditampilkan dalam ukuran seluruh layar, ukuran biasa, atau dikecilkan hingga tak terlihat. Ada dua jenis shell yang tersedia. Yang pertama adalah shell dengan tingkat paling tinggi, yaitu yang dibuat langsung sebagai anak dari jendela utama Display. Jenis kedua adalah shell dialog yang bergantung pada shell-shell lainnya. Jenis suatu Shell bergantung pada bit gaya (style bit) yang diberikan pada konstruktornya. Nilai awalnya adalah DialogShell. Artinya, jika tidak ada parameter yang diberikan pada konstruktornya, maka shell yang dibuat akan bertipe DialogShell. Jika parameter konstruktornya berupa objek bertipe Display, maka ia akan menjadi shell tingkat atas.

Beberapa sifat widget harus ditentukan pada saat widget tersebut dibuat. Sifat widget tersebut disebut bit gaya (style bit). Bit gaya ini adalah konstanta yang didefinisikan dalam kelas SWT. Misalnya,
Button tombol = new Button(shell, bitGaya)

Kita bisa menggunakan lebih dari satu gaya dengan menggunakan operator OR atau |. Misalnya, kita ingin membuat tombol yang bisa ditekan dan memiliki garis tepi, kita bisa menggunakan SWT.PUSH | SWT.BORDER sebagai parameter bit gayanya.

Memulai SWT Widget-widget SWT

Anda mungkin juga menyukai