Bài 3 (Java): Cấu trúc điều khiển

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-else là 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ểu boolean (true hoặc false) để 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 thang if-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ặc if-else có 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ố ab (kiểu double).

    • Sử dụng cấu trúc if - else để biện luận và tìm nghiệm:

  • Nếu a = 0b = 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ùng if-else-if ladder tí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-case là 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, switch hỗ trợ các kiểu dữ liệu nguyên thủy dạng nguyên (byte, short, int, char), kiểu enum và kiểu đối tượng chuỗi String.

  • Tác dụng: Thay thế chuỗi if-else dà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 switch bằ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ệnh if-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ệnh break (để 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ác case.

 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ệ.