Chương 3: Lệnh rẽ nhánh và vòng lặp Mục đích
3.2.3 Vòng lặp for
Vòng lặp for được sử dụng khi người dùng biết trước số bước lặp. Khai báo của vòng lặp for gồm 3 phần:
Khai báo và khởi tạo giá trị của các biến
Biểu thức logic
Biểu thức điều khiển lặp
Ba phần khai báo này phân cách nhau bằng dấu chấm phẩy (;). Khi vòng lặp bắt đầu, phần khai báo của vòng lặp được thực hiện. Thông thường, đây là biểu thức khởi gán giá trị ban đầu và đóng vai trò là biến đếm điều khiển vòng lặp. Biểu thức khởi tạo chỉ thực hiện duy nhất một lần. Tiếp đến, biểu thức logic được thực hiện để kiểm tra biến điều khiển với giá trị của số lần lặp. Nếu biểu thức logic có giá trị đúng thì vòng lặp tiếp tục thực hiện, ngược lại vòng lặp kết thúc. Sau cùng, biểu thức điều khiển lặp được thực hiện, thông thường biểu thức lặp dùng để tăng hoặc giảm giá trị của biến điều khiển.
Chương 3 Rẽ nhánh và vòng lặp
41/114 Trong phần khai báo và biểu thức lặp, chúng ta có thể sử dụng nhiều biến phân cách nhau bởi dấu phẩy và thứ tự thực hiện từ trái qua phải. Thứ tự thực hiện rất quan trọng nếu như giá trị của biểu thức thứ 2 phụ thuộc vào kết quả thực hiện. Đoạn mã dưới đây minh họa cách sử dụng vòng lặp for với phân cách nhiều biến khai báo:
Đoạn mã 6:
... int i,j;
int max = 10;
System.out.println(“The sum of two variables for a table of 10 is: ”); for(i=0,j=max;i<=max;i++,j--) { System.out.println(“\n%d + %d = %d”,i,j,i+j); } ...
Trong đoạn mã trên, 3 biến i, j, max được khai báo. Biến max được gán giá trị bằng 10. Trong phần khởi tạo, biến i được gán bằng 0 và biến j được gán bằng max = 10. Ở đây chúng ta thấy 2 biến được khởi tạo giá trị phân cách bởi dấu phẩy. Biểu thức điều kiện; i<=max đảm bảo rằng vòng lặp thực hiện chừng nào i còn nhỏ hơn hoặc bằng max=10.Vòng lặp sẽ kết thúc khi biểu thức điều kiện trả về false (sai) có nghĩa lúc đó i = 11. Cuối cùng, biểu thức lặp cũng bao gồm 2 phép tính i++, j--. Sau mỗi bước lặp, i được tăng 1 đơn vị và j giảm 1 đơn vị. Tổng của 2 biến này luôn luôn bằng max và bằng 10 được in ra. Kết quả của đoạn mã trên như dưới đây:
The sum of two variables for a table of 10 is: 0 + 10 = 10
1 + 9 = 10 2 + 8 = 10 2 + 8 = 10 3 + 7 = 10 4 + 6 = 10 5 + 5 = 10 6 + 4 = 10 7 + 3 = 10 8 + 2 = 10 9 + 1 = 10 10 + 0 = 10
Như thảo luận trong phần trước, có 3 phần trong khai báo vòng lặp for, tuy nhiên bất kỳ một hoặc tất cả các phần trong khai báo for có thể để trống. Đoạn mã dưới đây minh họa cách sử dụng vòng lặp for không sử dụng phần khai báo:
Đoạn mã 7:
...
//Khởi tạo giá trị của biến num int num = 1;
for(; num != 40;num++) { System.out.println(“Enter a number: ”); num = input.nextInt(); } ...
Trong đoạn mã trên, biến num được người dùng nhập vào cho đến khi có giá trị bằng 40. Vòng lặp không có phần khởi tạo. Thay vào đó, num được khởi tạo ở ngoài phần khai báo vòng lặp. Biến num được tăng lên 1. Vòng lặp sẽ kết thúc
Chương 3 Rẽ nhánh và vòng lặp
43/114 khi num bằng 40. Nếu cả 3 phần để trống, vòng lặp sẽ lặp vô tận. Đoạn mã dưới đây minh họa cách sử dụng đó:
Đoạn mã 8:
... for( ; ; ) {
System.out.println(“This will go on and on”); }
...
Trong đoạn mã trên, dòng chữ “This will go on and on” được in cho đến khi
vòng lặp kết thúc. Câu lệnh break có thể dùng để kết thúc vòng lặp này. Đoạn mã trên dẫn đến vòng lặp vô hạn, vòng lặp vô hạn khiến chương trình chạy không giới hạn trong khoảng thời gian dài và sử dụng hết tài nguyên của hệ thống, điều này dẫn đến treo hệ thống. Trong thực tế, chúng ta nên tránh sử dụng loại vòng lặp kiểu này trong chương trình của mình.