Bài 4: Điều Khiển rẽ nhánh Trong Java

Mục tiêu bài học:

  • Hiểu và sử dụng cấu trúc rẽ nhánh: if, if-else, switch-case
  • Nắm vững cú pháp hiện đại của Java (từ phiên bản 8 trở lên)

Phần 1: Cấu Trúc Rẽ Nhánh (Decision Making)

1.1. Câu lệnh if

Cú pháp cơ bản:

if (điều_kiện) {
    // Khối lệnh thực thi nếu điều kiện đúng
}

Tham số:

  • điều_kiện: Biểu thức boolean trả về true hoặc false
  • Khối lệnh trong {} chỉ thực thi khi điều kiện đúng

Ví dụ:

public class IfDemo {
    public static void main(String[] args) {
        int age = 20;
        
        if (age >= 18) {
            System.out.println("Bạn đã trưởng thành.");
        }
        
        System.out.println("Câu lệnh này luôn thực thi.");
    }
}

1.2. Câu lệnh if-else

Cú pháp:

if (điều_kiện) {
    // Khối lệnh thực thi nếu điều kiện đúng
} else {
    // Khối lệnh thực thi nếu điều kiện sai
}

Ví dụ:

public class IfElseDemo {
    public static void main(String[] args) {
        int number = 10;
        
        if (number % 2 == 0) {
            System.out.println(number + " là số chẵn.");
        } else {
            System.out.println(number + " là số lẻ.");
        }
    }
}

1.3. Câu lệnh if-else if-else

Cú pháp:

if (điều_kiện_1) {
    // Thực thi nếu điều_kiện_1 đúng
} else if (điều_kiện_2) {
    // Thực thi nếu điều_kiện_2 đúng
} else if (điều_kiện_3) {
    // Thực thi nếu điều_kiện_3 đúng
} else {
    // Thực thi nếu tất cả điều kiện trên sai
}

Ví dụ:

public class IfElseIfDemo {
    public static void main(String[] args) {
        int score = 85;
        char grade;
        
        if (score >= 90) {
            grade = 'A';
        } else if (score >= 80) {
            grade = 'B';
        } else if (score >= 70) {
            grade = 'C';
        } else if (score >= 60) {
            grade = 'D';
        } else {
            grade = 'F';
        }
        
        System.out.println("Điểm số: " + score);
        System.out.println("Xếp loại: " + grade);
    }
}

Phần 2: Câu Lệnh switch-case

2.1. Cú pháp switch truyền thống (Java 1.0+)

Cú pháp cơ bản:

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

Quy tắc:

  • biểu_thức phải là: byte, short, char, int, String (Java 7+), enum
  • break: Thoát khỏi switch
  • default: Tùy chọn, có thể đặt ở bất kỳ đâu trong switch

Ví dụ:

public class SwitchTraditional {
    public static void main(String[] args) {
        int dayOfWeek = 3;
        String dayName;
        
        switch (dayOfWeek) {
            case 1:
                dayName = "Thứ Hai";
                break;
            case 2:
                dayName = "Thứ Ba";
                break;
            case 3:
                dayName = "Thứ Tư";
                break;
            case 4:
                dayName = "Thứ Năm";
                break;
            case 5:
                dayName = "Thứ Sáu";
                break;
            case 6:
                dayName = "Thứ Bảy";
                break;
            case 7:
                dayName = "Chủ Nhật";
                break;
            default:
                dayName = "Ngày không hợp lệ";
        }
        
        System.out.println("Ngày thứ " + dayOfWeek + " là: " + dayName);
    }
}

2.2. Switch với String (Java 7+)

Cú pháp:

switch (stringValue) {
    case "giá_trị_1":
        // code
        break;
    case "giá_trị_2":
        // code
        break;
}

Ví dụ:

public class SwitchString {
    public static void main(String[] args) {
        String color = "RED";
        
        switch (color) {
            case "RED":
                System.out.println("Màu đỏ");
                break;
            case "GREEN":
                System.out.println("Màu xanh lá");
                break;
            case "BLUE":
                System.out.println("Màu xanh dương");
                break;
            default:
                System.out.println("Màu khác");
        }
    }
}

2.3. Switch expression với arrow (->) – Java 14+

Cú pháp mới:

String result = switch (biểu_thức) {
    case giá_trị_1 -> "Kết quả 1";
    case giá_trị_2 -> "Kết quả 2";
    default -> "Kết quả mặc định";
};

Đặc điểm:

  • Không cần break
  • Có thể trả về giá trị
  • Cú pháp ngắn gọn hơn

Ví dụ:

public class SwitchArrow {
    public static void main(String[] args) {
        int day = 3;
        
        // Switch expression với -> (không cần break)
        String dayType = switch (day) {
            case 1, 2, 3, 4, 5 -> "Ngày làm việc";
            case 6, 7 -> "Ngày nghỉ";
            default -> "Ngày không hợp lệ";
        };
        
        System.out.println("Ngày thứ " + day + " là: " + dayType);
    }
}

2.4. Switch với yield – Java 13+

Cú pháp:

int result = switch (biểu_thức) {
    case giá_trị_1 -> {
        // Khối lệnh
        int temp = ...;
        yield temp;  // Trả về giá trị
    }
    case giá_trị_2 -> {
        // Khối lệnh
        yield value;
    }
    default -> default_value;
};
public class SwitchYield {
    public static void main(String[] args) {
        String color = "RED";
        
        // Switch với yield
        int colorCode = switch (color) {
            case "RED" -> {
                System.out.println("Xử lý màu đỏ...");
                yield 1;  // Trả về giá trị
            }
            case "GREEN" -> {
                System.out.println("Xử lý màu xanh lá...");
                yield 2;
            }
            case "BLUE" -> {
                System.out.println("Xử lý màu xanh dương...");
                yield 3;
            }
            default -> {
                System.out.println("Màu không xác định");
                yield 0;
            }
        };
        
        System.out.println("Mã màu: " + colorCode);
    }
}

2.5. Pattern matching trong switch – Java 17+

Cú pháp:

String result = switch (obj) {
    case String s -> "String: " + s;
    case Integer i -> "Integer: " + i;
    case null -> "Null value";
    default -> "Unknown type";
};

Ví dụ:

public class SwitchPatternMatching {
    public static void main(String[] args) {
        Object obj = "Hello";
        
        // Pattern matching trong switch
        String result = switch (obj) {
            case String s when s.length() > 5 -> "Chuỗi dài: " + s;
            case String s -> "Chuỗi ngắn: " + s;
            case Integer i when i > 0 -> "Số dương: " + i;
            case Integer i -> "Số: " + i;
            case Double d -> "Số thực: " + d;
            case null -> "Đối tượng null";
            default -> "Kiểu không xác định: " + obj.getClass().getSimpleName();
        };
        
        System.out.println(result);
    }
}

2.6. So sánh các phiên bản switch

Phiên bản JavaTính năngVí dụ
Java 1.0+switch truyền thốngcase 1: break;
Java 7+hỗ trợ Stringcase "A": break;
Java 12+switch expression (preview)case 1 -> "One"
Java 13+yieldyield value
Java 14+switch expression chính thứccase 1 -> "One"
Java 17+pattern matchingcase String s -> "String"

Comments are closed.