Senin, 12 Desember 2011

JAVA XIII. Pernyataan switch


Penyataan percabangan kedua yang dimiliki Java adalah switch. Pernyataan switch lebih jarang digunakan, tetapi sering bermanfaat apabila kita ingin menuliskan percabangan multi arah.
Pernyataan switch memiliki bentuk sebagai berikut
switch (ekspresi) {
    case nilai1:
        perintah1
        break;
    case nilai2:
        perintah2
        break;
    case nilai3:
        perintah3
        break;
    default:
        perintah_lain
}
Di sini pernyataan switch akan mencari nilai ekspresi yang sesuai dengan nilai-nilai yang didaftarkan pada pernyataan case. Jika salah satu nilai ditemui, maka program akan melompat ke cabang case tersebut dan melakukan perintah yang terdapat di sana. Jika tidak ditemui, maka program akan melompat ke perintah yang terdapat pada pernyataan default.
Catatan ekspresi hanya bisa berbentuk nilai bilangan bulat (int, short, dan sejenisnya) atau karakter, sehingga kita tidak bisa menggunakan switch untuk mengevaluasi ekspresi yang berbentuk String.
Pernyataan break di atas sebetulnya tidak harus selalu ada. Tetapi, perintah break di sini memerintahkan komputer agar segera keluar dari blok switch apabila perintah tersebut telah selesai dilaksanakan.
Apabila perintah break tidak diberikan, maka program akan terus mengeksekusi perintah lain meskipun sudah berada di luar nilai yang tertera dalam pernyataan casenya.
Misalnya, lihat kode berikut ini :
switch (N)
    case 1:
        System.out.println("Angka tersebut bernilai 1");
        break;
    case 2:
    case 3:
    case 4:
    case 5:
        System.out.println("Angka tersebut bernilai 2, 3, 4, atau 5");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("Angka tersebut bernilai 6, 7, atau 8");
        break;
    default:
        System.out.println("Angka tersebut tidak bernilai 1 - 8");
}
Salah satu aplikasi di mana pernyataan switch berguna adalah untuk memproses menu. Menu memiliki beberapa pilihan dan user akan diminta untuk memilih suatu pilihan. Kita dapat menggunakan switch untuk menginstruksikan komputer untuk melakukan tugas tertentu sesuai dengan menu yang dipilih oleh user.
Jika Anda ingat pernyataan main() pada program Java, pernyataan main memiliki parameter String[] args, di mana args merupakan argumen yang diberikan pada saat program dijalankan melalui konsol. Biasanya argumen yang diberikan berupa opsi bagaimana program harus dilaksanakan. Di sini pernyataan switch juga berguna untuk memilih bagaimana program akan berjalan.
Jika Anda terbiasa atau pernah bergaul dengan Linux, maka tidak asing untuk menemukan perintah pada Linux seperti "ls -l" atau "tar xfz blabla". Di sini ls atau tar adalah nama program dan "-l" atau "xfz blabla" adalah argumen yang diberikan pada saat program dijalankan.
Pernyataan kosong
Pernyataan kosong sebenarnya merupakan blok kosong, atau sama dengan {} tanpa perintah apa-apa di dalamnya. Dalam Java, pernyataan kosong juga berarti tanda ; sehingga apabila Anda menulis kode seperti
if (x > 0);
    perintah1
maka perintah1 akan tetap dilaksanakan walaupun x <= 0.
Perintah kosong sering merupakan sumber kesalahan dan salah satu fitur yang sulit untuk dicari kesalahannya pada saat debugging. Misalnya perintah berikut
for (i = 1; i <= 10; i++);
    System.out.println("hallo");
Anda berharap untuk mencetak kata hallo 10x di layar, pada kenyataannya hanya 1 hallo yang dicetak. Kenapa? Karena tanda ";" setelah for menyatakan bahwa program tidak melakukan apa-apa di dalam perulangan. PerintahSystem.out.println("hallo") tidak berada di dalam perulangan for, sehingga perintah ini hanya dijalankan 1x saja.
Pernyataan-pernyataan lain
Hingga saat ini kita sudah membahas hampir semua pernyataan yang Java sediakan. Ada beberapa yang akan kita bahas kemudian, tetapi pernyataan-pernyataan ini merupakan pernyataan lanjutan Java, seperti return yang digunakan untuk membuat subrutin sendiri, atau try...catch dan throw untuk mengontrol alur kesalahan apabila ditemui di tengah program (atau dengan kata lain eksepsi atau pengecualian), dan synchronized untuk mengatur kontrol untuk multi-threading.
Beberapa kata kunci lain akan juga dibahas pada subjek tentang pemrograman berorientasi objek yang akan kita bahas kemudian.
Contoh Program Switch Case

