32
TA113 - Bab 7 - pg 1 Pilihan Pengenalan Dalam menulis aturcara, seringkali kita perlu membuat pilihan untuk melaksanakan sekumpulan arahan berbeza mengikut satu-satu syarat yang diberikan. Contohnya, semasa meminta jejari suatu bulatan dalam masalah mengira luas bulatan, jika nilai jejari diberikan kurang dari 0, maka nilai tersebut tidak diterima, jika tidak (nilai jejari besar dari 0), baharulah nilai tersebut diterima. Dalam Java, untuk menangani masalah melibatkan pilihan seperti ini, kita ada 3 cara: 1. Menggunakan pernyataan if 2. Menggunakan pernyataan if…else 3. Menggunakan pernyataan switch Pernyataan if Bentuk umum pernyataan if ialah if (ungkapan) pernyataan1; ungkapan - Sebarang ungkapan yang menghasilkan nilai boolean, true atau false

Struktur pilihan (1)

Embed Size (px)

Citation preview

TA113 - Bab 7 - pg 1

PilihanPengenalan Dalam menulis aturcara, seringkali kita perlu membuat pilihan untuk melaksanakan sekumpulan arahan berbeza mengikut satu-satu syarat yang diberikan. Contohnya, semasa meminta jejari suatu bulatan dalam masalah mengira luas bulatan, jika nilai jejari diberikan kurang dari 0, maka nilai tersebut tidak diterima, jika tidak (nilai jejari besar dari 0), baharulah nilai tersebut diterima. Dalam Java, untuk menangani masalah melibatkan pilihan seperti ini, kita ada 3 cara: 1. Menggunakan pernyataan if 2. Menggunakan pernyataan ifelse 3. Menggunakan pernyataan switch Pernyataan if Bentuk umum pernyataan if ialah if (ungkapan) pernyataan1; ungkapan - Sebarang ungkapan yang menghasilkan nilai boolean, true atau false - Biasanya melibatkan ungkapan dengan operator perbandingan atau operator bersyarat (rujuk nota Bab 5) pernyataan1 - Sebarang pernyataan sah dalam Java

TA113 - Bab 7 - pg 2

Semasa melaksanakan suatu pernyataan if, komputer akan menilai ungkapan dahulu. Jika ungkapan bernilai true, pernyataan1 akan dilaksanakan, jika ungkapan bernilai false, pernyataan1 tidak akan dilaksanakan. Contoh: Dalam masalah mengira luas suatu bulatan, kita ingin minta nilai jejari bulatan dari pengguna. Bagaimanapun, jika nilai jejari yang diberikan itu kurang dari 0, kita akan berikan nilai 0 kepada jejari kerana jejari tidak boleh bernilai kurang dari 0. Dengan carta alir, masalah ini dapat diselesaikan dengan:

minta jejari true

jejari < 0 false

jejari = 0.0

kira luas = * jejari * jejari

papar luas

Bahagian aturcara Java yang sepadan ialah:System.out.println("Berikan jejari bulatan : "); jejari = Input.nilaiDouble(); if (jejari < 0) jejari = 0.0; luas = Math.PI * jejari * jejari; System.out.println("Luas bulatan ialah " + luas);

TA113 - Bab 7 - pg 3

Sekiranya kita ingin melaksanakan lebih dari satu pernyataan jika syarat bernilai true, kita perlu kurungkan pernyataan-pernyataan tersebut dalam curly braces { }. Contoh: Katakan untuk contoh di atas, selain membetulkan nilai jejari yang kurang dari 0 menjadi 0, kita juga ingin paparkan mesej memberitahu bahawa pembetulan telah dibuat. Jadi kita boleh tulis seperti:System.out.println("Berikan jejari bulatan : "); jejari = Input.nilaiDouble(); if (jejari < 0) { jejari = 0.0; System.out.pritn("Nilai jejari yang anda berikan"); System.out.println(" tidak sah"); System.out.print("Oleh itu, jejari telah diberi"); System.out.println(" nilai 0"); } luas = Math.PI * jejari * jejari; System.out.println("Luas bulatan ialah " + luas);

