1. Cấu trúc rẽ nhánh switch case trong Java

Switch case cũng là một cấu trúc điều khiển giống như if else . Về mặt chức năng thì câu lệnh switch case cũng có chức năng tương tự như câu lệnh if else . Tuy nhiên switch case chỉ kiểm tra sẽ xem 1 biến có bằng với giá trị nào đó hay không thôi, chứ không thể kiểm tra được nhiều điều kiện như if . Vì thế nên switch chỉ làm việc đối với một số kiểu dữ liệu nguyên thủy như char , byte , shortint . Ngoài ra nó cũng hoạt động với enum , String và một vài class wraper của các kiểu dữ liệu nguyên thủy như: Character , Byte , Short , và Integer .

Cấu trúc rẽ nhánh switch  case cho phép ta lựa chọn một trong nhiều phương án có khả năng xảy ra. Nó có thể dùng dể thay thế cho cấu trúc điều khiển if else mà mình đã trình bày trong bài Câu lệnh điều kiện if – else trong Java

Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánh switch case thay thế cho cấu trúc điều khiển if else ? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.

Cú pháp :

switch (variable) {
  case condition1:
    //code
    break;
  case condition2:
    //code
    break;
  ...
  ...
  case conditionN:
    //code
    break;
  default:
    //code
    break;
}

Trong đó:

  • variable là biến cần kiểm tra. Hoặc biểu thức phải trả về kết quả là một số nguyên, chuỗi hoặc một ký tự.
  • condition1 , condition2 ,… conditionN là các điều kiện. Nếu điều kiện nào đúng (true) thì code bên trong case đó sẽ được thực thi. Hoặc là các biểu thức hằng, nguyên hoặc ký tự và chúng phải khác nhau.
  • default là block chứa đoạn code sẽ được thực thi nếu như không có case nào đúng. Đây là block không bắt buộc, trong một switch case có thể có hoặc không có block này.

2. Cách thức hoạt động switch case trong Java

Đầu tiên chúng ta sẽ xem qua một vài ví dụ về switch case trong Java

Ví dụ dưới đây sử dụng số ngày trong tuần để tính tên ngày trong tuần:

class Main {
  public static void main(String[] args) {
    int day = 4;
    switch (day) {
      case 1:
        System.out.println("Monday");
        break;
      case 2:
        System.out.println("Tuesday");
        break;
      case 3:
        System.out.println("Wednesday");
        break;
      case 4:
        System.out.println("Thursday");
        break;
      case 5:
        System.out.println("Friday");
        break;
      case 6:
        System.out.println("Saturday");
        break;
      case 7:
        System.out.println("Sunday");
        break;
    }
  }
}

Kết quả

Thursday

Ví dụ nhập vào một số nguyên từ 1 – 12 từ bàn phím và hiển thị ra tháng tương ứng với số đó

import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int thang;
        Scanner scanner = new Scanner(System.in);
         
        System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): ");
        thang = scanner.nextInt();
         
        switch (thang) {
            case 1:
                System.out.println("Tháng 1");
                break;
            case 2:
                System.out.println("Tháng 2");
                break;
            case 3:
                System.out.println("Tháng 3");
                break;
            case 4:
                System.out.println("Tháng 4");
                break;
            case 5:
                System.out.println("Tháng 5");
                break;
            case 6:
                System.out.println("Tháng 6");
                break;
            case 7:
                System.out.println("Tháng 7");
                break;
            case 8:
                System.out.println("Tháng 8");
                break;
            case 9:
                System.out.println("Tháng 9");
                break;
            case 10:
                System.out.println("Tháng 10");
                break;
            case 11:
                System.out.println("Tháng 11");
                break;
            case 12:
                System.out.println("Tháng 12");
                break;
            default:
                System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12.");
        }
 
    }
}

Kết quả

Nhập vào số nguyên (từ 1 đến 12):
6
Tháng 6

Các dòng lệnh trong những ví dụ trên sẽ chạy như sau:

  • Chương trình sẽ so sánh giá trị của biểu thức với các giá trị của các case
  • Trong các giá trị của case có giá trị nào bằng với giá trị của biểu thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trong case của giá trị đó. Đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này
  • Nếu giá trị của biểu thức không bằng với bất kỳ giá trị nào trong danh sách điều kiện case thì lệnh 0 sẽ được thực hiện nếu có thành phần default