Kita akan membuat program untuk main suit. Permainan ini terdiri dari dua pemain. Dalam permainan real, biasanya dua pemain mengadu suit dengan saling menunjukkan jari. Hanya 3 jari yang boleh dipakai: jempol, telunjuk, dan kelingking.
Peraturannya : Jempol menang lawan Telunjuk, Telunjuk menang lawan Kelingking, dan Kelingking menang lawan Jempol.
Dalam program ini, komputer adalah pemain pertama, sedangkan user adalah pemain kedua. Komputer akan menggunakan perintah random() untuk menghitung salah satu dari 3 pilihan. 0 berarti Jempol, 1 berarti Telunjuk, dan 2 berarti Kelingking.
User akan diberikan pertanyaan untuk memasukkan J untuk Jempol, T untuk Telunjuk dan K untuk Kelingking. Kemudian dengan pernyataan switch, J, T, dan K akan diubah menjadi angka 0, 1, dan 2 seperti pada komputer.
Hasil perhitungan komputer dan hasil input dari user akan dibandingkan, kemudian hasilnya siapa yang menang akan ditampilkan di layar.
package mainsuit;
 
import java.io.*;
 
public class MainSuit {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        // cetak aturan main dan input dari user
        System.out.println("Permainan suit");
        System.out.println("==============");
        System.out.println("Masukkan salah satu dari 3 kemungkinan :");
        System.out.println("J untuk Jempol");
        System.out.println("T untuk Telunjuk");
        System.out.println("K untuk Kelingking");
        System.out.println(""); // baris kosong
 
        // variabel untuk mengambil input dari user
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = null;
 
        // Kita gunakan pernyataan while hingga user betul
        // memasukkan salah satu dari J, T, atau K
        boolean inputvalid = false;
 
        int suitKomputer = 0;
        int suitUser = 0;
 
        // selama input tidak valid, jalankan perulangan ini
        while (!inputvalid) {
            System.out.print("Masukkan suit Anda ");
            try {
                input = br.readLine();
            } catch (IOException ioe) {
                System.out.println("Kesalahan IO, program berhenti");
                System.exit(1);
            }
 
            // pastikan bahwa user memasukkan sesuatu dengan mengecek
            // apakah panjang input > 0
            // jika tidak, maka perulangan akan dilanjutkan
            if (input.length() > 0) {
                switch (input.charAt(0)) {
                    case 'j' :
                    case 'J' :
                        suitUser = 0;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                    case 't' :
                    case 'T' :
                        suitUser = 1;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                    case 'k' :
                    case 'K' :
                        suitUser = 2;
                        inputvalid = true;  // kita ganti inputvalid agar perulangan selesai
                        break;
                }
            }
        }
 
        // sekarang menghitung suit komputer
        // Math.random() menghasilkan nilai acak antara 0 dan 1
        // jika kita kali 3, berarti menghasilkan nilai acak antara 0 dan 3
        // perintah (int) untuk mengubah bilangan real menjadi bilangan bulat
        // dengan cara menghilangkan semua digit di belakang koma
        // misalnya 1.0232323 menjadi 1
        suitKomputer = (int)(Math.random()*3);
 
        // suatu saat "mungkin" nilai random bernilai 3
        // karena 3 tidak ada dalam suit kita, maka kita harus ubah menjadi
        // salah satu suit yang valid, yaitu 0, 1, atau 2
        // dalam hal ini kita ganti jadi 2
        if (suitKomputer == 3) {
            suitKomputer = 2;
        }
 
        // menghitung siapa yang menang
        switch (suitKomputer) {
            // jika komputer Jempol
            case 0:
                // cetak suit Komputer
                System.out.println("Suit komputer = Jempol");
                switch (suitUser) {
                    // jika user Jempol
                    case 0:
                        System.out.println("Seri");
                        break;
                    // jika user Telunjuk
                    case 1:
                        System.out.println("Anda kalah");
                        break;
                    // jika user Kelingking
                    case 2:
                        System.out.println("Anda menang");
                        break;
                }
                break; // dari switch(suitKomputer)
            // jika komputer Telunjuk
            case 1:
                // cetak suit Komputer
                System.out.println("Suit komputer = Telunjuk");
                switch (suitUser) {
                    // jika user Jempol
                    case 0:
                        System.out.println("Anda menang");
                        break;
                    // jika user Telunjuk
                    case 1:
                        System.out.println("Seri");
                        break;
                    // jika user Kelingking
                    case 2:
                        System.out.println("Anda kalah");
                        break;
                }
                break; // dari switch(suitKomputer)
            // jika komputer Kelingking
            case 2:
                // cetak suit Komputer
                System.out.println("Suit komputer = Kelingking");
                switch (suitUser) {
                    // jika user Jempol
                    case 0:
                        System.out.println("Anda kalah");
                        break;
                    // jika user Telunjuk
                    case 1:
                        System.out.println("Anda menang");
                        break;
                    // jika user Kelingking
                    case 2:
                        System.out.println("Seri");
                        break;
                }
                break; // dari switch(suitKomputer)
        }
    }
}
Berikut ini adalah contoh keluaran program

Tidak ada komentar:

Posting Komentar