Pernyataan ifelse Bentuk umum pernyataan ifelse ialah if (ungkapan) pernyataan1; else pernytaan2; ungkapan - Sebarang ungkapan yang menghasilkan nilai boolean, true atau false - Biasanya melibatkan ungkapan dengan operator perbandingan atau operator bersyarat (rujuk nota Bab 5)

TA113 - Bab 7 - pg 4

pernyataan1, pernytaan2 - Sebarang pernyataan sah dalam Java Semasa melaksanakan suatu pernyataan ifelse, komputer akan menilai ungkapan dahulu. Jika ungkapan bernilai true, pernyataan1 akan dilaksanakan, jika ungkapan bernilai false, pernyataan2 akan dilaksanakan. Contoh: Katakan kita ingin tentukan sama ada seseorang pelajar itu lulus atau tidak dalam sesuatu ujian. Jika markah yang diperolehi pelajar tersebut melebihi atau sama dengan 40, dia dikira lulus, tetapi jika memperolehi markah kurang dari 40, dia dikira gagal. Carta alir yang boleh dijadikan penyelesaian adalah seperti:minta mark true papar "Lulus" false papar "Gagal"

mark >= 40

papar "Terus berusaha"

Bahagian aturcara yang boleh dibuat adalah seperti:System.out.print("Berikan markah anda : "); mark = Input.masukDouble(); if (mark >= 40) System.out.println("Anda lulus!"); else System.out.println("Anda gagal"); System.out.println("Teruskan usaha");

TA113 - Bab 7 - pg 5

Sekiranya terdapat lebih dari satu pernyataan perlu dilaksanakan jika ungkapan syarat bernilai true/false, maka kita boleh kurungkan setiap pernyataan tersebut dengan menggunakan kurungan curly braces. Contoh: Katakan, selain dari memaparkan perkataan "Lulus" atau "Gagal" pada skrin, kita juga perlu setkan nilai pembolehubah gred dengan nilai "L" jika pelajar lulus, dan gred "G" jika pelajar gagal. Maka kita boleh tuliskan bahagain aturcara seperti:System.out.print("Berikan markah anda : "); markah = Input.masukDouble(); if (markah >= 40) { gred = "L"; System.out.println("Anda lulus!"); } else { gred = "G"; System.out.println("Anda gagal"); } System.out.println("Teruskan usaha");

Pernyataan if bersarang dan if berjujukan untuk pilihan pelbagai hala Seringkali dalam mengaturcara, kita menghadapai masalah yang melibatkan lebih dari 2 pilihan. Contohnya, dalam menentukan gred pelajar Kita mempunyai leboih dari 2 pilihan gred. Seseorang pelajar mungkin mendapat gred A, A-, B+, B dan seterusnya. Bagaimanapun, struktur if atau ifelse yang telah dipelajari setakat ini hanya membenarkan pilihan 2 hala sahaja.

TA113 - Bab 7 - pg 6

Untuk menyelesaikan masalah pilihan lebih dari 2 hala, kita boleh gunakan struktur if bersarang atau struktur if berjujukan. Suatu pernyataan ifelse yang mengandungi pernytaan if yang lain pada bahagian if atau else nya di panggil if bersarang. Contoh: Katakan kita ingin bangunkan bahagian aturcara yang akan meminta suatu integer dari pengguna, kemudian kita akan tentukan sama ada nombor tersebut adalah nombor genap kurang dari 50 atau bukan. Contoh rajah carta alir untuk masalah di atas adalah seperti:

minta n false papar "No. Ganjil" true true papar "No. Genap besar dari 50"

n % 2 == 0 false papar "No. Genap kurang dari 50

n > 50

papar "Terima kasih"

