Chuyển tới nội dung chính

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

  1. Thân vòng lặp: Code trong dấu ngoặc nhọn sau do
  2. Điều kiện: count < 5 sau while
  3. 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 ✅

  1. 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);
  2. Đả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);
  3. 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);
  4. Sử Dụng Break Khi Cần

    do {
    // Code
    if (someCondition) {
    break;
    }
    } while (true);

7. Lỗi Thường Gặp ⚠️

  1. 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);
  2. 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);
  3. Đ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