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ố 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ù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.

Bài tập 3.1.3: Hãy viết phần mềm tính tiền điện sinh hoạt theo bậc thang: 

Biểu giá điện sinh hoạt 6 bậc thang — hiệu lực từ 10/05/2025

Điện sinh hoạt áp dụng hệ thống 6 bậc lũy tiến: tiêu thụ càng nhiều kWh trong tháng, các bậc tiếp theo càng đắt. Mỗi bậc tính riêng — không phải nhân toàn bộ sản lượng với giá bậc cao nhất.

BậcSản lượng (kWh/tháng)Chưa VAT (đ/kWh)Đã VAT 8% (đ/kWh)
Bậc 10 – 50 kWh1.984 đ2.143 đ
Bậc 251 – 100 kWh2.050 đ2.214 đ
Bậc 3101 – 200 kWh2.380 đ2.570 đ
Bậc 4201 – 300 kWh2.998 đ3.238 đ
Bậc 5301 – 400 kWh3.350 đ3.618 đ
Bậc 6Trên 400 kWh3.460 đ3.737 đ

Bài tập 3.1.4: Hãy viết phần mềm Giải và biện luận phương trình bậc 2. Các hệ số nhập từ bàn phím. Hướng dẫ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. Hướng dẫn

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. Hướng dẫn

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

Bài tập 3.2.3: Hãy viết phần mềm tính tiền điện sinh hoạt theo bậc thang dùng switch – case. Hướng dẫn