Bahagian aturcara yang sesuai ialah:System.out.print("Berikan suatu integer : "); n = Input.nilaiInteger(); if (n % 2 == 0) { if (n > 50)

TA113 - Bab 7 - pg 7

{ } else { }

System.out.print(n + " ialah nombor genap "); System.out.println("besar dari 50");

System.out.print(n + " ialah nombor genap "); System.out.println("kurang dari 50"); } else { }

System.out.println(n + " bukan nombor genap");

System.out.println("\nTerima kasih");

Kaedah lain untuk menyelesaikan masalah seperti di atas adalah dengan menggunakan beberapa pernyataan if yang disusun secara berjujukan. Setiap if menguji serentak 2 syarat dengan menggunakan operator logik. Contoh: Pertimbangkan masalah sama seperti di atas: Kita juga boleh tulis bahagian atrucara seperti berikut:System.out.print("Berikan suatu integer : "); n = Input.nilaiInteger(); if ((n % 2 == 0) && (n > 50)) { System.out.print(n + " ialah nombor genap "); System.out.println("besar dari 50"); } if ((n % 2 == 0) && (n = 84.45 79.45 84.44 69.45 79.44 64.45 69.44 59.45 64.44 54.45 59.44 49.45 54.44 44.45 49.44 39.45 44.44 = 84.45) && (markah = 79.45) && (markah = 69.45) && (markah = 64.45) && (markah = 59.45) && (markah = 54.45) && (markah = 49.45) && (markah = 44.45) && (markah = 39.45) && (markah = 0.00) && (markah 100.00)) { gredDiperolehi = ""; } } } return gredDiperolehi;

TA113 - Bab 7 - pg 10

import Input; import GredMarkah; import java.io.*; class Utama { public static void main(String args[]) { double markah; String gred; System.out.println("Selamat datang!"); System.out.print("Berikan markah anda : "); markah = Input.nilaiDouble(); gred = GredMarkah.gred(markah); System.out.println("Gred anda : " + gred); System.out.println("\nTerima kasih"); } } Input.getch();

Contoh output:

TA113 - Bab 7 - pg 11

Pernyataan switch untuk pilihan pelbagai hala Menggunakan struktur if bersarang atau if berjujukan kita boleh selesaikan hampir semua masalah melibatkan pilihan pelbagai hala. Bagaimanapun, Java menyediakan kita satu lagi kaedah untuk memudahkan kita menyelesaikan masalah pilihan pelbagai hala bagi kes-kes tertentu menggunakan pernyataan switch. Contoh: Katakan kita ingin bangunkan suatu bahagian aturcara yang akan meminta suatu integer antara 0 - 9 dari pengguna, kemudian mencetak integer tersebut dalam perkataan. Contohnya, jika pengguna memberikan integer 1, kita akan papar "SATU". Kita boleh selesaikan masalah ini dengan menggunakan pernyataan if berjujukan seperti berikut:System.out.print("\nBerikan suatu integer "); System.out.print("antara 0 - 9 : "); n = Input.nilaiInteger(); if (n == 1) System.out.println("SATU"); if (n == 2) System.out.println("DUA"); if (n == 3) System.out.println("TIGA"); if (n == 4) System.out.println("EMPAT"); if (n == 5) System.out.println("LIMA"); if (n == 6) System.out.println("ENAM"); if (n == 7) System.out.println("TUJUH"); if (n == 8) System.out.println("LAPAN"); if (n == 9) System.out.println("SEMBILAN"); if (n < 0 || n > 9) System.out.println("Nilai di beri tidak sah");

TA113 - Bab 7 - pg 12

Sekarang, pertimbangkan pula bahagian aturcara berikut yang juga akan menyelesaikan masalah yang sama, tetapi menggunakan pernyataan switch.System.out.print("\nBerikan suatu integer "); System.out.print("antara 0 - 9 : "); n = Input.nilaiInteger(); switch (n) { case 0 : System.out.println("KOSONG"); break; case 1 : System.out.println("SATU"); break; case 2 : System.out.println("DUA"); break; case 3 : System.out.println("TIGA"); break; case 4 : System.out.println("EMPAT"); break; case 5 : System.out.println("LIMA"); break; case 6 : System.out.println("ENAM"); break; case 7 : System.out.println("TUJUH"); break; case 8 : System.out.println("LAPAN"); break; case 9 : System.out.println("SEMBILAN"); break; default: System.out.println("Nilai diberi tak sah"); break; }

