Cari artikel di situs ini

while dan do ... while

Versi ramah cetakVersi ramah cetak

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<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.

SisipanUkuran
RataRata-src.zip1.39 KB

Komentar

mohoon bantuannya,.

mas sy punya program sederhana, switch case : /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package program12; import java.util.Scanner; /** * * @author achmad fc */ public class Program12 { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here // digunakan untuk menampilkan Scanner x = new Scanner(System.in); System.out.println("||======================||"); System.out.println("||Program Paket Internet||"); System.out.println("||======================||"); System.out.println(" "); System.out.println("||======================||"); System.out.println("|| Pilih Paket ||"); System.out.println("||----------------------||"); System.out.println("||1. Paket Limited/kuota||"); System.out.println("||2. Paket Unlimited ||"); System.out.println("||======================||"); System.out.print(" Pilih Paket Data = "); int a = x.nextInt(); switch(a) { case 1 : System.out.println(" "); System.out.println("||======================||"); System.out.println("|| Paket Data ||"); System.out.println("||----------------------||"); System.out.println("||1. Harian ||"); System.out.println("||2. Mingguan ||"); System.out.println("||3. Bulanan ||"); System.out.println("||======================||"); System.out.print(" Pilih Paket Data = "); //System.out.println("jika ingin mimilih pake lain pilihannya"); int b = x.nextInt(); switch(b) { case 1 :System.out.println(" "); System.out.println("||======================||"); System.out.println("|| Membeli paket harian?||"); System.out.println("|| Rp.2000, kuota 100MB ||"); System.out.println("||----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||======================||"); System.out.print(" Pilih Opsi = "); int c = x.nextInt(); switch(c) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; case 2 : System.out.println(" "); System.out.println("||=======================||"); System.out.println("||Membeli paket Mingguan?||"); System.out.println("|| Rp.10.000, kuota 600MB||"); System.out.println("||-----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||=======================||"); System.out.print(" Pilih Opsi = "); int d = x.nextInt(); switch(d) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; case 3 : System.out.println(" "); System.out.println("||=======================||"); System.out.println("||Membeli paket Bulanan? ||"); System.out.println("|| Rp.40.000, kuota 3.5GB||"); System.out.println("||-----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||=======================||"); System.out.print(" Pilih Opsi = "); int e = x.nextInt(); switch(e) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; default : System.out.println("Ma'af, Data yang anda masukan tidak tersedia"); } break; case 2 : System.out.println(" "); System.out.println("||======================||"); System.out.println("|| Paket Data ||"); System.out.println("||----------------------||"); System.out.println("||1. Harian ||"); System.out.println("||2. Mingguan ||"); System.out.println("||3. Bulanan ||"); System.out.println("||======================||"); System.out.print(" Pilih Paket Data = "); //System.out.println("jika ingin mimilih pake lain pilihannya"); int f = x.nextInt(); switch(f) { case 1 :System.out.println(" "); System.out.println("||======================||"); System.out.println("|| Membeli paket harian?||"); System.out.println("|| Rp. 5000 ,Unlimited ||"); System.out.println("||----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||======================||"); System.out.print(" Pilih Opsi = "); int g = x.nextInt(); switch(g) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; case 2 : System.out.println(" "); System.out.println("||=======================||"); System.out.println("||Membeli paket Mingguan?||"); System.out.println("|| Rp.20.000, Unlimited ||"); System.out.println("||-----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||=======================||"); System.out.print(" Pilih Opsi = "); int h = x.nextInt(); switch(h) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; case 3 : System.out.println(" "); System.out.println("||=======================||"); System.out.println("||Membeli paket Bulanan? ||"); System.out.println("|| Rp.55.000, Unlimited ||"); System.out.println("||-----------------------||"); System.out.println("||1. Ya ||"); System.out.println("||2. Tidak ||"); System.out.println("||=======================||"); System.out.print(" Pilih Opsi = "); int i = x.nextInt(); switch(i) { case 1 ://System.out.println("||======================||"); System.out.println("Terimakasih, Permintaan anda"); System.out.println(" akan segera kami proses "); break; case 2 :System.out.println("Permintaan anda dibatalkan"); break; default:System.out.println("Ma'af, opsi tidak tersedia"); } break; default : System.out.println("Ma'af, Data yang anda masukan tidak tersedia"); } break; default : System.out.println("Ma'af, Data yang anda masukan tidak tersedia"); } } } NB : yang sya inginkan mau menambahkan do while, tp saya coba masih belum berhasil ketemu,. mohon baantuannya mas,.

penggunaan do while

bagaimana menggunakan pernyataan misalnya
do{
bufferedreader data = new bufferedreader(new inputstreamreader(System.in));
Print ("Anda ingin mengulang ? ya/tidak");
String jawaban = data.readLine();
} while (jawaban=="ya");

 mohon dikoreksi . Maturnuwun

@Muhammad Rinaldi Hutabarat @Email > rinaldihtb@yahoo.com

jawaban

akan saya coba jawab untuk pertanyaan yang ini <br><br>

untuk pengkoreksian String di java itu tidak menggunakan format "==", tapi harus menggunakan equals / equalsIgnoreCase deklarasi nya seperti ini "variable.equals("ya")"

<br><br>dan untuk String jawaban tidak bisa langsung digunakan "String jawaban = data.readline();" tapi harus menggunakan try{ deklarasi }catch(IOException e){ deklarasi }..

 

Perulangan while

gan, gmn ya buat program perulangan dengan while kaya gini 1 4 9 16 25 36 49 64 81 100

Thank'z to (http://java.lyracc.com)

Thank'z atas sharex... harapan saya website ini terus berkembang. . Amien.. ^_^