1. Toán tử trắc nghiệm:switch

Java có một toán tử thú vị khác mà nó kế thừa từ grandpappy của nó (C++). Chúng ta đang nói về switchtuyên bố. Chúng ta cũng có thể gọi nó là toán tử trắc nghiệm. Có vẻ hơi rườm rà:

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

Một biểu thức hoặc biến được chỉ định trong dấu ngoặc đơn. Nếu giá trị của biểu thức là value1, máy Java bắt đầu thực thi code1. Nếu biểu thức bằng value2, thì việc thực thi sẽ nhảy đến code2. Nếu biểu thức bằng value3, thì code3được thực hiện.

Ví dụ:

Mã số Đầu ra bảng điều khiển
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. breaktuyên bố trongswitch

Một tính năng quan trọng của switchcâu lệnh là chương trình chỉ cần nhảy đến dòng yêu cầu (đến khối mã được yêu cầu) và sau đó thực thi tất cả các khối mã cho đến khi kết thúc switch. Không chỉ khối mã tương ứng với giá trị trong tệp switch, mà tất cả các khối mã cho đến hết tệp switch.

Ví dụ:

Mã số Đầu ra bảng điều khiển
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

Với nhiệt độ là 36, chương trình sẽ nhập switchcâu lệnh, chuyển đến và thực thi khối mã đầu tiên (trường hợp đầu tiên), sau đó vui vẻ thực hiện phần còn lại của khối mã.

Nếu bạn chỉ muốn thực thi một khối mã — khối mã được liên kết với trường hợp khớp — thì bạn cần kết thúc khối bằng một breakcâu lệnh;

Ví dụ:

Mã số Đầu ra bảng điều khiển
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

Bạn có thể bỏ qua breaktrường hợp cuối cùng của switchcâu lệnh, vì khối đó là khối cuối cùng có hoặc không có câu lệnh ngắt.


3. Hành động mặc định:default

Một điểm quan trọng khác. Điều gì xảy ra nếu không có trường hợp nào được liệt kê trong biểu switchthức khớp với biểu thức trong ngoặc đơn?

Nếu không tìm thấy trường hợp phù hợp, thì phần còn lại của switchcâu lệnh sẽ bị bỏ qua và chương trình sẽ tiếp tục thực hiện sau dấu ngoặc nhọn kết thúc câu switchlệnh.

Điều đó nói rằng, bạn cũng có thể làm cho một switchcâu lệnh hoạt động giống như nhánh khác trong một if-elsecâu lệnh. Để làm điều này, sử dụng defaulttừ khóa.

Nếu không có cases nào trong switchkhối khớp với giá trị của biểu thức và switchcó một defaultkhối, thì khối mặc định sẽ được thực thi. Ví dụ:

Mã số Đầu ra bảng điều khiển
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. So sánh switchif-else

Tuyên switchbố tương tự như một if-elsetuyên bố, chỉ phức tạp hơn.

Bạn luôn có thể viết lại mã của một switchcâu lệnh dưới dạng nhiều ifcâu lệnh. Ví dụ:

Mã với công tắc Mã với 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");
}

Mã bên trái sẽ hoạt động giống hệt như mã bên phải.

Một chuỗi nhiều if-elsecâu lệnh thích hợp hơn khi một ifcâu lệnh chứa nhiều biểu thức phức tạp khác nhau trong từng trường hợp riêng biệt.



5. Những biểu thức nào có thể được sử dụng trong một switchtuyên bố?

Không phải tất cả các loại đều có thể được sử dụng làm casenhãn trong switchcâu lệnh. Bạn có thể sử dụng nghĩa đen của các loại sau:

  • các kiểu số nguyên: byte, short, int,long
  • char
  • String
  • bất kỳ enumloại

Bạn không thể sử dụng bất kỳ loại nào khác làm nhãn hộp.

Ví dụ về việc sử dụng một câu lệnh enumbên trong 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;
}

Lưu ý: Nếu bạn sử dụng câu lệnh enumbên trong switch, bạn không cần viết tên lớp trước mỗi giá trị trong nhãn case. Chỉ cần ghi giá trị là đủ.