Kedua-dua kaedah ini akan memberikan penyelesaian yang sama. Yang manakah lebih senang dibaca ? Yang mana lebih mudah, pastinya bergantung kepada individu. Mungkin ada yang memilih kaedah pertama (menggunakan if berjujukan), mungkin ada yang memilih kaedah kedua (menggunakan switch). Apapun, adalah lebih baik kita cuba mempelajari pernyataan switch untuk menambah opsyen kita.

TA113 - Bab 7 - pg 13

Pernyataan switch Bentuk umum pernyataan switch adalah seperti berikut: switch () { case case : : case default }

: : : : : :

adalah sebarang ungkapan yang menghasilkan suatu nilai integer (short, byte atau int) atau aksara (char). adalah literal konstan berjenis short, byte, int atau char. Dan jenisnya mestilah sama degan jenis hasil . Nilai mestilah tidak sama untuk setiap case. adalah pernyataan sah dalam Java. Ia boleh melebihi satu pernyataan atau tiada pernyataan langsung. Jika melibatkan lebih dari satu pernyataan, ia TAK PERLU dikurung. adalah pernyataan sah dalam Java. Ia boleh melebihi satu pernyataan atau tiada pernyataan langsung. Jika melibatkan lebih dari satu pernyataan, ia juga TAK PERLU dikurung. Bahagian default adalah optional, bermaksud ia boleh ditinggalkan dalam suatu pernyataan switch. Begitu juga dengan bahagian untuk setiap kes adalah optional dan boleh dibiarkan kosong.

TA113 - Bab 7 - pg 14

Semasa melaksanakan pernyataan switch, pertamanya akan dinilaikan. Kemudian, nilai ungkapan ini akan dibandingkan dengan nilai satu persatu. Sekiranya terdapat nilai yang sepadan antara dan , akan dilaksanakan. Selepas itu, semua bahagian hingga bahagian dan bahagian akan dilaksanakan, dan pernyataan switch ditamatkan. Sekiranya tiada satu pun yang sepadan dengan , bahagian akan dilaksanakan. Logik perlaksanaan pernyataan kes digambarkan seperti rajah berikut:

TA113 - Bab 7 - pg 15

Contoh: Pertimbangkan bahagian aturcara berikut:pilihan = 1; switch(pilihan) { case 0 : System.out.println("KOSONG"); case 1 : System.out.println("SATU"); case 2 : System.out.println("DUA"); case 3 : System.out.println("TIGA"); }

Bahagian aturcara tersebut akan memberi output: SATU DUA TIGA Perhatikan, oleh sebab pilihan = 1, maka case 1 adalah sepadan. Maka, Bahagian badan case 1 iaitu System.out.println("SATU") dilaksanakan. Selepas itu, semua bahagian badan kes selepas case 1 akan juga dilaksanakan. Apakah outputnya jika pilihan bernilai 3? Apakah pula outputnya jika pilihan bernilai 8. Jika pilihan bernilai 2, ouputnya ialah DUA TIGA Jika pilihan bernilai 8, maka tiada satupun case yang sepadanan, maka tiada output yang dihasilkan.

Contoh: pertimbangkan pula pernyataan switch aturcara berikut:

TA113 - Bab 7 - pg 16

switch(pilihan) { case 0 : case 1 : case 2 : System.out.println("Kurang dari satu"); case 3 : System.out.println("Kurang dari dua"); case 4 : System.out.println("Kurang dari tiga"); default : System.out.println("Tiada satupun diatas"); }

