Friday, March 16, 2018

4. Statemen Kendali Bagian 2



Statemen Iterasi
Statemen iterasi pada Java adalah tiga: for, while, dan do-while. Statemen-statemen ini menciptakan apa yang dinamakan dengan loop. Seperti yang Anda ketahui, loop mengeksekusi secara berulang sejumlah instruksi atau statemen sampai dipenuhinya kondisi penghentian. 


Loop while
Loop while adalah statemen loop yang paling fundamental dalam Java. Loop ini mengeksekusi secara berulang sebuah statemen atau blok kode ketika ekspresi pengendali bernilai true. Berikut adalah bentuk umum dari loop while:

while(kondisi) {
   //tubuh loop
}

Ekspresi kondisi dapat berupa sembarang ekspresi Boolean. Tubuh loop akan dieksekusi sepanjang ekspresi kondisi bernilai true. Ketika kondisi menjadi false, maka kendali eksekusi akan beralih ke baris kode pertama yang ada di luar loop. Kurung kurawal tidak diperlukan jika hanya ada satu statemen pada tubuh loop.

Berikut adalah sebuah loop while yang mencacah mundur dari 10:

//Mendemonstrasikan loop while
public class LoopWhile {
   public static void main(String args[]) {
      int n = 10;
  
      while(n > 0) {
         System.out.println("Nilai n sekarang = " + n);
         n--;
      }
   }
}

Ketika Anda menjalankan program ini, keluarannya adalah:

Nilai n sekarang = 10
Nilai n sekarang = 9
Nilai n sekarang = 8
Nilai n sekarang = 7
Nilai n sekarang = 6
Nilai n sekarang = 5
Nilai n sekarang = 4
Nilai n sekarang = 3
Nilai n sekarang = 2
Nilai n sekarang = 1

Karena loop while mengevaluasi ekspresi kondisionalnya di atas loop (sebelum memasuki tubuh loop), maka tubuh loop tidak akan pernah dieksekusi jika kondisi bernilai false pada saat awal. Sebagai contoh, pada fragmen kode berikut, pemanggilan terhadap println() tidak akan pernah dieksekusi:

int a = 10, b = 20;

while(a > b)
   System.out.println("Ini tidak akan pernah ditampilkan.");

Tubuh loop while (atau semua loop Java) bisa saja kosong. Ini karena statemen null (yang hanya terdiri-dari titik-koma) secara sintaksis adalah hal valid dalam Java. Sebagai contoh, perhatikan program berikut:

//Tubuh loop kosong
public class TubuhKosong {
   public static void main(String args[]) {
      int i, j;
      i = 100;
      j = 200;
  
      // mencari titik-tengah antara i dan j
      while(++i < --j); // tubuh loop ini kosong
      
      System.out.println("Titik tengahnya adalah " + i);
   }
}

Program ini mencari titik-tengah antara i dan j. Keluaran yang dihasilkan adalah:

Titik tengahnya adalah 150

Berikut adalah bagaimana loop while ini bekerja. Nilai dari i diinkremen, dan nilai dari j didekremen. Nilai-nilai ini kemudian dibandingkan satu sama lain. Jika nilai bari dari i masih bernilai kurang dari nilai dari j, maka loop akan terus berulang. Jika i bernilai sama atau lebih besar dari j, maka loop akan berhenti. Setelah keluar dari loop, variabel  i akan memuat sebuah nilai yang merupakan titik-tengah antara nilai awal i dan j.


Loop do-while
Seperti yang telah Anda lihat, jika ekspresi kondisional yang mengendalikan loop while awalnya bernilai false, maka tubuh loop while tidak akan pernah dieksekusi sama sekali. Namun, kadangkala diinginkan agar tubuh loop dieksekusi sedikitnya sekali, bahkan jika ekspresi kondisional bernilai false pada awalnya. Dengan kata lain, ada saatnya ketika Anda perlu menguji ekspresi penghentian di akhir loop, bukan di awal loop. Untunglah, Java menyediakan loop semacam itu: do-while. Loop do-while selalu mengeksekusi tubuhnya sedikitnya sekali, karena ekspresi kondisional berada di bawah loop. Bentuk umum dari loop do-while adalah:

do {
   // tubuh loop
} while (kondisi);

Setiap iterasi dari loop do-while lebih dahulu mengeksekusi tubuh loop dan kemudian mengevaluasi ekspresi kondisional. Jika ekspresi ini bernilai true, maka loop akan berulang. Sebaliknya, loop akan berhenti. Sama seperti semua loop pada Java, kondisi harus berupa sebuah ekspresi Boolean.

Berikut adalah versi lain dari program hitung mundur loop while. Versi program ini menggunakan loop do-while, dengan menghasilkan keluaran yang sama seperti sebelumnya.

