Vòng lặp lồng nhau
Thuộc phần Kiến thức nền tảng trong hành trình C# của Coddy. Bài học 46 trên 69.
Vòng lặp lồng nhau (nested loop) là một vòng lặp nằm bên trong một vòng lặp khác. Vòng lặp bên trong sẽ hoàn thành tất cả các lần lặp của nó trong mỗi lần lặp của vòng lặp bên ngoài.
Một phép so sánh dễ hiểu là chiếc đồng hồ: với mỗi giờ (vòng lặp bên ngoài), kim phút (vòng lặp bên trong) phải hoàn thành trọn chu kỳ 60 phút.
Ví dụ về vòng lặp lồng nhau:
int rows = 2;
int cols = 2;
for (int x = 0; x < rows; x++) {
for (int y = 0; y < cols; y++) {
Console.WriteLine(x + " " + y);
}
}
// Đoạn code này sẽ in ra:
// 0 0
// 0 1
// 1 0
// 1 1Vòng lặp bên ngoài (x) chạy rows lần. Với mỗi lần như vậy, vòng lặp bên trong (y) chạy cols lần, nghĩa là phần thân vòng lặp bên trong thực thi tổng cộng 2 × 2 = 4 lần. Mỗi vòng lặp có bộ đếm riêng: y bắt đầu lại từ 0 mỗi khi vòng lặp bên ngoài chạy, còn rows và cols giữ nguyên và chỉ cho các vòng lặp biết khi nào cần dừng.
Bạn cũng có thể cần Console.Write() khi làm việc với các vòng lặp lồng nhau. Khác với Console.WriteLine(), hàm in văn bản rồi chuyển sang dòng mới, Console.Write() in văn bản mà không thêm ký tự xuống dòng ở cuối. Nhờ vậy, bạn có thể tạo đầu ra trên cùng một dòng:
for (int y = 0; y < 4; y++) {
Console.Write("* ");
}
Console.WriteLine();
// Đoạn code này sẽ in ra:
// * * * * Ở đây, Console.Write() tiếp tục in trên cùng một dòng, còn Console.WriteLine() ở cuối sẽ chuyển sang dòng tiếp theo.
Thử thách
Người mớiViết chương trình in ra một hình chữ nhật bằng dấu sao (*) với chiều rộng và chiều cao đã cho.
Đầu vào: Hai số nguyên: width và height
Ví dụ:
Nếu width = 5 và height = 3, đầu ra sẽ là:
*****
*****
*****Nếu width = 4 và height = 6, đầu ra sẽ là:
****
****
****
****
****
****Dùng một biến đếm mới cho mỗi vòng lặp (ví dụ: i cho các hàng và j cho các dấu sao trong một hàng), rồi so sánh biến đó với height hoặc width. Đừng thay đổi chính height và width: mỗi hàng đều cần dùng lại width.
Tự làm thử
using System;
public class Program {
public static void Main(string[] args) {
int width = int.Parse(Console.ReadLine());
int height = int.Parse(Console.ReadLine());
// Viết code của bạn bên dưới
}
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
4Các toán tử, phần 1
Toán tử số họcToán tử moduloTăng và giảmTăng và giảm hậu tốToán tử số học rút gọn5Toán tử phần 2
Toán tử so sánhToán tử logic phần 1Toán tử logic phần 2Ôn tập: logic đơn giảnToán tử logic phần 39Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp do whileBreakContinueVòng lặp lồng nhauVòng lặp vô hạnÔn tập: đầu vào độngTự luyện tập: Trình biên dịch C# online