3.1. Sử dụng cấu trúc rẽ nhánh if – else
3.1.1. Lý thuyết liên quan:
Khái niệm: Câu lệnh
if-elselà cấu trúc rẽ nhánh có điều kiện, kiểm tra một biểu thức logic trả về kiểuboolean(truehoặcfalse) để quyết định một trong hai hướng thực thi. Khi cần kiểm tra nhiều điều kiện độc lập nối tiếp, Java cung cấp cấu trúc bậc thangif-else-if ladder.Tác dụng: Định tuyến luồng xử lý của chương trình dựa vào các điều kiện phát sinh trong quá trình chạy.
Ý nghĩa: Là công cụ cơ bản để xử lý mọi bài toán phân loại dữ liệu, kiểm tra tính hợp lệ và phân luồng nghiệp vụ trong phần mềm.
3.1.2. Trình tự thực hiện:
B1: Xác định điều kiện logic cần kiểm tra bằng các toán tử quan hệ (
==,!=,>,<,>=,<=) hoặc toán tử logic (&&,||,!).B2: Viết cấu trúc
ifđơn hoặcif-elsecó bao bọc các câu lệnh bên trong khối ngoặc nhọn{}:Java
if (soDien <= 50) { tienDien = soDien * 1806; } else { tienDien = 50 * 1806 + (soDien - 50) * 1866; }B3: Mở rộng thành dạng bậc thang khi có nhiều mức điều kiện phân cấp:
Java
if (diemTB >= 8.5) { xepLoai = "Giỏi"; } else if (diemTB >= 6.5) { xepLoai = "Khá"; } else if (diemTB >= 5.0) { xepLoai = "Trung bình"; } else { xepLoai = "Yếu"; }B4: Biên dịch và kiểm thử các trường hợp biên để xác nhận chương trình chạy chính xác tất cả các nhánh.
Bài tập áp dụng
Bài tập 3.1.1: Giải phương trình bậc nhất ax + b = 0
Yêu cầu: Khai báo 2 hệ số a và b (kiểu
double).Sử dụng cấu trúc
if - elseđể biện luận và tìm nghiệm:
- Nếu a = 0 và b = 0 thì vô số nghiệm;
- Nếu a = 0 và b # 0 thì vô nghiệm;
- Nếu a # 0 thì nghiệm x = -b / a.
- In kết luận ra màn hình..
Bài tập 3.1.2: Tính cước vận chuyển hàng hóa
Yêu cầu: Nhập trọng lượng bưu kiện $w$ (tính theo kg, kiểu
double). Dùngif-else-if laddertính giá cước: w<=2kg có giá 30.000 VNĐ; từ trên 2 kg đến 10 kg tính 30.000 VNĐ cộng thêm 5.000 VNĐ cho mỗi kg vượt quá 2 kg; trên 10 kg tính 70.000 VNĐ cộng 3.000 VNĐ cho mỗi kg vượt quá 10 kg. Xuất số tiền cước định dạng chuẩn.
3.2. Sử dụng cấu trúc rẽ nhánh switch – case
3.2.1. Lý thuyết liên quan:
Khái niệm:
switch-caselà câu lệnh rẽ nhiều nhánh dựa trên phép so sánh bằng giữa một biểu thức với danh sách các giá trị hằng số cố định (case). Trong Java,switchhỗ trợ các kiểu dữ liệu nguyên thủy dạng nguyên (byte,short,int,char), kiểuenumvà kiểu đối tượng chuỗiString.Tác dụng: Thay thế chuỗi
if-elsedài khi so sánh một biến đơn lẻ với nhiều giá trị hằng cụ thể, giúp mã nguồn sáng sủa và dễ bảo trì hơn.Ý nghĩa: Trình biên dịch Java tối ưu hóa cấu trúc
switchbằng bảng nhảy (jump table), giúp tốc độ điều hướng nhanh hơn so với duyệt chuỗi lệnhif-else.
3.2.2. Trình tự thực hiện:
B1: Chuẩn bị biểu thức hoặc biến cần kiểm tra (ví dụ: một lựa chọn số nguyên hoặc một từ khóa
String).B2: Khởi tạo khối
switch (bieuThuc) { ... }.B3: Khai báo các nhánh
case giaTri:đi kèm khối xử lý và bắt buộc kết thúc mỗi case bằng câu lệnhbreak(để tránh lỗi thực thi tràn xuống case dưới):String chucVu = "TP"; double phuCap = 0; switch (chucVu) { case "TP": phuCap = 1000000; break; case "PP": phuCap = 500000; break; case "NV": phuCap = 0; break; default: System.out.println("Chức vụ không hợp lệ!"); break; }B4: Khai báo khối
default:ở cuối để đón các trường hợp giá trị không nằm trong danh sách cáccase.
Bài tập áp dụng
Bài tập 3.2.1: Tra cứu số ngày trong tháng
Yêu cầu: Cho biến số nguyên thang (từ 1 đến 12) và nam (ví dụ: 2024). Dùng switch-case gom các case tháng có 31 ngày (1, 3, 5, 7, 8, 10, 12), tháng có 30 ngày (4, 6, 9, 11) và xử lý riêng tháng 2 (năm nhuận 29 ngày, năm thường 28 ngày). In số ngày tương ứng.
Bài tập 3.2.2: Phân loại quyền truy cập người dùng
Yêu cầu: Khai báo biến String vaiTro = "EDITOR";. Sử dụng switch-case trên chuỗi để hiển thị thông báo quyền hạn tương ứng: "ADMIN" –> Toàn quyền hệ thống; "EDITOR" –> Quyền thêm và chỉnh sửa nội dung; "VIEWER" –> Quyền chỉ đọc; trường hợp khác –> Tài khoản không hợp lệ.