Pernyataan while
Pernyataan
while
telah diperkenalkan pada bagian sebelumnya. Perulangan while
memiliki bentukwhile (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 apakahjawaban
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 perintahbreak<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)
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