Câu lệnh lặp while là một trong những cấu trúc điều khiển quan trọng trong lập trình, cho phép thực hiện một khối lệnh nhiều lần khi một điều kiện nhất định vẫn còn đúng. Khác với câu lệnh lặp for, vòng lặp while thường được sử dụng khi số lần lặp không xác định trước mà chỉ phụ thuộc vào điều kiện. Điều này làm cho câu lệnh while trở thành một công cụ mạnh mẽ khi lập trình viên cần kiểm tra và thực hiện một khối lệnh cho đến khi điều kiện không còn đúng nữa.
Cấu trúc cơ bản của câu lệnh lặp while trong hầu hết các ngôn ngữ lập trình là:
while (điều_kiện) {
// Các câu lệnh cần thực thi
}
Trong đó, điều_kiện là một biểu thức logic có giá trị đúng (true) hoặc sai (false). Vòng lặp sẽ tiếp tục thực hiện các câu lệnh trong khối lệnh {} cho đến khi điều kiện trở thành sai. Khi điều kiện sai, vòng lặp kết thúc và chương trình tiếp tục thực thi các câu lệnh tiếp theo ngoài vòng lặp. Cần lưu ý rằng, điều kiện trong câu lệnh while sẽ được kiểm tra ngay từ đầu mỗi lần lặp, và nếu điều kiện sai ngay từ lần đầu tiên, vòng lặp sẽ không bao giờ được thực thi.
Ví dụ đơn giản về câu lệnh lặp while trong ngôn ngữ Java có thể như sau:
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
Trong ví dụ trên, vòng lặp bắt đầu với biến i có giá trị là 0. Điều kiện của vòng lặp là i < 5. Mỗi lần lặp, giá trị của i sẽ được in ra màn hình, sau đó i sẽ được tăng thêm 1. Quá trình này tiếp tục cho đến khi giá trị của i không còn nhỏ hơn 5. Kết quả của chương trình này sẽ là các số từ 0 đến 4 được in ra màn hình.
Vòng lặp while có thể được sử dụng trong các tình huống khi ta không biết trước số lần lặp, nhưng điều kiện dừng của vòng lặp là rõ ràng. Ví dụ, nếu muốn yêu cầu người dùng nhập một giá trị cho đến khi họ nhập một giá trị hợp lệ, ta có thể sử dụng câu lệnh while:
Scanner scanner = new Scanner(System.in);
int number = -1;
while (number < 0) {
System.out.print("Nhập một số dương: ");
number = scanner.nextInt();
}
System.out.println("Số bạn nhập là: " + number);
Trong ví dụ trên, vòng lặp while sẽ tiếp tục yêu cầu người dùng nhập một số cho đến khi giá trị nhập vào là một số dương. Điều kiện của vòng lặp là number < 0, có nghĩa là vòng lặp sẽ lặp lại cho đến khi người dùng nhập một số không âm.
Một điểm quan trọng cần lưu ý khi sử dụng câu lệnh while là đảm bảo rằng điều kiện của vòng lặp sẽ thay đổi trong mỗi lần lặp để tránh vòng lặp vô hạn. Nếu điều kiện không thay đổi, vòng lặp sẽ không bao giờ dừng lại và chương trình sẽ bị treo. Chẳng hạn, nếu ta quên thay đổi giá trị của biến điều khiển trong vòng lặp, vòng lặp sẽ tiếp tục vô hạn, gây ra lỗi hoặc làm chương trình bị treo.
Một ví dụ khác về vòng lặp while là khi thực hiện các phép toán liên quan đến việc tìm kiếm hoặc xử lý danh sách dữ liệu. Giả sử ta có một danh sách các số và muốn tìm một số cụ thể trong danh sách đó. Câu lệnh while có thể giúp duyệt qua tất cả các phần tử trong danh sách cho đến khi tìm thấy phần tử mong muốn.
int[] arr = {3, 5, 7, 9, 11};
int target = 9;
int i = 0;
while (i < arr.length) {
if (arr[i] == target) {
System.out.println("Đã tìm thấy " + target + " tại vị trí " + i);
break;
}
i++;
}
Trong ví dụ trên, vòng lặp sẽ tiếp tục duyệt qua mảng arr cho đến khi tìm thấy giá trị target. Khi tìm thấy, chương trình sẽ in ra vị trí của phần tử đó và thoát khỏi vòng lặp với câu lệnh break.
Câu lệnh while cũng có thể được sử dụng trong các tình huống đếm lặp, kiểm tra điều kiện liên tục hoặc thực hiện các hành động cho đến khi một tình huống cụ thể xảy ra. Điều quan trọng khi sử dụng câu lệnh while là phải xác định rõ ràng điều kiện dừng và thay đổi giá trị của biến điều khiển trong mỗi lần lặp, để đảm bảo vòng lặp sẽ kết thúc đúng lúc và không gặp phải tình trạng vô hạn.
Ngoài ra, trong trường hợp cần thực hiện một khối lệnh ít nhất một lần dù điều kiện có đúng hay không, ta có thể sử dụng cấu trúc lặp do-while, trong đó điều kiện được kiểm tra sau mỗi lần lặp. Điều này giúp chương trình thực hiện khối lệnh ít nhất một lần, điều này khác với vòng lặp while, trong đó điều kiện được kiểm tra trước khi thực thi khối lệnh. Ví dụ về vòng lặp do-while:
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 5);
Trong trường hợp này, dù i có giá trị ban đầu là 0 và điều kiện i < 5 là đúng, khối lệnh sẽ vẫn được thực thi ít nhất một lần.
Tóm lại, câu lệnh lặp while là một công cụ hữu ích trong lập trình để thực hiện các thao tác lặp lại khi điều kiện không xác định trước được. Khi sử dụng câu lệnh while, lập trình viên cần chú ý đến điều kiện dừng và đảm bảo rằng biến điều khiển được thay đổi hợp lý trong mỗi vòng lặp, tránh tình trạng vòng lặp vô hạn và đảm bảo chương trình hoạt động hiệu quả.