While dan do...while
Pernyataan while
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<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.Sumber :http://java.lyracc.com/artikel/java-untuk-pemula/while-dan-do-while
0 komentar:
Posting Komentar