1. ตัวดำเนินการแบบปรนัย:switch

Java มีโอเปอเรเตอร์ที่น่าสนใจอีกตัวที่สืบทอดมาจากคุณปู่ (C++) เรากำลังพูดถึงswitchแถลงการณ์ เราเรียกมันว่าตัวดำเนินการแบบปรนัยก็ได้ มันดูยุ่งยากเล็กน้อย:

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

นิพจน์หรือตัวแปรระบุไว้ในวงเล็บ ถ้าค่าของนิพจน์คือvalue1เครื่อง Java จะเริ่มดำเนินcode1การ หากนิพจน์เท่ากับvalue2การดำเนินการจะข้ามไปcode2ที่ หากนิพจน์เท่ากับ จะvalue3ถูกcode3ดำเนินการ

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
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. breakคำสั่งในswitch

คุณลักษณะที่สำคัญของswitchคำสั่งคือโปรแกรมเพียงแค่ข้ามไปยังบรรทัดที่ต้องการ (ไปยังบล็อกรหัสที่ต้องการ) จากนั้นจึงดำเนินการบล็อกรหัสทั้งหมดจนถึงจุดสิ้นสุดของswitch. ไม่เพียงเฉพาะบล็อกโค้ดที่สอดคล้องกับค่าในswitchแต่บล็อกโค้ดทั้งหมดจนถึงจุดสิ้นสุดของswitch.

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
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

เมื่อกำหนดอุณหภูมิไว้ที่ 36 โปรแกรมจะป้อนswitchคำสั่ง ข้ามไปและดำเนินการกับบล็อกแรกของโค้ด (กรณีแรก) จากนั้นจึงดำเนินการบล็อกที่เหลือของโค้ดอย่างสนุกสนาน

หากคุณต้องการรันโค้ดเพียงบล็อกเดียว — บล็อกโค้ดที่เกี่ยวข้องกับกรณีที่ตรงกัน — คุณต้องจบบล็อกด้วยbreakคำสั่ง

ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
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

คุณสามารถละเว้นbreakในกรณีสุดท้ายของswitchคำสั่งได้ เนื่องจากบล็อกนั้นเป็นบล็อกสุดท้ายที่มีหรือไม่มีคำสั่งพัก


3. การดำเนินการเริ่มต้น:default

อีกจุดสำคัญ จะเกิดอะไรขึ้นหากไม่มีกรณีใดในรายการที่switchตรงกับนิพจน์ในวงเล็บ

หากไม่พบกรณีที่ตรงกัน ส่วนที่เหลือของswitchคำสั่งจะถูกข้ามไป และโปรแกรมจะดำเนินการต่อไปหลังจากวงเล็บปีกกาสิ้นสุดคำswitchสั่ง

ที่กล่าวว่า คุณยังสามารถทำให้switchคำสั่งทำงานเหมือนสาขาอื่นในif-elseคำสั่ง เมื่อต้องการทำเช่นนี้ ใช้defaultคำหลัก

หากไม่มีcases ในswitchบล็อกที่ตรงกับค่าของนิพจน์และswitchมีdefaultบล็อก บล็อกเริ่มต้นจะถูกดำเนินการ ตัวอย่าง:

รหัส เอาต์พุตคอนโซล
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. การเปรียบเทียบswitchและif-else

คำสั่ง นั้นswitchค่อนข้างคล้ายกับif-elseคำสั่ง แต่ซับซ้อนกว่า

คุณสามารถเขียนโค้ดของswitchคำสั่งใหม่เป็นหลายifคำสั่ง ได้เสมอ ตัวอย่าง:

รหัสพร้อมสวิตช์ รหัสด้วย 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");
}

โค้ดด้านซ้ายจะทำงานเหมือนกับโค้ดด้านขวาทุกประการ

if-elseควรใช้ชุดคำสั่งหลายชุด เมื่อ ifคำสั่งประกอบด้วยนิพจน์ที่ซับซ้อนต่างๆ ในแต่ละกรณีที่แยกจากกัน



5. สำนวนใดสามารถใช้ในswitchคำสั่งได้?

ไม่สามารถใช้ทุกประเภทเป็นcaseป้ายกำกับในswitchคำสั่งได้ คุณสามารถใช้ตัวอักษรประเภทต่อไปนี้:

  • ประเภทจำนวนเต็ม: byte, short, int,long
  • char
  • String
  • enumประเภทใดก็ได้

คุณไม่สามารถใช้ประเภทอื่นเป็นป้ายกำกับเคสได้

ตัวอย่างการใช้ คำสั่ง enumภายในswitch:

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;
}

หมายเหตุ: หากคุณใช้ คำสั่ง enumภายในswitchคุณไม่จำเป็นต้องเขียนชื่อคลาสหน้าค่าแต่ละค่าในป้ายcaseกำกับ แค่เขียนค่าก็พอ