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

Vòng lặp lồng nhau

Một vòng lặp lồng nhau (nested loop) là vòng lặp đặt bên trong một vòng lặp khác. Với mỗi lần lặp của vòng lặp ngoài, toàn bộ vòng lặp trong sẽ chạy hết một lượt.

for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}
// i=1,j=1 i=1,j=2 i=2,j=1 i=2,j=2 i=3,j=1 i=3,j=2

Vòng lặp ngoài chạy 3 lần, mỗi lần vòng lặp trong chạy 2 lần → tổng cộng 6 lần lặp.

for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 10; j++) {
System.out.printf("%d x %d = %d%n", i, j, i * j);
}
System.out.println("---");
}
int rows = 5;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println(); // xuống dòng sau mỗi hàng
}
// *
// * *
// * * *
// * * * *
// * * * * *

4. Thoát vòng lặp ngoài với nhãn (labeled break/continue)

Phần tiêu đề “4. Thoát vòng lặp ngoài với nhãn (labeled break/continue)”

break/continue thông thường chỉ tác động đến vòng lặp gần nhất chứa nó (vòng lặp trong cùng). Để thoát trực tiếp khỏi vòng lặp ngoài, Java hỗ trợ nhãn (label):

outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break outer; // thoát HẲN vòng lặp ngoài, không chỉ vòng lặp trong
}
System.out.println("i=" + i + ", j=" + j);
}
}

Tương tự, continue outer; sẽ bỏ qua lần lặp hiện tại của vòng lặp ngoài, không chỉ vòng lặp trong.

  • Vòng lặp lồng nhau: vòng lặp trong chạy trọn vẹn ứng với mỗi lần lặp của vòng lặp ngoài
  • Thường dùng để xử lý dữ liệu 2 chiều: bảng, ma trận, hình vẽ ký tự
  • Nhãn (outer:) kết hợp break outer/continue outer để điều khiển trực tiếp vòng lặp ngoài từ bên trong vòng lặp trong