Vòng lặp For trong Java
Kiến thức cơ bản là một trong những viên gạch quan trọng để xây dựng nên những thứ cao siêu và thâm thuý hơn. Bất kỳ môn phái hay ngành học nào cũng có những kiến thức căn bản để nhập môn, khác nhau ở chỗ ít hay nhiều mà thôi.
Riêng Java chúng ta cũng không ít, tuy nhiên trong bài viết này chỉ gói gọn các chia sẻ về vòng lặp. Nó có quan trọng không? Các bạn nhớ theo dõi đến cuối nhé.
1. Một số vòng lặp cơ bản thường gặp
Trong Java và hầu như mọi ngôn ngữ lập trình khác, khi nhắc đến vòng lặp thì ba cái tên tiêu biểu nhất, được sử dụng thường xuyên nhất đó là: vòng lập FOR
, vòng lập WHILE
và vòng lập DO-WHILE
.
Vậy để học và hiểu ba vòng lập đó có khó không? Hãy cùng xem ví dụ bên dưới.
Vòng lập FOR: được sử dụng khi bạn biết chính xác hoặc cụ thể việc bạn muốn lặp bao nhiêu lần qua một hoặc nhiều đoạn code chứa bên trong.
Cú pháp:
1
2
3
for(<biến khởi tạo>; <biểu thức điều kiện>; <tăng/giảm biến>) {
// các lệnh;
}
Trong đó:
- Biến khởi tạo: là biến đã được khai báo để đánh dấu sự bắt đầu của vòng lặp.
- Biểu thức điều kiện: là một biểu thức kiểm tra trả về giá trị Boolean, vòng lặp được thực thi khi giá trị trả về của biểu thức là True và ngược lại thoát vòng lặp nếu giá trị trả về là False.
- Tăng/giảm biến: được sử dụng để cập nhật giá trị của biến cho lần lặp tiếp theo.
Vòng lặp WHILE: được sử dụng khi bạn không thể xác định được số lần lặp cụ thể của chương trình. Cú pháp:
1
2
3
while(<điều kiện>) {
// các lệnh;
}
Vòng lặp WHILE bắt đầu với việc kiểm tra điều kiện. Khi điều kiện đúng, tức giá trị trả về là True thì các câu lệnh trong thân vòng lặp được thực thi.
Thông thường các câu lệnh sẽ chứa một giá trị cập nhật cho biến đang được xử lý cho lần lặp tiếp theo. Khi điều kiện sai, tức kết quả trả về là False, vòng lặp chấm dứt đánh dấu sự kết thúc vòng đời của nó.
Vòng lặp DO-WHILE: tương tự như vòng lặp WHILE, nhưng kể cả khi điều kiện sai, giá trị trả về là False thì vòng lặp vẫn thực hiện lệnh ít nhất một lần. Hay nói cách khá, DO-WHILE kiểm tra điều kiện sau khi thực hiện các câu lệnh.
Cú pháp:
1
2
3
do {
// các lệnh;
} while (<điều kiện>);
Nhìn cú pháp có thể thấy, điều kiện trong DO-WHILE được kiểm tra sau khi thực hiện các câu lệnh và cập nhật giá trị biến. Nếu điều kiện đúng, lần lặp tiếp theo của vòng lặp sẽ bắt đầu. Khi điều kiện sai, vòng lặp sẽ chấm dứt và đánh dấu sự kết thúc vòng đời của nó.
2. Sử dụng vòng lặp trong Java để giải quyết một số thuật toán cơ bản thường gặp
Không nói suông lý thuyết nữa, chúng ta sẽ điểm qua một số ví dụ thường gặp để thấy được cái hay ho của các vòng lặp nào.
Ví dụ 1: In các số tự nhiên từ 1 đến 9 ra màn hình. Chẳng lẻ bạn viết câu lệnh in 9 lần sao. Hãy thử dùng vòng lặp xem?
Vòng lặp FOR:
1
2
3
4
5
6
7
8
public class VongLapFor {
public static void main(String[] args) {
// in các số từ 1 đến 9
for(int i = 1; i <= 9; i++) {
System.out.println(i);
}
}
}
Vòng lặp WHILE:
1
2
3
4
5
6
7
8
9
10
11
public class VongLapWhile {
public static void main(String[] args) {
// in các số từ 1 đến 9
int i = 1;
while(i<=9) {
System.out.println(i);
i++;
}
}
}
Vòng lặp DO-WHILE:
1
2
3
4
5
6
7
8
9
public class VongLapDoWhile {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i + " ");
i++;
} while (i <= 9);
}
}
Ví dụ 2: Tính tổng các số tự nhiên từ 1 đến 1000. Bày này nếu không dùng vòng lặp để giải quyết thì bạn có cách nào khác hoặc đơn giản và nhanh hơn để code không?
Vòng lặp FOR:
1
2
3
4
5
6
7
8
9
10
public class VongLapFor {
public static void main(String[] args) {
// Tổng các số từ 1 đến 1000
int tong = 0;
for(int i = 1; i <= 1000; i++) {
tong=tong+i;
}
System.out.println(tong);
}
}
Vòng lặp WHILE:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class VongLapWhile {
public static void main(String[] args) {
// in các số từ 1 đến 1000
int i = 1;
int tong = 0;
while (i <= 1000) {
tong = tong + i;
i++;
}
System.out.println(tong);
}
}
Vòng lặp DO-WHILE:
1
2
3
4
5
6
7
8
9
10
11
12
public class VongLapDoWhile {
public static void main(String[] args) {
// in các số từ 1 đến 1000
int i = 1;
int tong = 0;
do {
tong = tong + i;
i++;
} while (i <= 1000);
System.out.println(tong);
}
}
Ví dụ 3: In tất cả giá trị của mảng cho trước theo thứ tự ngược lại. Vòng lặp FOR:
1
2
3
4
5
6
7
8
public class VongLapFor {
public static void main(String[] args) {
// In ngược giá trị của mảng cho trước
String[] niit = { "1-Java", "2-Python", "3-PHP", "4-JavaScript", "5-CSS", "6-HTML", "7-Big Data" };
for (int i = niit.length; i > 0 ; i--)
System.out.println(niit[i-1]);
}
}
Vòng lặp WHILE:
1
2
3
4
5
6
7
8
9
10
11
public class VongLapWhile {
public static void main(String[] args) {
// In ngược giá trị của mảng cho trước
String[] niit = { "1-Java", "2-Python", "3-PHP", "4-JavaScript", "5-CSS", "6-HTML", "7-Big Data" };
int i = niit.length - 1;
while (i >= 0) {
System.out.println(niit[i]);
i--;
}
}
}
Vòng lặp DO-WHILE:
1
2
3
4
5
6
7
8
9
10
11
public class VongLapDoWhile {
public static void main(String[] args) {
// In ngược giá trị của mảng cho trước
String[] niit = { "1-Java", "2-Python", "3-PHP", "4-JavaScript", "5-CSS", "6-HTML", "7-Big Data" };
int i = niit.length - 1;
do {
System.out.println(niit[i]);
i--;
} while (i >= 0);
}
}
Riêng ở ví dụ này, mình BONUS thêm cho các bạn một vòng lặp nữa đó là FOR-EACH.
FOR-EACH là một kỹ thuật duyệt mảng khác như các vòng lặp trước. Nhưng thay vì khai báo hay khởi tạo biến lặp vị trí, chúng ta sẽ khai báo một biến chung kiểu dữ liệu của mảng, sử dụng biến đó duyệt các phần tử các mảng mà không cần lấy vị trí (index) của mỗi phần tử.
Đặt biệt FOR-EACH không thể thể chỉnh sửa mảng, không thể tìm vị trí phần tử trong mảng và không thể in ngược mảng. (Nên mình in mảng theo chiều xuôi nhé)
1
2
3
4
5
6
7
8
9
public class VongLapForEach {
public static void main(String[] args) {
// In tất cả giá trị của mảng cho trước
String[] niit = { "1-Java", "2-Python", "3-PHP", "4-JavaScript", "5-CSS", "6-HTML", "7-Big Data" };
for (String i : niit) {
System.out.println(i);
}
}
}
Mặc dù cú pháp và các sử dụng khác nhau nhưng các vòng lặp vẫn cho kết quả như nhau. Vấn đề là ta nên lựa chọn sao cho tối ưu và hợp lý nhất để sử dụng và mang lại hiệu quả tốt cho công việc.
Lời kết
Vòng lặp đóng vai trò cực kỳ quan trọng trong lập trình, không chỉ riêng gì Java đâu. Mỗi vòng lặp có một ưu thế và yếu điểm riêng, do đó bạn cần phải hiểu rõ cú pháp, cách dùng và dùng trong trường hợp như thế nào thì mới tối ưu được năng suất làm việc.
Kiến thức về vòng lặp là cơ bản, là nồng cốt để học sâu hơn về lập trình. Nếu bạn bị hổng kiến thức về vòng lập, có lẽ con đường tu luyện code học của bạn sẽ gian nan vô chừng.
Nếu cảm thấy mình chưa hiểu rõ, hãy quay lại xem kỹ lý thuyết và ví dụ bên trên nhé.
Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!
Happy coding! 😎 👍🏻 🚀 🔥