Mệnh đề Switch-case trong java – GP Coder (Lập trình Java)

Mệnh đề switch-case trong java được sử dụng để thực thi 1 hoặc nhiều khối lệnh từ nhiều điều kiện kèm theo .

switch sẽ kiểm tra giá trị của một biến (variable), và so sánh biến với từng giá trị khác nhau từ trên xuống dưới, mỗi giá trị cần so sánh được gọi là một trường hợp (case). Khi một trường hợp đúng, khối lệnh của trường hợp đó sẽ được thực thi (execute).

Nếu tất cả các trường hợp đều sai, khối lệnh default sẽ được thực thi. Chú ý, trong cấu trúc của câu lệnh switch, có thể có hoặc không có khối lệnh default.

Khi tìm thấy một trường hợp đúng, khối lệnh của trường hợp đó sẽ được thực thi. Nếu không bắt gặp lệnh break trong khối lệnh này, chương trình sẽ thực hiện tiếp các khối lệnh bên dưới cho tới khi nó bắt gặp lệnh break, hoặc không còn khối lệnh nào để thực thi.

Lệnh break làm chương trình thoát ra khỏi switch.

Chú ý rằng với câu lệnh case phải là một giá trị cụ thể, không thể thực hiện phép tính so sánh hay tính toán trong case. Ví dụ: case (age < 18)

Trường hợp sử dụng

Trong một vài trường hợp, bạn dùng quá nhiều cấu trúc rẽ nhánh dạng if-else, và điều kiện kèm theo của những mã giải quyết và xử lý này có điểm tương đương. Bạn hoàn toàn có thể nghĩ đến việc sử dụng cấu trúc switch-case .Ví dụ : bạn cần xét những tháng trong 1 năm. Chúng ta sẽ cần khá nhiều cấu trúc rẽ nhánh dạng if, if-else hoặc những dạng lan rộng ra hơn để xét toàn bộ 12 tháng. Tôi sẽ trình diễn đơn cử ví dụ này ở trong phần Ví dụ mệnh đề Switch-case nhiều hơn 1 case .

Ví dụ về mệnh đề switch-case

package com.gpcoder;

public class Switchtatement {
  public static void main(String[] args) {
    int month = 10;
    switch (month) {
    case 1:
      System.out.println("January");
      break;
    case 2:
      System.out.println("February");
      break;
    case 3:
      System.out.println("March");
      break;
    case 4:
      System.out.println("April");
      break;
    case 5:
      System.out.println("May");
      break;
    case 6:
      System.out.println("June");
      break;
    case 7:
      System.out.println("July");
      break;
    case 8:
      System.out.println("August");
      break;
    case 9:
      System.out.println("September");
      break;
    case 10:
      System.out.println("October");
      break;
    case 11:
      System.out.println("November");
      break;
    case 12:
      System.out.println("December");
      break;
    default:
      System.out.println("Error");
      break;
    }
  }
}

Kết quả chương trình trên : October

Ví dụ mệnh đề Switch-case nhiều hơn 1 case


package com.gpcoder;

public class Switchtatement {
  public static void main(String[] args) {
    int month = 10;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      System.out.println("This month has 31 days");
      break;
    case 2:
      System.out.println("This month has 28 or 29 days");
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      System.out.println("This month has 31 days");
      break;
    default:
      System.out.println("Error");
      break;
    }
  }
}

Kết quả chương trình trên : This month has 31 days

Ví dụ mệnh đề Switch-case khi không sử dụng lệnh break

Khi không sử dụng từ khóa break trong mệnh đề switch-case. Điều này có nghĩa là các khối lệnh sau case có giá trị phù hợp sẽ được thực thi.

package com.gpcoder;

public class Switchtatement {
  public static void main(String[] args) {
    int month = 10;
    switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      System.out.println("This month has 31 days");
    case 2:
      System.out.println("This month has 28 or 29 days");
    case 4:
    case 6:
    case 9:
    case 11:
      System.out.println("This month has 31 days");
    }
  }
}

Kết quả chương trình trên :

This month has 31 days
This month has 28 or 29 days
This month has 31 days

Giá trị được đồng ý trong câu lệnh case

Các giá trị trong mỗi câu lệnh case phải là những giá trị hằng số tại thời gian biên dịch ( compile-time constant ) và có cùng kiểu tài liệu với giá trị trong switch .

Ví dụ 1

  • Line 11: bannanas được đánh dấu final, giá trị nó được biết tại thời điểm compile time, nên case này hợp lệ.
  • Line 12: Do apples không được đánh dấu final, mặc dù giá trị nó được biết tại thời điểm compile time, nhưng case này cũng không được chấp nhận.
  • Line 13 và 14: hai case này không được chấp nhận, do giá trị của nó chỉ có được tại thời điểm run-time.
  • Line 15: case này hợp lệ, giá trị biểu thức này được tính toán tại thời điểm compile-time.

Ví dụ 2

  • Line 10: hợp lệ, giá trị này không bị thay đổi và được biết tại thời điểm compile time.
  • Line 12: không hợp lệ, do middleName không được đánh dấu là final.
  • Line 15: hợp lệ, được đánh dấu final và được biết tại thời điểm compile time.
  • Line 18: không hợp lệ, mặc dù được đánh dấu là final nhưng giá trị được truyền từ method nên không biết được giá trị tại thời điểm compile time.
  • Line 21, 24, 27: không hộp lệ, do không cùng kiểu dữ liệu với câu lệnh switch (String).

Vài điểm cần chú ý quan tâm khi sử dụng switch

  • Cách mô tả các trường hợp có thể xảy ra, các bạn có thể mô tả từng trường hợp cụ thể, hoặc gom thành nhóm các trường hợp giống nhau. (case 1: case2: { })
  • Luôn phải thông báo kết thúc phần lệnh cần thực thi của mỗi trường hợp hoặc nhóm trường hợp thông qua câu lệnh break.
  • Luôn tận dụng câu lệnh default để thực thi những mệnh lệnh đối với trường hợp ngoại lệ (trường hợp khác).
  • Switch chỉ hỗ trợ các kiểu dữ liệu:
    • byteshortcharint và các Wrapper class tương ứng.
    • enum, String và var (tương ứng với các type trên).
    • boolean, long, float, double và kiểu Wrapper tương ứng không được hỗ trợ bởi câu lệnh switch.

Các giá trị trong mỗi câu lệnh case phải là các giá trị hằng số tại thời điểm biên dịch (compile-time constant) và có cùng kiểu dữ liệu với giá trị trong switch.

So sánh giữa if và switch trong lập trình Java

if switch
Mỗi if có biểu thức logic bên trong nó để định giá trị là đúng hay sai Mỗi case trong switch phải là một giá trị cụ thể, không có biểu thức logic bên trong.
Các biến trong biểu thức có thể định giá trị của bất kỳ kiểu giá trị nào Biểu thức phải xác định giá trị là byte (Byte)short (Short)char (Character)int (Integer), enum, String, var (tương ứng với các type trên).
Chỉ một khối lệnh được thực thi Nếu câu lệnh break bị bỏ qua, thì các câu lệnh từ case đúng trở về sau sẽ được thực hiện.

Như vậy là chúng ta đã tìm hiểu được các câu điều khiển: if switch-case được sử dụng rất phổ biến trong quá trình lập trình trên Java.

Hẹn gặp lại những bạn trong bài viết tiếp theo .5.0

Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé!

Shares

Bình luận

phản hồi