Chú ý

  • Lệnh break là để nhảy ra khỏi lệnh switch. Nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa gặp break coi như chưa ra khỏi lệnh switch ).
  • Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp (một khả năng xảy ra của biểu thức).

3. Từ khóa break trong Java

Từ khóa break là một lệnh có thể xuất hiện trong khối lệnh case , hoặc khối lệnh default của switch. Khi bắt gặp lệnh break chương trình sẽ thoát ra khỏi switch .

Nghĩa là khi một case thỏa mãn điều kiện thì chương trình sẽ chạy vào khối lệnh trong case đó, và chạy đến cuối nó bắt gặp lệnh Break; . Ngay lập tức nó sẽ thoát khỏi Switch, tránh việc chương trình duyệt thêm các case khác sẽ tốn tài nguyên và dữ liệu.

Nếu như ta muốn gom nhóm case để cùng xử lí một đoạn code thì có thể bỏ break ở những case phía trên đi, và chỉ để lại ở case cuối cùng có điều kiện thuộc nhóm đó. Vì break có tác dụng phá vỡ một vòng lặp hay một switch case , tất cả các đoạn code nằm sau break và trong một block scope (trong cặp dấu “{}”) sẽ không được thực thi.

Ví dụ:

class Main {
    public static void main(String[] args) {
        int number = 3;
        switch(number){
          case 1:
          case 2:
          case 3:
          case 4:
            System.out.println("Nho hon 5");
            break;
          default:
            System.out.println("Lon hon 5");
            break;
        }
    }
}

Kết quả

Nho hon 5

4. Từ khóa default trong Java

Câu lệnh switch cũng có thêm một trường hợp mặc định là default . Nếu không có case nào thỏa điều kiện thì trường hợp default sẽ được thực thi. Nếu default được sử dụng làm câu lệnh cuối cùng trong khối switch thì nó không cần ngắt.

Ví dụ:

class Main {
    public static void main(String[] args) {
        int expression = 9;
        switch(expression) {
          case 2:
            System.out.println("Small Size");
            break;
          case 3:
            System.out.println("Large Size");
            break;
          // default case
          default:
            System.out.println("Unknown Size");
        }
    }
}

Kết quả

Unknown Size

5. Ví dụ cơ bản về switch case trong Java

Ví dụ 1: trường hợp có case thỏa mãn

class Main{
    public static void main(String[] args) {
        int number = 2;

        switch (number) {
            case 1:
                System.out.println("Đây là số 1");
                break;
            case 2:
                System.out.println("Đây là số 2");
                break;
            case 3:
                System.out.println("Đây là số 3");
                break;
            case 4:
                System.out.println("Đây là số 4");
                break;
            case 5:
                System.out.println("Đây là số 5");
                break;

        }
    }
}

Kết quả

Đầy là số 2

Ví dụ 2: trường hợp không có case nào thỏa mãn

class Main{
    public static void main(String[] args) {
        int number = 2;

        switch (number) {
            case 1:
                System.out.println("Đây là số 1");
                break;
            case 2:
                System.out.println("Đây là số 2");
                break;
            case 3:
                System.out.println("Đây là số 3");
                break;
            case 4:
                System.out.println("Đây là số 4");
                break;
            case 5:
                System.out.println("Đây là số 5");
                break;

            default:
                System.out.println("Đã chạy vào câu lệnh default");
                break;
        }
    }
}

Kết quả

Đã chạy vào câu lệnh default

Ví dụ 3: trường hợp Switch case không sử dụng break

class Main{
    public static void main(String[] args) {
        int number = 2;
        switch (number) {
        case 1:
          System.out.println("Đây là số 1");
        case 2:
          System.out.println("Đây là số 2");
        case 3:
          System.out.println("Đây là số 3");
        case 4:
          System.out.println("Đây là số 4");
        case 5:
          System.out.println("Đây là số 5");
        default:
          System.out.println("Đã chạy vào câu lệnh default");
        }
    }
}

Kết quả

Đầy là số 2
Đầy là số 3
Đầy là số 4
Đầy là số 5
Đã chạy vào câu lệnh default