Vòng lặp for trong Java
Trong bài này, tôi sẽ hướng dẫn các bạn tìm hiểu về cấu trúc của vòng lặp cuối cùng đó là vòng lặp for. Khác với 2 vòng lặp while và do - while (lặp với số lần chưa xác định trước) thì vòng lặp for là một cấu trúc lặp có số lần lặp được xác định trước. Sau đây chúng ta sẽ đi vào tìm hiểu về cấu trúc lặp này.
1. Cú pháp, cách hoạt động và công dụng vòng lặp for
Công dụng
Vòng lặp for
là cấu trúc điều khiển lặp được dùng để thực hiện một lệnh hay một khối lệnh với số lần lặp được xác định trước. Vì vậy, cấu trúc lặp này rất mạnh và có thể sử dụng rất linh động trong nhiều tình huống khi viết chương trình.
Cú pháp
for ([biểu_thức_1]; [biểu_thức_2]; [biểu_thức_3]) { // Các lệnh } // Lệnh kế tiếp
biểu_thức_1
là biểu thức tính ra giá trị khởi đầu cho biến của for.biểu_thức_2
là biểu thức tính ra giá trị điều kiện lặp của for.biểu_thức_3
là bước nhảy của biến sau mỗi lần lặp.- Các lệnh là lệnh thực hiện trong thân của vòng lặp
for
.
Lưu ý: Các biểu thức có thể vắng mặt trong cấu trúc của vòng lặp for nhưng các dấu chấm phẩy vẫn phải có. Mỗi biểu thức trong cấu trúc for có thể là một hoặc nhiều biểu thức đơn. Nếu trong trường hợp một biểu thức có nhiều biểu thức đơn thì các biểu thức đơn được viết cách nhau bởi dấu phẩy (,) và các biểu thức đơn đó được thực hiện từ trái qua phải.
Cách hoạt động
Lưu đồ hoạt động của vòng lặp for như sau:
Bài viết này được đăng tại [free tuts .net]
Quy trình thực hiện trải qua các bước như sau:
Bước 1: Các lệnh ở biểu_thức_1
được thực hiện trước tiên. Trong biểu thức này có thể có nhiều biểu thức đơn và viết ngăn cách nhau bởi dấu phẩy.
Bước 2: Kiểm tra giá trị của biểu_thức_2
(điều kiện lặp). Nếu biểu thức này có giá trị đúng (true
) thì chuyển sang Bước 3, ngược lại thì chuyển đến Bước 6.
Bước 3: Lần lượt thực hiện các lệnh trong thân vòng lặp.
Bước 4: Thực hiện các lệnh trong biểu_thức_3
. Trong biểu thức này có thể có nhiều biểu thức đơn và viết ngăn cách nhau bởi dấu phẩy.
Bước 5: Quay lại Bước 2.
Bước 6: Thực hiện các lệnh bên ngoài vòng lặp for.
Ví dụ
Ví dụ này sẽ in ra màn hình 5 số nguyên đầu tiên.
public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println(i); } }
Giải thích hoạt động của chương trình trên.
Bước 1: Khởi tạo biến i = 1
và vì 1 < 5 nên thực hiện câu lệnh bên trong for (hiển thị số 1 ra màn hình).
Bước 2: Tăng i lên 1 đơn vị, lúc này i = 2 < 5
nên hiển thị số 2 ra màn hình.
Bước 3: Tăng i lên 1 đơn vị, lúc này i = 3 < 5
nên hiển thị số 3 ra màn hình
Bước 4: Tăng i lên 1 đơn vị, lúc này i = 4 < 5
nên hiển thị số 4 ra màn hình.
Bước 5: Tăng i lên 1 đơn vị, lúc này i = 5 = 5
nên hiển thị số 5 ra màn hình.
Bước 6: Tăng i lên 1 đơn vị, lúc này i = 6 > 5
nên không thực hiện câu lệnh bên trong for
. Chương trình kết thúc.
2. Các dạng thường gặp của vòng lặp for
Dạng 1: Vòng lặp for
không có biểu_thức_1
và biểu_thức_3
(ý nghĩa giống vòng lặp while).
int sum = 0, k = 1; for (; sum < 100; ) { sum += k; k++; }
for
không có biểu_thức_1
.
int sum = 0, k = 1; for (; sum < 100; k++) { sum += k; }
for
vắng mặt cả 3 biểu thức, khi đó thân của vòng lặp sẽ được thực hiện liên tục. Lúc đó, trong thân của vòng lặp phải có lệnh để thoát ra ngoài vòng for (chi tiết về phần này tôi sẽ giới thiệu trong bài sau).
for (;;) { // các lệnh // lưu ý: phải có lệnh để thoát ra ngoài vòng lặp }
Dạng 4: Vòng lặp for
đầy đủ.
int sum = 0, k; for (k = 1; sum < 100; k++) { sum += k; }
Dạng 5: Vòng lặp for
đầy đủ và biểu_thức_1
có 2 biểu thức đơn.
int sum, k; for (sum = 0, k = 1; sum < 100; k++) { sum += k; }
Dạng 6: Vòng lặp for
lồng nhau.
for (int row = 1; row <= 2; row++) { for (int col = 1; col <= 2; col++) { System.out.println(row + ", " + col); } }
3. Ví dụ vòng lặp for
Vòng lặp for không có biểu_thức_1
và biểu_thức_3
package vong_lap_for; public class InCacSoNhoHon3 { public static void main(String[] args) { int number = 0; /* * Trong trường hợp biến number còn nhỏ hơn 3 * thì in ra giá trị của biến và sau đó tăng lên 1. */ for (; number <3; ) { System.out.println(number); number++; } } }
Vòng lặp for có biểu_thức_1
và biểu_thức_3
có 2 biểu thức đơn
package vong_lap_do_while; import java.util.Scanner; public class HienThiHaiSoKhacNhau { public static void main(String[] args) { int number1, number2; Scanner scanner = new Scanner(System.in); /* * Khởi tạo biến number1 = 0 và number2 = number1 + 3. * Nếu number2 còn nhỏ hơn 8 thì hiển thị biến number1 và number2 * Tăng biến number1 và number2 lên 1 và tiếp tục kiểm tra. */ for (number1 = 0, number2 = number1 + 3; number2 < 8; number1++, number2++) { System.out.println(number1 + ", " + number2); } } }
Vòng lặp for lồng nhau
package vong_lap_do_while; import java.util.Scanner; public class HienThiHaiSoKhacNhau { public static void main(String[] args) { int number1, number2; Scanner scanner = new Scanner(System.in); // Vòng lặp for bên ngoài thực thi 3 lần với row = 1, 2, 3. for (number1 = 1; number1 <= 3; number1++) { // Mỗi lần lặp for bên ngoài // thì vòng lặp for trong sẽ thực thi 2 lần với col = 1, 2. for (number2 = 1; number2 <= 2; number2++) { System.out.println("number1 = " + number1 + ", number2 = " + number2); } } } }
Kết quả sau khi biên dịch chương trình:
Giải thích hoạt động của chương trình trên:
Bước 1: Vòng lặp for
bên ngoài khởi tạo biến number1 = 1
và vì 1 < 3 nên chuyển sang Bước 2.
Bước 2: Vòng lặp for
bên trong khởi tạo biến number2 = 1
và vì 1 < 2 nên sẽ hiển thị dòng number1 = 1
, number2 = 1
ra màn hình.
Bước 3: Thực hiện biểu thức number2++
, lúc này number2 = 2
và vì 2 = 2 nên sẽ hiển thị dòng number1 = 1
, number2 = 2
ra màn hình.
Bước 4: Quay lại vòng lặp for
bên ngoài thực hiện biểu thức number1++
, lúc này biến number1 = 2
và vì 2 < 3 nên chuyển sang Bước 5.
Bước 5: Vòng lặp for
bên trong khởi tạo biến number2 = 1
và vì 1 < 2 nên sẽ hiển thị dòng number1 = 2
, number2 = 1
ra màn hình.
Bước 6: Thực hiện biểu thức number2++
, lúc này number2 = 2
và vì 2 = 2 nên sẽ hiển thị dòng number1 = 2
, number2 = 2
ra màn hình.
Bước 7: Quay lại vòng lặp for
bên ngoài thực hiện biểu thức number1++
, lúc này biến number1 = 3
và vì 3 = 3 nên chuyển sang Bước 8.
Bước 8: Vòng lặp for
bên trong khởi tạo biến number2 = 1
và vì 1 < 2 nên sẽ hiển thị dòng number1 = 3
, number2 = 1
ra màn hình.
Bước 9: Thực hiện biểu thức number2++
, lúc này number2 = 2
và vì 2 = 2 nên sẽ hiển thị dòng number1 = 3
, number2 = 2
ra màn hình.
Bước 10: Quay lại vòng lặp for
bên ngoài thực hiện biểu thức number1++
, lúc này biến number1 = 4
và vì 4 > 3 nên kết thúc vòng lặp.
4. Lời kết
Đây là bài vòng lặp cuối cùng trong Java - vòng lặp for. Sang bài sau, tôi sẽ giới thiệu đến các bạn các từ khóa break
và continue
dùng để thoát khỏi vòng lặp. Các bạn cố gắng nắm chắc chương này vì đây là một phần kiến thức rất quan trọng được sử dụng trong hầu hết các chương trình Java. Cuối bài này, tôi sẽ đưa ra các bài tập để các bạn luyện tập, các bạn theo dõi nhé!
Câu hỏi thường gặp liên quan:
- Java - Tính trung bình cộng của n số nguyên nhập từ bàn phím.
- Java - In ra 20 số nguyên dương đầu tiên ra màn hình.
- Java - Hiển thị và cho phép người dùng chọn vào chức năng tương ứng.
- Java - Tính giá trị của biểu thức P = 1.3.5...(2n+1) với n >= 0.
- Java - Tính giá trị của biểu thức S = 1 + 3 + 5 + n + ... + (2n + 1) (n >= 0).
- Java - Tính giá trị của biểu thức S = 1 - 2 + 3 - 4 + 5 + ... + ((-1)^(n+1)) * n (n > 0).
- Java - Tính giá trị của biểu thức S = 1 + 1.2 + 1.2.3 + ... + 1.2.3.n (n > 0).
- Java - Tính giá trị của biểu thức T = 1^2 + 2^2 + 3^2 +... + n^2 (n > 0).
- Java - Tính giá trị của biểu thức Q = 1 + 1/2 + 1/3 + ... + 1/n (n > 0).
- Java - Tính giá trị của biểu thức R = 1 + 2^2 + 3^3 + ... + n^n (n > 0).
- Java - Tính giá trị của biểu thức U = 1/2 + 2/3 + 3/4 + ... + n/(n+1) (n > 0).
- Java - Tính giá trị của biểu thức K = 1 + 1/2! + 1/3! + ... + 1/n! (n > 0).
- Java - Tính giá trị của biểu thức M = 1 + (1+2)/2! + (1+2+3)/3! + ... + (1+2+3+...+n)/n! (n > 0).