SELAMAT DATANG

VEKOM

ELERNING

PROFIL

PHOTO

Sabtu, 09 Oktober 2010

while dan do ... while JAVA


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; // sama dengan : jumlah = jumlah + bilangan
n++; // sama dengan : n = n+1

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

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

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

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

Berikut hasil keluarannya :

Pernyataan do ... while

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

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

do
perintah
while (suatu_kondisi);

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

do {
perintah-perintah
} while (suatu_kondisi);

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

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

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

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

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

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

do
perintah
while (suatu_kondisi);

bisa dituliskan dalam bentuk

perintah
while (suatu_kondisi)
perintah

Demikian juga dengan

while (suatu_kondisi)
perintah

bisa juga dituliskan dalam bentuk

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

tanpa merubah aliran program sama sekali.

Pernyataan break dan continue

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

break, sehingga program seperti

while (suatu_kondisi)
perintah

bisa ditulis dalam bentuk

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


Apa makna dari program di atas? while (true)

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

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

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

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

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

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

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

while (suatu_kondisi) {
perintah
continue;
perintah_lagi
perintah_lain_lagi
}

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

Tidak ada komentar:

Posting Komentar