Câu Lệnh switch-case (Switch Statement)

Câu lệnh switch là một lựa chọn khác so với các câu lệnh if và if-else để thực hiện các nhánh lệnh khác nhau dựa trên giá trị của một biểu thức. Nó hoạt động hiệu quả với các kiểu dữ liệu cơ bản như byte, short, char và int, cũng như các kiểu dữ liệu được liệt kê (enum) và chuỗi (String).

Hoạt động của câu lệnh switch-case

↳ Cấu lệnh switch bao gồm một biểu thức được đánh giá và một khối lệnh (switch block) chứa các nhánh case và default.

↳ Biểu thức switch được so sánh với giá trị của từng case.

↳ Nếu biểu thức switch khớp với giá trị của một case, các lệnh sau case đó sẽ được thực thi cho đến khi gặp lệnh break.

↳ Lệnh break sẽ thoát khỏi khối switch và điều khiển chương trình chuyển đến lệnh tiếp theo sau khối switch.

Cách hoạt động của câu lệnh rẽ nhánh switch trong Java - minh họa
Ảnh mô tả cách hoạt động của câu lệnh rẽ nhánh switch.

Cú pháp của câu lệnh switch-case

Cú pháp

switch (biểu_thức) {
    case giá_trị1:
        // Khối lệnh được thực thi nếu biểu_thức == giá_trị1
        break;
    case giá_trị2:
        // Khối lệnh được thực thi nếu biểu_thức == giá_trị1
        break;
    // Các case khác...
    default:
        // Khối lệnh được thực thi nếu không có case nào khớp
        break;
}

Giải thích các thành phần:

↳ biểu_thức: Biểu thức được đánh giá để so sánh với các giá trị trong các nhánh case.

↳ giá_trị1, giá_trị2, ...: Các giá trị so sánh trong các nhánh case.

↳ Khối lệnh: Các lệnh được thực thi nếu giá trị biểu thức khớp với giá trị case tương ứng.

↳ break: Lệnh để thoát khỏi nhánh case hiện tại.

↳ default (lệnh_mặc_định): Lệnh được thực thi nếu không có giá trị case nào khớp với giá trị biểu thức.

Ví dụ: Main.java

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

        switch (dayOfWeek) {
            case 1:
                System.out.println("Chủ nhật");
                break;
            case 2:
                System.out.println("Thứ hai");
                break;
            case 3:
                System.out.println("Thứ ba");
                break;
            case 4:
                System.out.println("Thứ tư");
                break;
            case 5:
                System.out.println("Thứ năm");
                break;
            case 6:
                System.out.println("Thứ sáu");
                break;
            case 7:
                System.out.println("Thứ bảy");
                break;
            default:
                System.out.println("Ngày không hợp lệ");
                break;
        }
    }
}

Kết quả của chương trình là:

Thứ ba

Lưu ý:

↳ Mỗi nhánh case phải có lệnh break để tránh thực thi các lệnh của các nhánh case tiếp theo.

↳ Lệnh default không bắt buộc nhưng nên có để xử lý trường hợp không có giá trị case nào khớp.

Sử dụng nhiều giá trị trong một nhánh case

Bạn có thể sử dụng nhiều giá trị trong một nhánh case bằng cách phân tách chúng bằng dấu phẩy.

Ví dụ: Main.java

public class Main {
    public static void main(String[] args) {
        int month = 2;
        int year = 2000;
        int numDays = 0;
        switch (month) {
            case 1, 3, 5, 7, 8, 10, 12:
                numDays = 31;
                break;
            case 4, 6, 9, 11:
                numDays = 30;
                break;
            case 2:
                if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Tháng không hợp lệ.");
                break;
        }
        System.out.println("Tháng " +month +" có " +numDays+" ngày");
    }
}

Kết quả của chương trình là:

Tháng 2 có 29 ngày

Sử dụng String trong switch (Java SE 7 trở lên)

Kể từ Java SE 7, bạn có thể sử dụng chuỗi (String) trong biểu thức switch. Giá trị của biểu thức String sẽ được so sánh với các giá trị trong các nhánh case (không phân biệt hoa/thường).

Ví dụ: Main.java

public class Main {
    public static void main(String[] args) {
        String month = "THÁNG 8";// THÁNG 8 được viết hoa
        int monthNumber = 0;

        switch (month.toLowerCase()) {
            case "tháng 1":
                monthNumber = 1;
                break;
            case "tháng 2":
                monthNumber = 2;
                break;
            case "tháng 3":
                monthNumber = 3;
                break;
            case "tháng 4":
                monthNumber = 4;
                break;
            case "tháng 5":
                monthNumber = 5;
                break;
            case "tháng 6":
                monthNumber = 6;
                break;
            case "tháng 7":
                monthNumber = 7;
                break;
            case "tháng 8":// tháng 8 được viết thường
                monthNumber = 8;
                break;
            case "tháng 9":
                monthNumber = 9;
                break;
            case "tháng 10":
                monthNumber = 10;
                break;
            case "tháng 11":
                monthNumber = 11;
                break;
            case "tháng 12":
                monthNumber = 12;
                break;
            default:
                monthNumber = 0;
                break;
        }

        if (monthNumber == 0) {
            System.out.println("Tháng không hợp lệ.");
        } else {
            System.out.println("Số tháng: " + monthNumber);
        }
    }
}

Kết quả của chương trình là:

Số tháng: 8

Lưu ý quan trọng:

↳ Hãy chắc chắn rằng biểu thức trong câu lệnh switch không phải là null để tránh ngoại lệ NullPointerException.

↳ Khi sử dụng String trong câu lệnh switch, nên chuyển đổi chuỗi thành chữ thường (hoặc chữ hoa) để đảm bảo việc so sánh không phân biệt chữ hoa/chữ thường.

Câu Nói Truyền Cảm Hứng

“Không ai sinh ra đã giỏi. Mọi thành công đều bắt đầu từ một bước nhỏ.” – Lao Tzu

Không Gian Tích Cực

“Chúc bạn một ngày mới đầy năng lượng và sự sáng tạo, luôn tiến về phía trước.”