//Mendemonstrasikan loop do-while
public class DoWhile {
   public static void main(String args[]) {
      int n = 10;
    
      do {
         System.out.println("Nilai n sekarang = " + n);
         n--;
      } while(n > 0);
   }
}

Loop pada program di atas dapat dituliskan dengan lebih efisien sebagai berikut:

do {
   System.out.println("Nilai n sekarang = " + n);
} while(--n > 0);

Pada contoh ini, ekspresi (--n>0) menggabungkan pendekremenan n dan pengujian ke dalam satu ekspresi. Berikut cara bekerjanya. Pertama, statemen --n dieksekusi, n didekremen dan nilai barunya diberikan kembali kepada n. Nilai ini kemudian dibandingkan dengan nol. Jika nilainya lebih besar dari nol, maka loop berlanjut; sebaliknya, loop berhenti.

Loop do-while khususnya berguna ketika Anda memproses pemilihan menu, karena Anda umumnya menginginkan tubuh dari sebuah loop menu dieksekusi sedikitnya sekali. Perhatikan program berikut, yang mengimplementasikan sistem sederhana:


//Menggunakan loop do-while untuk memproses pilihan menu
public class Menu {
   public static void main(String args[])
      throws java.io.IOException {
      char pilihan;
  
      do {
         System.out.println("Menu: ");
         System.out.println(" 1. if");
         System.out.println(" 2. switch");
         System.out.println(" 3. while");
         System.out.println(" 4. do-while");
         System.out.println(" 5. for\n");
         System.out.println("Pilih satu:");
         
         pilihan = (char) System.in.read();
      } while( pilihan < '1' || pilihan > '5');
      System.out.println("\n");
  
      switch(pilihan) {
         case '1':
            System.out.println("Statemen if:\n");
            System.out.println("if(kondisi) statemen;");
            System.out.println("else statemen;");
   break;
         case '2':
            System.out.println("Statemen switch:\n");
            System.out.println("switch(ekspresi) {");
            System.out.println("  case konstanta:");
            System.out.println("     runtun statemen");
            System.out.println("     break;");
            System.out.println(" //...");
            System.out.println("}");
            break;
         case '3':
            System.out.println("Loop while:\n");
            System.out.println("while(kondisi) statemen;");
            break;
         case '4':
            System.out.println("Loop do-while:\n");
            System.out.println("do {");
            System.out.println("   statemen;");
            System.out.println("} while (kondisi);");
            break;
         case '5':
            System.out.println("Loop for:\n");
            System.out.print("for(init; kondisi; iterasi)");
            System.out.println(" statemen;");
            break;
      }
   }
}

Berikut adalah salah satu contoh keluaran program:

Menu: 
 1. if
 2. switch
 3. while
 4. do-while
 5. for

Pilih satu:
4


Loop do-while:

do {
   statemen;
} while (kondisi);

Pada program, loop do-while dipakai untuk memverifikasi apakah user telah memasukkan pilihan yang valid. Jika tidak, maka user diminta memberikan pilihan kembali. Karena menu harus ditampilkan sedikitnya sekali, loop do-while merupakan pilihan loop terbaik untuk melakukannya.

Beberapa hal penting lain untuk contoh program ini: Perhatikan bahwa karakter dibaca dari keyboard dengan memanggil System.in.read(). Ini merupakan salah satu fungsi masukan konsol pada Java. Meskipun metode-metode konsol tidak didiskusikan detil sekarang, metode System.in.read() dipakai di sini untuk membaca pilihan user. Fungsi ini membaca karakter dari masukan standar (sebagai integer, karena itulah nilai baliknya perlu dikonversi menjadi char). Secara default, masukan standar akan disimpan ke memori, jadi Anda perlu menekan kunci ENTER sebelum karakter yang Anda ketikkan dikirim ke program Anda.


Loop for
Anda telah dikenalkan pada bentuk sederhana dari loop for pada Bab 1. Loop ini merupakan konstruksi yang sangat tangguh.

Dimulai dari JDK 5, ada dua jenis loop for. Yang pertama adalah bentuk tradisional yang telah ada sejak awal Java. Jenis kedua adalah bentuk “for-each” yang lebih baru. Kedua jenis loop for ini akan didiskusikan di sini, diawali dengan bentuk tradisional.

Berikut adalah bentuk umum dari statemen for tradisional:

for(inisialisasi; kondisi; iterasi) {
   // tubuh loop
}

Loop for bekerja seperti ini: Ketika loop pertama kali dieksekusi, bagian inisialisasi dari loop akan dieksekusi. Umumnya, bagian ini adalah sebuah ekspresi yang menetapkan nilai dari variabel kendali loop, yang berperan sebagai pencacah yang mengendalikan loop. Adalah penting untuk memahami bahwa ekspresi inisialisasi ini hanya dieksekusi sekali saja. Selanjutnya, bagian kondisi dieksekusi. Bagian ini harus berupa sebuah ekspresi Boolean, yang umumnya menguji variabel kendali loop terhadap nilai target tertentu. Jika ekspresi ini bernilai true, maka tubuh loop akan dieksekusi. Selanjutnya, bagian iterasi dari loop dieksekusi. Ini umumnya adalah sebuah ekspresi yang menginkremen atau mendekremen variabel kendali loop.

