0

[Java Backend Zero to Hello] BÀI 1.3: CẤU TRÚC ĐIỀU KHIỂN

Java Backend Zero to Hello

📚 Bài viết thuộc series Java Backend Zero to Hello 📌 Phần: Phase 1: Java Core Cơ Bản | Bài 5/86


BÀI 1.3: CẤU TRÚC ĐIỀU KHIỂN

Mục tiêu

  • Sử dụng if/else, switch để rẽ nhánh chương trình
  • Sử dụng vòng lặp for, while, do-while
  • Áp dụng break, continue
  • Thực hành các bài toán thường gặp

1. CÂU LỆNH IF / ELSE

1.1 If đơn

int age = 20;
if (age >= 18) {
    System.out.println("Bạn đã trưởng thành");
}

1.2 If - else

int age = 15;
if (age >= 18) {
    System.out.println("Đủ tuổi lái xe");
} else {
    System.out.println("Chưa đủ tuổi");
}

1.3 If - else if - else

int score = 75;
if (score >= 90) {
    System.out.println("Xuất sắc");
} else if (score >= 80) {
    System.out.println("Giỏi");
} else if (score >= 70) {
    System.out.println("Khá");
} else if (score >= 60) {
    System.out.println("Trung bình");
} else {
    System.out.println("Yếu");
}

1.4 If lồng nhau

if (age >= 18) {
    if (hasLicense) {
        System.out.println("Được lái xe");
    } else {
        System.out.println("Cần bằng lái");
    }
}

2. CÂU LỆNH SWITCH

2.1 Switch truyền thống

int day = 3;
String dayName;

switch (day) {
    case 1:
        dayName = "Thứ 2";
        break;
    case 2:
        dayName = "Thứ 3";
        break;
    case 3:
        dayName = "Thứ 4";
        break;
    case 4:
        dayName = "Thứ 5";
        break;
    case 5:
        dayName = "Thứ 6";
        break;
    case 6:
        dayName = "Thứ 7";
        break;
    case 7:
        dayName = "Chủ nhật";
        break;
    default:
        dayName = "Không hợp lệ";
}
System.out.println(dayName);  // Thứ 4

⚠️ Lưu ý: Luôn có break ở mỗi case, nếu không sẽ rơi xuống case tiếp theo (fall-through).

2.2 Switch với nhiều case gộp

switch (day) {
    case 1: case 2: case 3: case 4: case 5:
        System.out.println("Ngày làm việc");
        break;
    case 6: case 7:
        System.out.println("Ngày nghỉ");
        break;
}

2.3 Switch expression (Java 14+)

String dayName = switch (day) {
    case 1 -> "Thứ 2";
    case 2 -> "Thứ 3";
    case 3 -> "Thứ 4";
    case 4 -> "Thứ 5";
    case 5 -> "Thứ 6";
    case 6 -> "Thứ 7";
    case 7 -> "Chủ nhật";
    default -> "Không hợp lệ";
};

2.4 Switch với String (Java 7+)

String role = "admin";
switch (role) {
    case "admin":
        System.out.println("Quản trị viên");
        break;
    case "user":
        System.out.println("Người dùng");
        break;
    default:
        System.out.println("Khách");
}

3. VÒNG LẶP FOR

3.1 For cơ bản

for (int i = 0; i < 5; i++) {
    System.out.println("Lần lặp thứ " + i);
}
// Output: 0, 1, 2, 3, 4

3.2 For lùi

for (int i = 10; i >= 1; i--) {
    System.out.println(i);
}

3.3 For với bước nhảy tùy chỉnh

for (int i = 0; i <= 20; i += 2) {
    System.out.println(i);  // 0, 2, 4, 6, ..., 20
}

3.4 For lồng nhau

// In bảng cửu chương
for (int i = 2; i <= 9; i++) {
    for (int j = 1; j <= 10; j++) {
        System.out.printf("%d x %d = %d%n", i, j, i * j);
    }
    System.out.println("---");
}

3.5 For-each (duyệt mảng/collection)

int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println(num);
}

4. VÒNG LẶP WHILE

int count = 0;
while (count < 5) {
    System.out.println("Count: " + count);
    count++;
}

Dùng khi không biết trước số lần lặp.

Ví dụ: Đoán số

import java.util.Scanner;
import java.util.Random;

public class GuessNumber {
    public static void main(String[] args) {
        Random rand = new Random();
        int target = rand.nextInt(100) + 1;  // 1-100
        Scanner sc = new Scanner(System.in);
        int guess = 0;

        while (guess != target) {
            System.out.print("Đoán số (1-100): ");
            guess = sc.nextInt();
            if (guess < target) {
                System.out.println("Lớn hơn!");
            } else if (guess > target) {
                System.out.println("Nhỏ hơn!");
            } else {
                System.out.println("Chính xác!");
            }
        }
        sc.close();
    }
}

5. VÒNG LẶP DO-WHILE

Thực hiện ít nhất 1 lần trước khi kiểm tra điều kiện.

int choice;
Scanner sc = new Scanner(System.in);

do {
    System.out.println("=== MENU ===");
    System.out.println("1. Thêm");
    System.out.println("2. Sửa");
    System.out.println("0. Thoát");
    System.out.print("Chọn: ");
    choice = sc.nextInt();
} while (choice != 0);

System.out.println("Kết thúc!");

6. BREAK VÀ CONTINUE

6.1 Break - Thoát khỏi vòng lặp

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;  // Thoát vòng lặp khi i = 5
    }
    System.out.println(i);  // 0, 1, 2, 3, 4
}

6.2 Continue - Bỏ qua lần lặp hiện tại

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;  // Bỏ qua số chẵn
    }
    System.out.println(i);  // 1, 3, 5, 7, 9
}

6.3 Labeled break/continue (thoát khỏi vòng lặp lồng nhau)

outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) {
            break outer;  // Thoát cả 2 vòng lặp
        }
        System.out.println(i + "," + j);
    }
}

7. SO SÁNH CÁC VÒNG LẶP

Vòng lặp Khi nào dùng
for Biết trước số lần lặp
while Không biết trước số lần lặp
do-while Cần thực hiện ít nhất 1 lần
for-each Duyệt mảng/collection

8. BÀI TẬP THỰC HÀNH

Bài 1: Kiểm tra số nguyên tố

Nhập số n, kiểm tra n có phải số nguyên tố không.

public static boolean isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) return false;
    }
    return true;
}

Bài 2: Tính giai thừa

n! = 1 * 2 * 3 * ... * n

Bài 3: Dãy Fibonacci

In n số Fibonacci đầu tiên: 0, 1, 1, 2, 3, 5, 8, 13, ...

Bài 4: In tam giác sao

*
**
***
****
*****

Bài 5: Tìm ước chung lớn nhất (GCD)

Dùng thuật toán Euclid.

Bài 6: Menu quản lý sinh viên

1. Thêm sinh viên
2. Hiển thị danh sách
3. Tìm sinh viên theo tên
4. Xóa sinh viên
0. Thoát

9. TÓM TẮT

Cấu trúc Cú pháp Mục đích
if/else if (điều kiện) { ... } Rẽ nhánh
switch switch (biến) { case ... } Nhiều lựa chọn
for for (init; cond; update) Lặp biết trước số lần
while while (điều kiện) Lặp không biết trước
do-while do { ... } while (cond) Lặp ít nhất 1 lần
break break; Thoát vòng lặp
continue continue; Bỏ qua lần lặp

Bài tiếp theo: 1.4 Mảng & String


🧭 Điều Hướng Series

⬅️ Bài trước: BÀI 1.2: BIẾN, KIỂU DỮ LIỆU, TOÁN TỬ

📋 Lộ trình tổng quan: Xem Toàn Bộ Series

➡️ Bài tiếp theo: BÀI 1.4: MẢNG & STRING


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.