1. Operator aneka pilihan:switch

Java mempunyai satu lagi pengendali menarik yang diwarisi daripada datuknya (C++). Kita bercakap tentang switchkenyataan itu. Kami juga boleh memanggilnya pengendali aneka pilihan. Ia kelihatan sedikit menyusahkan:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Ungkapan atau pembolehubah ditunjukkan dalam kurungan. Jika nilai ungkapan ialah value1, mesin Java mula melaksanakan code1. Jika ungkapan itu sama dengan value2, pelaksanaan melompat ke code2. Jika ungkapan itu sama dengan value3, maka code3dilaksanakan.

Contoh:

Kod Output konsol
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
High

2. breakpernyataan dalamswitch

Ciri penting pernyataan switchialah program hanya melompat ke baris yang diperlukan (ke blok kod yang diperlukan) dan kemudian melaksanakan semua blok kod sehingga penghujung switch. Bukan sahaja blok kod yang sepadan dengan nilai dalam switch, tetapi semua blok kod sehingga akhir switch.

Contoh:

Kod Output konsol
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
} 
Low
Normal
High

Memandangkan suhu 36, atur cara akan memasukkan switchpenyata, melompat ke dan melaksanakan blok pertama kod (kes pertama), dan kemudian dengan riang melaksanakan blok kod yang lain.

Jika anda ingin melaksanakan hanya satu blok kod — blok kod yang dikaitkan dengan kes yang dipadankan — maka anda perlu menamatkan blok dengan pernyataan break;

Contoh:

Kod Output konsol
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

Anda boleh meninggalkan breakdalam kes terakhir pernyataan switch, kerana blok itu adalah yang terakhir dengan atau tanpa penyataan putus.


3. Tindakan lalai:default

Satu lagi perkara penting. Apakah yang berlaku jika tiada kes yang disenaraikan dalam switchsepadan dengan ungkapan dalam kurungan?

Jika kes yang sepadan tidak ditemui, maka pernyataan yang lain switchdilangkau dan program akan meneruskan pelaksanaan selepas pendakap kerinting menamatkan pernyataan switch.

Walau bagaimanapun, anda juga boleh membuat switchpernyataan berkelakuan seperti cawangan lain dalam if-elsepernyataan. Untuk melakukan ini, gunakan defaultkata kunci.

Jika tiada cases dalam switchblok sepadan dengan nilai ungkapan dan switchmempunyai defaultblok, blok lalai akan dilaksanakan. Contoh:

Kod Output konsol
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Membanding switchdanif-else

Kenyataan itu switchagak serupa dengan if-elsepernyataan, cuma lebih rumit.

Anda sentiasa boleh menulis semula kod pernyataan switchsebagai berbilang ifkenyataan. Contoh:

Kod dengan suis Kod dengan if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
} 
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

Kod di sebelah kiri akan berfungsi sama seperti kod di sebelah kanan.

Rangkaian berbilang if-elsepernyataan adalah lebih baik apabila ifpernyataan mengandungi pelbagai ungkapan kompleks dalam setiap kes berasingan.



5. Apakah ungkapan yang boleh digunakan dalam switchpernyataan?

Tidak semua jenis boleh digunakan sebagai caselabel dalam switchpernyataan. Anda boleh menggunakan literal jenis berikut:

  • jenis integer: byte, short, int,long
  • char
  • String
  • apa-apa enumjenis

Anda tidak boleh menggunakan mana-mana jenis lain sebagai label kes.

Contoh penggunaan enumdalam switchpernyataan:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

Nota: Jika anda menggunakan pernyataan enumdalam switch, anda tidak perlu menulis nama kelas di hadapan setiap nilai dalam caselabel. Cukup sekadar menulis nilai.