Loop kemudian beriterasi, pertama mengevaluasi ekspresi kondisional, dan kemudian mengeksekusi tubuh loop, dan kemudian mengeksekusi ekspresi iterasi. Proses ini berulang sampai ekspresi pengendalian bernilai false.

Berikut adalah salah satu contoh penggunaan loop for:

//Mendemonstrasikan loop for
public class LoopFor {
   public static void main(String args[]) {
      int n;
 
      for(n=10; n>0; n--)
         System.out.println("Nilai n = " + n);
   }
}


Mendeklarasikan Variabel Kendali Loop Di Dalam Loop
Seringkali variabel yang mengendalikan sebuah loop for hanya diperlukan untuk tujuan loop saja dan tidak dipakai di luar loop. Ketika ini diperlukan, Anda dimungkinkan untuk mendeklarasikan variabel tersebut di dalam bagian inisialisasi dari loop for. Sebagai contoh, berikut adalah versi lain dari program sebelumnya yang ditulis ulang sehingga variabel kendali loop n dideklarasikan sebagai sebuah int di dalam for:

// Mendeklarasikan variabel kendali loop di dalam for.
public class LoopForDalam {
   public static void main(String args[]) {
      
   // di sini, n dideklarasikan di dalam loop for
      for(int n=10; n>0; n--)
         System.out.println("Nilai n = " + n);
   }
}

Ketika Anda mendeklarasikan sebuah variabel di dalam loop for, ada satu hal penting yang harus diingat: skop dari variabel itu berakhir ketika statemen for selesai dieksekusi. Jadi, skop dari variabel dibatasi hanya di dalam loop for. Di luar loop for, variabel itu tidak dikenali. Jika Anda perlu menggunakan variabel kendali loop di tempat lain pada program Anda, maka Anda tidak boleh mendeklarasikannya di dalam loop for.

Ketika variabel kendali loop tidak dibutuhkan di luar loop, kebanyakan programer Java mendeklarasikannya di dalam loop for. Sebagai contoh, berikut adalah sebuah program sederhana yang menguji nilai-nilai prima. Perhatikan bahwa variabel kendali loop, i, dideklarasikan di dalam for karena tidak dibutuhkan di tempat lain pada program.

//Menguji keprimaan 
public class CariPrima {
   public static void main(String args[]) {
      int nil;
      boolean apaPrima;
      nil = 14;
  
      if(nil < 2) apaPrima = false;
      else apaPrima = true;
  
      for(int i=2; i <= nil/i; i++) {
         if((nil % i) == 0) {
            apaPrima = false;
            break;
         }
      }
  
      if(apaPrima) System.out.println("Prima");
      else System.out.println("Tidak Prima");
   }
}


Menggunakan Koma
Ada saatnya ketika Anda ingin mencantumkan lebih dari satu statemen pada bagian inisialisasi dan bagian iterasi dari loop for. Sebagai contoh, perhatikan loop pada program berikut:

//Menggunakan koma di dalam loop for
public class Contoh {
   public static void main(String args[]) {
      int a, b;
      b = 4;
  
      for(a=1; a<b; a++) {
         System.out.println("a = " + a);
         System.out.println("b = " + b);
  
         b--;
      }
   }
}

Jika dijalankan, program di atas akan menghasilkan keluaran:


a = 1
b = 4
a = 2
b = 3

Seperti yang dapat Anda lihat, loop dikendalikan oleh interaksi dari dua variabel. Karena loop diatur oleh dua variabel, maka akan berguna jika keduanya dicantumkan ke dalam statemen for, daripada harus menangani b secara manual. Untunglah, Java menyediakan suatu cara untuk melakukan ini. Untuk menempatkan dua atau lebih variabel kendali pada loop for, Java mengijinkan Anda untuk mencantumkan beberapa statemen pada porsi inisialisasi dan porsi iterasi dari loop for. Setiap statemen dipisahkan satu sama lain dengan koma.

Dengan menggunakan koma, loop for pada program sebelumnya dapat lebih efisien bila ditulis ulang seperti berikut:

//Menggunakan koma pada loop for
public class Koma {
   public static void main(String args[]) {
      int a, b;
  
      for(a=1, b=4; a<b; a++, b--) {
         System.out.println("a = " + a);
         System.out.println("b = " + b);
      }
   }
}

Pada contoh ini, bagian inisialisasi menetapkan nilai dari a dan b. Dua statemen yang dipisahkan oleh koma pada bagian iterasi dieksekusi setiap kali loop berulang.


Selanjutnya  >>>


No comments: