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ềtruehoặcfalse- 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ứcphải là: byte, short, char, int, String (Java 7+), enumbreak: Thoát khỏi switchdefault: 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 Java | Tính năng | Ví dụ |
|---|---|---|
| Java 1.0+ | switch truyền thống | case 1: break; |
| Java 7+ | hỗ trợ String | case "A": break; |
| Java 12+ | switch expression (preview) | case 1 -> "One" |
| Java 13+ | yield | yield value |
| Java 14+ | switch expression chính thức | case 1 -> "One" |
| Java 17+ | pattern matching | case String s -> "String" |