Jika pilihan bernilai 0, apakah outputnya? Jika pilihan bernilai 1, apakah outputnya? Jika pilihan bernilai 4, apakah outputnya? Jika pilihan bernilai 8 apakah outputnya? Jika pilihan = 0, outputnya ialah Kurang dari satu Kurang dari dua Kurang dari tiga Tiada satupun di atas Output yang sama seperti ini akan diperolehi jika pilihan = 1, atau pilihan = 2. Jika pilihan = 4, outputnya ialah Kurang dari tiga Tiada satupun di atas Jika pilihan = 8, outputnya ialah Tiada satupun di atas. Mengetahui cara perlaksanaan pernyataan switch ini, kita mungkin beranggapan bahawa pernyataan switch tak dapat banyak membantu kerana ia tidak dapat melaksanakan pernyataan tertentu sahaja untuk setiap kes yang sepadan.

TA113 - Bab 7 - pg 17

Sebenarnya kita boleh melaksanakan hanya pernyataan bahagian badan kes yang sepadanan sahaja dengan menggunakan pernyataan break. Pernyataan break akan menyebabkan komputer melangkau semua pernyataan-pernyataan selepasnya dan menamatkan pernyataan switch. Contoh: Pertimbangkan pernyataan switch berikutswitch(pilihan) { case 0 : System.out.println("KOSONG"); break; case 1 : System.out.println("SATU"); break; case 2 : System.out.println("DUA"); break; case 3 : System.out.println("TIGA"); break; default : System.out.println("Tiada satupun di atas"); break; }

Jika pilihan = 0, outputnya ialah KOSONG Ini kerana, dipenghujung bahagian badan case 0 adalah suatu pernyataan break. Ini menyebabkan, komputer melangkau semua pernyataan selepas itu dan menamatkan pernyataan switch. Apa pula outputnya jika pilihan = 2? Outputnya ialah DUA Jika pilihan = 8 ? Outputnya ialah

TA113 - Bab 7 - pg 18

Tiada satupun di atas. Logik bahagian aturcara di atas dapat digambarkan dengan rajah berikut:

TA113 - Bab 7 - pg 19

Contoh: Pertimbangkan bahagian aturcara berikut:switch (n) { case 10 : case 9 : case 8 : System.out.println("Amat hebat"); break; case 7 : case 6 : System.out.println("Hebat"); break; case 5 : case 4 : case 3 : System.out.println("Biasa"); break; case 2 : case 1 : case 0 : System.out.println("Lemah"); break; default : System.out.println("Nilai diberi tak sah"); break; }

Jika n = 10, 9 atau 8, outputnya ialah Amat hebat Jika n = 7 atau 6, outputnya ialah Hebat Jika n = 5, 4 atau 3, outputnya ialah Biasa Dan jika n = 2, 1 atau 0, outputnya ialah Lemah

TA113 - Bab 7 - pg 20

