Cấu trúc điều khiển và rẽ nhánh trong lập trình

1. Khái niệm cấu trúc điều khiển chương trình

Cấu trúc điều khiển xác định thứ tự thực thi các câu lệnh nhằm giải quyết bài toán cụ thể. Dù thuật toán có phức tạp đến đâu, vẫn có thể biểu diễn bằng ba cấu trúc cơ bản: tuần tự, rẽ nhánh và lặp. Mỗi cấu trúc chỉ có một điểm vào và một điểm ra. Tổ hợp lồng ghép của chúng tạo nên chương trình có cấu trúc.

2. Phạm vi và đặc tính của cấu trúc điều khiển

Đặc tính càng chi tiết thì phạm vi áp dụng càng hẹp. Ngược lại, đặc tính càng tổng quát thì phạm vi càng rộng — đây là nguyên tắc logic cơ bản khi phân loại cấu trúc.

3. Cấu trúc rẽ nhánh

Khi cần thực hiện hành động khác nhau tùy theo điều kiện, ta sử dụng cấu trúc rẽ nhánh. Nó cho phép chương trình đưa ra quyết định dựa trên giá trị biểu thức logic, từ đó điều hướng luồng thực thi.

4. Cấu trúc if

a) if đơn

if (điều_kiện) {
    // khối lệnh
}

Biểu thức điều kiện phải trả về kiểu boolean. Nếu đúng, thực hiện khối lệnh; nếu sai, bỏ qua.

public static void main(String[] args) {
    int x = 5;
    int y = 5;
    System.out.println("x=" + x);
    System.out.println("y=" + y);
    if (x == y) {
        System.out.println("Hai số bằng nhau!");
    }
    System.out.println("Kết thúc.");
}

Kết quả:

x=5
y=5
Hai số bằng nhau!
Kết thúc.

b) if-else

if (điều_kiện) {
    // lệnh A
} else {
    // lệnh B
}

Nếu điều kiện đúng → thực hiện lệnh A; ngược lại → thực hiện lệnh B.

public static void main(String[] args) {
    int m = 3;
    int n = 7;
    System.out.println("m=" + m);
    System.out.println("n=" + n);
    if (m == n) {
        System.out.println("Bằng nhau");
    } else {
        System.out.println("Khác nhau");
    }
    System.out.println("Hoàn tất.");
}

Kết quả:

m=3
n=7
Khác nhau
Hoàn tất.

c) if-else if

if (đk1) {
    // lệnh 1
} else if (đk2) {
    // lệnh 2
} else {
    // lệnh mặc định
}

Chương trình kiểm tra lần lượt từng điều kiện. Gặp điều kiện đầu tiên đúng → thực hiện lệnh tương ứng → thoát khỏi chuỗi if-else if.

public static void main(String[] args) {
    int p = 4;
    int q = 6;
    System.out.println("p=" + p);
    System.out.println("q=" + q);
    if (p == q) {
        System.out.println("p bằng q");
    } else if (p + 2 == q) {
        System.out.println("p + 2 = q");
    } else {
        System.out.println("Không khớp điều kiện nào");
    }
    System.out.println("Xong.");
}

Kết quả:

p=4
q=6
p + 2 = q
Xong.

5. Cấu trúc switch-case

Dùng để so sánh một biểu thức với nhiều giá trị hằng. Khi khớp, thực hiện lệnh tại case đó. Có thể dùng break để thoát hoặc để "chảy" sang case tiếp theo.

switch (biểu_thức) {
    case giá_trị_1:
        // lệnh 1
        break;
    case giá_trị_2:
        // lệnh 2
        break;
    ...
    default:
        // lệnh mặc định
}
public static void main(String[] args) {
    int day = 3;
    switch (day) {
        case 1: System.out.println("Thứ Hai"); break;
        case 2: System.out.println("Thứ Ba"); break;
        case 3: System.out.println("Thứ Tư"); break;
        case 4: System.out.println("Thứ Năm"); break;
        case 5: System.out.println("Thứ Sáu"); break;
        default: System.out.println("Cuối tuần");
    }
}

Kết quả:

Thứ Tư

Switch thường hiệu quả hơn if-else khi số nhánh lớn và giá trị rời rạc, vì nó dùng bảng nhảy (jump table). Tuy nhiên, nếu khoảng giá trị quá rộng nhưng ít case hợp lệ, bộ nhớ sẽ bị lãng phí.

Thẻ: Java control-structure if-else switch-case branching

Đăng vào ngày 11 tháng 6 lúc 17:58