Bỏ qua để đến nội dung

Vòng lặp for

for (int i = 0; i < 5; i++) {
System.out.println("Lần lặp: " + i);
}

Cú pháp gồm ba phần, cách nhau bởi dấu ;:

  1. Khởi tạo (int i = 0) - chạy một lần duy nhất trước khi vòng lặp bắt đầu
  2. Điều kiện (i < 5) - kiểm tra trước mỗi lần lặp, dừng khi sai
  3. Cập nhật (i++) - chạy sau mỗi lần lặp
// Đếm ngược
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
// Bước nhảy khác 1
for (int i = 0; i <= 20; i += 5) {
System.out.println(i); // 0, 5, 10, 15, 20
}

Khi chỉ cần duyệt qua từng phần tử của mảng hoặc collection mà không cần chỉ số, for-each gọn và an toàn hơn:

int[] scores = {90, 85, 78, 92};
for (int score : scores) {
System.out.println(score);
}
import java.util.List;
List<String> names = List.of("An", "Bình", "Chi");
for (String name : names) {
System.out.println(name);
}

Cú pháp: for (<kiểu> <biến> : <mảng_hoặc_collection>).

3. Khi nào dùng for truyền thống, khi nào dùng for-each

Phần tiêu đề “3. Khi nào dùng for truyền thống, khi nào dùng for-each”
  • Dùng for-each khi chỉ cần duyệt tuần tự qua từng phần tử, không quan tâm chỉ số
  • Dùng for truyền thống khi cần chỉ số (ví dụ để sửa phần tử tại vị trí cụ thể, hoặc duyệt theo bước nhảy khác 1, hoặc duyệt ngược)
int[] numbers = {1, 2, 3, 4, 5};
// Cần chỉ số để SỬA phần tử -> phải dùng for truyền thống
for (int i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i] * 2;
}

⚠️ for-each chỉ cho phép đọc phần tử - không thể dùng nó để gán giá trị mới vào mảng gốc.

  • for truyền thống: for (khởi tạo; điều kiện; cập nhật) { ... } - linh hoạt, phù hợp khi cần chỉ số
  • for-each: for (kiểu biến : mảng_hoặc_collection) { ... } - gọn, an toàn, phù hợp khi chỉ cần đọc tuần tự
  • for-each không dùng để sửa phần tử trong mảng/collection gốc