CodeGym /Các khóa học /JAVA 25 SELF /Switch cổ điển: cú pháp, ví dụ

Switch cổ điển: cú pháp, ví dụ

JAVA 25 SELF
Mức độ , Bài học
Có sẵn

1. Giới thiệu

Hãy hình dung: bạn đang viết một chương trình cho quán cà phê. Người dùng có thể chọn đồ uống, và bạn cần phản hồi lựa chọn đó. Dĩ nhiên có thể dùng cả đống if-else if-else, nhưng nhìn không đẹp:

if (choice == 1) 
{
    System.out.println("Bạn đã chọn espresso.");
} 
else if (choice == 2) 
{
    System.out.println("Bạn đã chọn cappuccino.");
} 
else if (choice == 3) 
{
    System.out.println("Bạn đã chọn latte.");
} 
else 
{
    System.out.println("Không có đồ uống như vậy.");
}

Công nhận là cồng kềnh. Nếu có 10 hay 20 lựa chọn thì sao? Khi đó toán tử switch sẽ giúp bạn triển khai lựa chọn theo giá trị của biến một cách gọn gàng và rõ ràng.

Cú pháp switch cổ điển

Cú pháp switch trong Java như sau:


switch (vyrazhenie) 
{
    case znachenie1:
        // hành động khi biểu thức == giá trị 1
        break;
    case znachenie2:
        // hành động khi biểu thức == giá trị 2
        break;
    ...
    default:
        // hành động khi không khớp với case nào
        break;
}
Cú pháp của toán tử switch trong Java

Các thành phần chính:

  • switch (biểu thức) — biểu thức mà kết quả của nó sẽ được so sánh với từng case.
  • case giá trị: — phương án để so sánh với biểu thức.
  • break; — kết thúc việc thực thi khối switch (nếu không — sẽ “rơi xuyên” sang case tiếp theo).
  • default: — chạy khi không khớp với bất kỳ case nào.

2. Ví dụ sử dụng switch

Ví dụ 1: Kinh điển — chọn đồ uống

Hãy triển khai menu cho quán cà phê:

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Hãy chọn đồ uống:");
        System.out.println("1 - Espresso");
        System.out.println("2 - Cappuccino");
        System.out.println("3 - Latte");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("Bạn đã chọn espresso.");
                break;
            case 2:
                System.out.println("Bạn đã chọn cappuccino.");
                break;
            case 3:
                System.out.println("Bạn đã chọn latte.");
                break;
            default:
                System.out.println("Không có đồ uống như vậy.");
                break;
        }
    }
}

Điều gì diễn ra:

  • Người dùng nhập số của đồ uống.
  • Giá trị biến choice được so sánh với từng case.
  • Nếu trùng khớp — khối tương ứng được thực thi, sau đó break kết thúc switch.
  • Nếu không trùng khớp với bất kỳ cái nào — chạy default.

Ví dụ 2: Chuyển theo chuỗi

Không có nhiều kiểu có thể dùng trong switch, nhưng chuỗi — dùng được! Điều này rất tiện cho menu lệnh:

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Nhập lệnh (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("Khởi chạy chương trình!");
                break;
            case "stop":
                System.out.println("Dừng chương trình.");
                break;
            case "pause":
                System.out.println("Tạm dừng.");
                break;
            default:
                System.out.println("Lệnh không xác định.");
                break;
        }
    }
}

Lưu ý: so sánh chuỗi trong switch — phân biệt chữ hoa/thường! "Start""start" — là hai chuỗi khác nhau.

3. Những kiểu nào được switch cổ điển hỗ trợ?

Với switch cổ điển chỉ có thể dùng một số kiểu nhất định:

  • Kiểu nguyên thủy số nguyên: byte, short, char, int
  • Enum: enum (sẽ bàn ở bài giảng tiếp theo)
  • Chuỗi: String — so sánh có phân biệt hoa/thường

Không thể dùng: boolean, float, double, mảng, các đối tượng lớp tùy ý (trừ enumString).

Ví dụ với char

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("Xuất sắc!");
        break;
    case 'B':
        System.out.println("Tốt.");
        break;
    case 'C':
        System.out.println("Đạt.");
        break;
    default:
        System.out.println("Hãy thử lại.");
        break;
}

4. Tính bắt buộc của break: điều gì xảy ra nếu quên?

Lỗi phổ biến nhất của người mới — quên break;. Hãy xem điều gì xảy ra:

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("Thứ Hai");
        break;
    case 2:
        System.out.println("Thứ Ba");
    case 3:
        System.out.println("Thứ Tư");
        break;
    default:
        System.out.println("Ngày không xác định");
        break;
}

Kết quả:

Thứ Ba
Thứ Tư

Tại sao? Vì sau case 2 không có break, nên việc thực thi “rơi xuyên” sang case tiếp theo (điều này gọi là fall-through). Đôi khi hữu ích, nhưng thường là lỗi.

5. Nhóm case: khi nhiều lựa chọn có cùng hành vi

Nếu nhiều giá trị cần cùng một hành vi, có thể liệt kê chúng liên tiếp:

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("Mùa đông");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("Mùa xuân");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("Mùa hè");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("Mùa thu");
        break;
    default:
        System.out.println("Tháng không xác định");
        break;
}

Ở đây: nếu month12, 1 hoặc 2, chương trình sẽ in "Mùa đông".

6. So sánh: switchif-else

Kịch bản if-else switch
Nhiều lựa chọn Chuỗi dài, khó đọc hơn Ngắn gọn, mọi lựa chọn thấy ngay
So sánh theo khoảng Có thể dùng (if (x > 5 && x < 10)) Không thể, chỉ giá trị cụ thể
Kiểu được hỗ trợ Bất kỳ Chỉ một số kiểu nhất định (xem ở trên)
Bẫy với break Không Có, bắt buộc phải chú ý break

7. Những lỗi thường gặp khi làm việc với switch

Lỗi số 1: quên break
Nguyên nhân gây bug phổ biến nhất: quên break — và mã chạy sang case không như mong đợi.

Lỗi số 2: kiểu không được hỗ trợ
Cố dùng double, float hoặc boolean — trình biên dịch sẽ báo “không được”.

Lỗi số 3: chuỗi khác nhau về chữ hoa/thường
Người dùng nhập "Start", còn bạn chờ "start"switch sẽ không khớp. Tốt nhất hãy đưa chuỗi về cùng một kiểu chữ hoa/thường trước:

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

Lỗi số 4: dùng biến trong case thay vì hằng số
Chỉ cho phép hằng số trong case. Dùng biến sẽ gây lỗi biên dịch.

Lỗi số 5: trùng lặp case
Hai giá trị case giống nhau — trình biên dịch sẽ không chấp nhận.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION