[Java Backend Zero to Hello] BÀI 1.3: CẤU TRÚC ĐIỀU KHIỂN
📚 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