Các chương trình thường cần phải lặp đi lặp lại một hoạt động nào đó. Ví dụ, một chương trình xếp loại học lực sẽ chứa các lệnh rẽ nhánh để gán xếp loại A, B, C… cho một sinh viên tùy theo điểm số của sinh viên này. Để xếp loại cho cả một lớp, chương trình sẽ phải lặp lại thao tác đó cho từng sinh viên trong lớp. Phần chương trình lặp đi lặp lại một lệnh hoặc một khối lệnh được gọi là một vòng lặp. Lệnh hoặc khối lệnh được lặp đi lặp lại được gọi là thân của vòng lặp. Cấu trúc lặp cho phép lập trình viên chỉ thị cho chương trình lặp đi lặp lại một hoạt động trong khi một điều kiện nào đó vẫn được thỏa mãn.
Khi thiết kế một vòng lặp, ta cần xác định thân vòng lặp thực hiện hành động gì. Ngoài ra, ta còn cần một cơ chế để quyết định khi nào vòng lặp sẽ kết thúc.
Vòng lặp while
Vòng while lặp đi lặp lại chuỗi hành động, gọi là thân vòng lặp, nếu như điều kiện lặp vẫn còn được thỏa mãn. Cú pháp của vòng lặp while như sau:
while (điều_kiện_lặp)
thân_vòng_lặp
Cấu trúc này bắt đầu bằng từ khóa while, tiếp theo là điều kiện lặp đặt trong một cặp ngoặc đơn, cuối cùng là thân vòng lặp. Thân vòng lặp hay chứa nhiều hơn một lệnh và khi đó thì phải được gói trong một cặp ngoặc { }.
Khi thực thi một cấu trúc while, đầu tiên chương trình kiểm tra giá trị của biểu thức điều kiện, nếu biểu thức cho giá trị false thì nhảy đến điểm kết thúc lệnh while, còn nếu điều kiện lặp có giá trị true thì tiến hành thực hiện tập lệnh trong thân vòng lặp rồi quay trở lại kiểm tra điều kiện lặp, nếu không thỏa mãn thì kết thúc, nếu thỏa mãn thì lại thực thi thân vòng lặp rồi quay lại… Tập lệnh ở thân vòng lặp có thể làm thay đổi giá trị của biểu thức điều kiện từ true sang false để dừng vòng lặp.
Ví dụ, xét một chương trình có nhiệm vụ đếm từ 1 đến một ngưỡng number cho trước. Đoạn mã đếm từ 1 đến number có thể được viết như sau:
count = 1;
while (count <= number) {
System.out.print(count + ", ");
count++;
}
Giả sử biến number có giá trị bằng 2, đoạn mã trên hoạt động như sau: Đầu tiên, biến count được khởi tạo bằng 1. Vòng while bắt đầu bằng việc kiểm tra điều kiện (count <= number), nghĩa là 1 ≤ 2, điều kiện thỏa mãn. Thân vòng lặp được thực thi lần thứ nhất: giá trị 1 của count được in ra màn hình kèm theo dấu phảy, sau đó count được tăng lên 2. Vòng lặp quay về điểm xuất phát: kiểm tra điều kiện lặp, giờ là 2 ≤ 2, vẫn thỏa mãn. Thân vòng lặp được chạy lần thứ hai (in giá trị 2 của count và tăng count lên 3) trước khi quay lại điểm xuất phát của vòng lặp. Tại lần kiểm tra điều kiện lặp này, biểu thức 3 ≤ 2 cho giá trị false, vòng lặp kết thúc do điều kiện lặp không còn được thỏa mãn, chương trình chạy tiếp ở lệnh nằm sau cấu trúc while đang xét.
Cấu trúc while trong đoạn mã trên có thể được biểu diễn bằng sơ đồ trong hình sau:
Chương trình sau minh họa cách sử dụng vòng lặp while để in ra các số nguyên (biến count) từ 1 cho đến một ngưỡng giá trị do người dùng nhập vào từ bàn phím (lưu tại biến number). Kèm theo là kết quả của các lần chạy khác nhau với các giá trị khác nhau của number. Đặc biệt, khi người dùng nhập giá trị 0 cho number, thân vòng while không chạy một lần nào, thể hiện ở việc không một số nào được in ra màn hình. Lí do là vì nếu number bằng 0 thì biểu thức count <= number ngay từ đầu vòng while đã có giá trị false.
Scanner input = new Scanner(System.in);
int count, number;
System.out.println("Enter a number: ");
number = input.nextInt();
count = 1;
while (count <= number) {
System.out.println(count + ", ");
count++;
}
System.out.println("BOOOOOM!");