Skip to main content

Vòng Lặp While trong Java 🔄

🎯 Mục tiêu: Học cách sử dụng vòng lặp while để thực hiện các tác vụ lặp lại dựa trên điều kiện trong Java.

Giới thiệu 📝

Vòng lặp while là một cấu trúc điều khiển trong Java, được sử dụng khi bạn không biết chính xác số lần lặp cần thực hiện, nhưng biết điều kiện để tiếp tục lặp. Nó giúp code của bạn linh hoạt và thích ứng với các tình huống khác nhau.

💡 Fun Fact: Vòng lặp while được sử dụng rộng rãi trong các ứng dụng tương tác với người dùng, như menu chọn lựa hoặc đọc dữ liệu từ bàn phím.

1. Cú Pháp Cơ Bản ⚡

Vòng Lặp While Đơn Giản

int count = 0;
while (count < 5) {
System.out.println("Lần lặp thứ " + count);
count++;
}

Các Thành Phần

  1. Điều kiện: count < 5 - Kiểm tra điều kiện trước mỗi lần lặp
  2. Thân vòng lặp: Code trong dấu ngoặc nhọn
  3. Cập nhật điều kiện: count++ - Cập nhật giá trị sau mỗi lần lặp

2. Các Biến Thể Của Vòng Lặp While 🔄

Vòng Lặp While Với Nhiều Điều Kiện

int x = 0;
int y = 10;
while (x < y && x < 5) {
System.out.println("x = " + x + ", y = " + y);
x++;
y--;
}

Vòng Lặp While Vô Hạn

while (true) {
// Code vô hạn
break; // Thoát vòng lặp
}

Vòng Lặp While Với Biến Boolean

boolean isRunning = true;
while (isRunning) {
// Code
isRunning = false; // Dừng vòng lặp
}

3. Vòng Lặp While Với Mảng 📦

Duyệt Mảng Một Chiều

int[] numbers = {1, 2, 3, 4, 5};
int index = 0;
while (index < numbers.length) {
System.out.println(numbers[index]);
index++;
}

Duyệt Mảng Nhiều Chiều

int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

int i = 0;
while (i < matrix.length) {
int j = 0;
while (j < matrix[i].length) {
System.out.print(matrix[i][j] + " ");
j++;
}
System.out.println();
i++;
}

4. Vòng Lặp While Với Collections 🎯

Duyệt ArrayList

ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
names.add("Bob");

int index = 0;
while (index < names.size()) {
System.out.println(names.get(index));
index++;
}

Duyệt Với Iterator

ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
names.add("Bob");

Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}

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;

System.out.println("Nhập các số (0 để kết thúc):");
while (true) {
int number = scanner.nextInt();
if (number == 0) {
break;
}
sum += number;
}

System.out.println("Tổng các số đã nhập: " + sum);
scanner.close();
}
}

Tìm Ước Số Chung Lớn Nhất

public class GCDCalculator {
public static void main(String[] args) {
int a = 48;
int b = 18;

while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}

System.out.println("Ước số chung lớn nhất: " + a);
}
}

Xử Lý Menu

public class MenuHandler {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean running = true;

while (running) {
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: ");

int 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:
running = false;
break;
default:
System.out.println("Lựa chọn không hợp lệ");
}
}

scanner.close();
}
}

Quản Lý Kết Nối Mạng

public class NetworkManager {
public static void main(String[] args) {
boolean isConnected = false;
int retryCount = 0;
int maxRetries = 3;

while (!isConnected && retryCount < maxRetries) {
try {
System.out.println("Đang thử kết nối...");
// Giả lập kết nối mạng
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);
}
}

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;

while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println("Dòng " + (++lineCount) + ": " + line);
}

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. Đảm Bảo Điều Kiện Dừng

    // Không nên
    while (true) {
    // Code không có điều kiện dừng
    }

    // Nên
    boolean shouldContinue = true;
    while (shouldContinue) {
    // Code
    shouldContinue = false; // Điều kiện dừng
    }
  2. Cập Nhật Biến Điều Kiện

    // Không nên
    int count = 0;
    while (count < 5) {
    System.out.println(count);
    // Quên tăng count
    }

    // Nên
    int count = 0;
    while (count < 5) {
    System.out.println(count);
    count++;
    }
  3. Sử Dụng Break Khi Cần

    while (true) {
    // Code
    if (someCondition) {
    break; // Thoát vòng lặp
    }
    }
  4. Tránh Vòng Lặp Vô Hạn

    // Không nên
    while (true) {
    // Code không có điều kiện dừng
    }

    // Nên
    int maxAttempts = 100;
    int attempts = 0;
    while (attempts < maxAttempts) {
    // Code
    attempts++;
    }

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

  1. Vòng Lặp Vô Hạn

    // Lỗi
    while (true) {
    System.out.println("Vô hạn");
    // Không có điều kiện dừng
    }

    // Đúng
    boolean running = true;
    while (running) {
    System.out.println("Chạy");
    running = false; // Điều kiện dừng
    }
  2. Quên Cập Nhật Biến Điều Kiện

    // Lỗi
    int count = 0;
    while (count < 5) {
    System.out.println(count);
    // Quên tăng count
    }

    // Đúng
    int count = 0;
    while (count < 5) {
    System.out.println(count);
    count++;
    }
  3. Điều Kiện Không Bao Giờ Thỏa Mãn

    // Lỗi
    int count = 5;
    while (count < 5) { // count đã là 5
    System.out.println(count);
    count++;
    }

    // Đúng
    int count = 0;
    while (count < 5) {
    System.out.println(count);
    count++;
    }

💡 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 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ề vòng lặp do-while
  • Học cách sử dụng break và continue
  • Thực hành với các ví dụ thực tế
  • Tìm hiểu về vòng lặp for