Vòng Lặp Do-While trong Java 🔄
🎯 Mục tiêu: Học cách sử dụng vòng lặp do-while để thực hiện các tác vụ lặp lại ít nhất một lần trong Java.
Giới thiệu 📝
Vòng lặp do-while là một cấu trúc điều khiển đặc biệt trong Java, khác với vòng lặp while thông thường ở chỗ điều kiện được kiểm tra sau khi thực hiện thân vòng lặp. Điều này đảm bảo thân vòng lặp được thực hiện ít nhất một lần.
💡 Fun Fact: Vòng lặp do-while thường được sử dụng trong các tình huống cần kiểm tra điều kiện sau khi thực hiện một tác vụ, như xác thực người dùng hoặc xử lý menu.
1. Cú Pháp Cơ Bản ⚡
Vòng Lặp Do-While Đơn Giản
int count = 0;
do {
System.out.println("Lần lặp thứ " + count);
count++;
} while (count < 5);
Các Thành Phần
- Thân vòng lặp: Code trong dấu ngoặc nhọn sau
do
- Điều kiện:
count < 5
sauwhile
- Cập nhật điều kiện:
count++
2. Các Biến Thể Của Vòng Lặp Do-While 🔄
Vòng Lặp Do-While Với Nhiều Điều Kiện
int x = 0;
int y = 10;
do {
System.out.println("x = " + x + ", y = " + y);
x++;
y--;
} while (x < y && x < 5);
Vòng Lặp Do-While Vô Hạn
do {
// Code vô hạn
break; // Thoát vòng lặp
} while (true);
Vòng Lặp Do-While Với Biến Boolean
boolean isRunning = true;
do {
// Code
isRunning = false; // Dừng vòng lặp
} while (isRunning);
3. Vòng Lặp Do-While Với Mảng 📦
Duyệt Mảng Một Chiều
int[] numbers = {1, 2, 3, 4, 5};
int index = 0;
do {
System.out.println(numbers[index]);
index++;
} while (index < numbers.length);
Duyệt Mảng Nhiều Chiều
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int i = 0;
do {
int j = 0;
do {
System.out.print(matrix[i][j] + " ");
j++;
} while (j < matrix[i].length);
System.out.println();
i++;
} while (i < matrix.length);
4. Vòng Lặp Do-While Với Collections 🎯
Duyệt ArrayList
ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
names.add("Bob");
int index = 0;
do {
System.out.println(names.get(index));
index++;
} while (index < names.size());
Duyệt Với Iterator
ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
names.add("Bob");
Iterator<String> iterator = names.iterator();
do {
String name = iterator.next();
System.out.println(name);
} while (iterator.hasNext());
5. Ví Dụ Thực Tế 🚀
Đọc Dữ Liệu Từ Bàn Phím
public class InputReader {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int number;
System.out.println("Nhập các số (0 để kết thúc):");
do {
number = scanner.nextInt();
if (number != 0) {
sum += number;
}
} while (number != 0);
System.out.println("Tổng các số đã nhập: " + sum);
scanner.close();
}
}
Xử Lý Menu
public class MenuHandler {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("\nMenu:");
System.out.println("1. Thêm sản phẩm");
System.out.println("2. Xem danh sách");
System.out.println("3. Thoát");
System.out.print("Chọn: ");
choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("Thêm sản phẩm");
break;
case 2:
System.out.println("Xem danh sách");
break;
case 3:
System.out.println("Tạm biệt!");
break;
default:
System.out.println("Lựa chọn không hợp lệ");
}
} while (choice != 3);
scanner.close();
}
}
Kiểm Tra Mật Khẩu
public class PasswordChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String password;
boolean isValid;
do {
System.out.print("Nhập mật khẩu (ít nhất 8 ký tự): ");
password = scanner.nextLine();
isValid = password.length() >= 8;
if (!isValid) {
System.out.println("Mật khẩu không hợp lệ!");
}
} while (!isValid);
System.out.println("Mật khẩu hợp lệ!");
scanner.close();
}
}
Quản Lý Kết Nối Cơ Sở Dữ Liệu
public class DatabaseManager {
public static void main(String[] args) {
boolean isConnected = false;
int retryCount = 0;
int maxRetries = 3;
do {
try {
System.out.println("Đang thử kết nối đến cơ sở dữ liệu...");
// Giả lập kết nối
Thread.sleep(1000);
isConnected = true;
System.out.println("Kết nối thành công!");
} catch (Exception e) {
retryCount++;
System.out.println("Lỗi kết nối. Lần thử " + retryCount);
}
} while (!isConnected && retryCount < maxRetries);
if (!isConnected) {
System.out.println("Không thể kết nối sau " + maxRetries + " lần thử");
}
}
}
Xử Lý File
public class FileProcessor {
public static void main(String[] args) {
try {
File file = new File("data.txt");
Scanner scanner = new Scanner(file);
int lineCount = 0;
do {
String line = scanner.nextLine();
System.out.println("Dòng " + (++lineCount) + ": " + line);
} while (scanner.hasNextLine());
scanner.close();
System.out.println("Tổng số dòng: " + lineCount);
} catch (FileNotFoundException e) {
System.out.println("Không tìm thấy file!");
}
}
}
6. Best Practices ✅
-
Sử Dụng Do-While Khi Cần Thực Hiện Ít Nhất Một Lần
// Không nên
while (true) {
// Code
if (condition) break;
}
// Nên
do {
// Code
} while (!condition); -
Đảm Bảo Điều Kiện Dừng
// Không nên
do {
// Code không có điều kiện dừng
} while (true);
// Nên
boolean shouldContinue = true;
do {
// Code
shouldContinue = false;
} while (shouldContinue); -
Cập Nhật Biến Điều Kiện
// Không nên
int count = 0;
do {
System.out.println(count);
// Quên tăng count
} while (count < 5);
// Nên
int count = 0;
do {
System.out.println(count);
count++;
} while (count < 5); -
Sử Dụng Break Khi Cần
do {
// Code
if (someCondition) {
break;
}
} while (true);
7. Lỗi Thường Gặp ⚠️
-
Vòng Lặp Vô Hạn
// Lỗi
do {
System.out.println("Vô hạn");
// Không có điều kiện dừng
} while (true);
// Đúng
boolean running = true;
do {
System.out.println("Chạy");
running = false; // Điều kiện dừng
} while (running); -
Quên Cập Nhật Biến Điều Kiện
// Lỗi
int count = 0;
do {
System.out.println(count);
// Quên tăng count
} while (count < 5);
// Đúng
int count = 0;
do {
System.out.println(count);
count++;
} while (count < 5); -
Điều Kiện Không Bao Giờ Thỏa Mãn
// Lỗi
int count = 5;
do {
System.out.println(count);
count++;
} while (count < 5); // count đã là 5
// Đúng
int count = 0;
do {
System.out.println(count);
count++;
} while (count < 5);
💡 Lời khuyên: Hãy thực hành với các ví dụ thực tế để hiểu rõ hơn về cách sử dụng vòng lặp do-while trong các tình huống khác nhau.
Tiếp Theo 🎯
Trong các bài học tiếp theo, chúng ta sẽ:
- Tìm hiểu về break và continue
- Học cách sử dụng vòng lặp for
- Thực hành với các ví dụ thực tế
- Tìm hiểu về vòng lặp while