Dengan menggunakan kaedah seperti ini, kita dapat melaksanakan perkara yang sama untuk beberapa kes. Kajian Kes Andaikan anda telah diberi dua kelas iaitu Input dan Luas. Kelas Input mengandungi public method static nilaiDouble() yang akan mendapatkan satu nilai double dari keyboard dan mengembalikannya. Dan public static nilaiInteger() yang akan mendapatkan satu nilai integer dari keyboard dan mengembalikannya. Dalam kelas Luas pula terdapat public method segitiga (double tapak, double tinggi) yang dapat memberikan luas suatu segitiga dengan lebar tapak dan tinggi yang diberikan melalui argumentnya. Juga ia mengandungi public method segiempat(double lebar, double panjang) yang dapat mengira luas suatu segiempat dengan lebar dan panjang yang diberikan mealui argumentnya. Anda diminta untuk membangunkan suatu aturcara berasaskan menu, yang akan meminta pengguna membuat pilihan sama ada mendapatkan luas segitiga, atau mendapatkan luas segiempat. Berdasarkan pilihan ini, aturcara akan meminta input yang diperlukan dan memaparkan output luas yang sesuai dengan pilihan tersebut. Contoh Penyelesaian:import Luas; import Input; import java.io.*; class Utama1 { public static void main(String args[]) { int pilihan; double x, y, L;

TA113 - Bab 7 - pg 21

System.out.println("Selamat Datang"); System.out.println("--------------"); System.out.println("\nSila buat pilihan : \n"); System.out.println(" Kira luas segitiga"); System.out.println(" Kira luas segiempat"); System.out.print("\nPilihan anda => "); pilihan = Input.nilaiInteger(); switch (pilihan) { case 1 : System.out.print("\nMendapatkan luas"); System.out.println(" segitiga"); System.out.print("\nBerikan lebar tapak"); System.out.print(" segitiga : "); x = Input.nilaiDouble(); System.out.print("Berikan tinggi"); System.out.print(" segitiga : "); y = Input.nilaiDouble(); L = Luas.segitiga(x,y); System.out.print("Luas segitiga ialah "); System.out.println(L); break; case 2 : System.out.println("\nMendapatkan luas"); System.out.println(" segiempat"); System.out.print("\nBerikan lebar"); System.out.print(" segiempat : "); x = Input.nilaiDouble(); System.out.print("Berikan panjang"); System.out.print(" segiempat : "); y = Input.nilaiDouble(); L = Luas.segiempat(x,y); System.out.print("Luas segiempat ialah "); System.out.println(L); break; default: System.out.print("\nPilihan anda tidak"); System.out.println(" sah!"); break; } } }

TA113 - Bab 7 - pg 22

Beberapa Contoh output:Selamat Datang -------------Sila buat pilihan : Kira luas segitiga Kira luas segiempat Pilihan anda => 1 Mendapatkan luas segitiga Berikan lebar tapak segitiga : 3.2 Berikan tinggi segitiga : 2.4 Luas segitiga ialah 3.84 Selamat Datang -------------Sila buat pilihan : Kira luas segitiga Kira luas segiempat Pilihan anda => 2 Mendapatkan luas segiempat Berikan lebar segiempat : 2.7 Berikan tinggi segiempat : 8.3 Luas segiempat ialah 22.410000000000004

Selamat Datang -------------Sila buat pilihan anda : Kira luas segitiga Kira luas segiempat Pilihan anda => 7

TA113 - Bab 7 - pg 23

Pilihan anda tidak sah!

Aturcara berikut akan juga memberikan output yang serupa:import Luas; import Input; import java.io.*; class Utama1 { public static void main(String args[]) { int pilihan; System.out.println("Selamat Datang"); System.out.println("--------------"); System.out.println("\nSila buat pilihan : \n"); System.out.println(" Kira luas segitiga"); System.out.println(" Kira luas segiempat"); System.out.print("\nPilihan anda => "); pilihan = Input.nilaiInteger(); switch (pilihan) { case 1 : kiraLuasSegitiga(); break; case 2 : kiraLuasSegiempat(); break; default: System.out.print("\nPilihan anda tidak"); System.out.println(" sah!"); break; } // tamat switch } // tamat method main() public static void kiraLuasSegitiga() { double x, y, L; System.out.println("\nMendapatkan luas segitiga"); System.out.print("\nBerikan lebar tapak"); System.out.print(" segitiga : "); x = Input.nilaiDouble(); System.out.print(" Berikan tinggi segitiga : "); y = Input.nilaiDouble(); L = Luas.segitiga(x,y);

TA113 - Bab 7 - pg 24

System.out.println(" Luas segitiga ialah " + L); } // tamat method kiraLuasSegitiga() public static void kiraLuasSegiempat() { double x, y, L; System.out.println("\nMendapatkan luas segiempat"); System.out.print(" Berikan lebar segiempat : "); x = Input.nilaiDouble(); System.out.print(" Berikan tinggi segiempat : "); y = Input.nilaiDouble(); L = Luas.segiempat(x,y); System.out.println(" Luas segiempat ialah " + L); } // tamat method kiraLuasSegiempat() } // tamat class