Vòng lặp lồng nhau
Thuộc phần Kiến thức nền tảng trong hành trình Kotlin của Coddy. Bài học 52 trên 93.
Bạn có thể đặt một vòng lặp bên trong một vòng lặp khác để tạo thành vòng lặp lồng nhau. Vòng lặp bên trong chạy hết các lần lặp cho mỗi lần lặp của vòng lặp bên ngoài.
val rows = 2
val cols = 3
for (i in 1..rows) {
for (j in 1..cols) {
println("i=$i, j=$j")
}
}
// Đầu ra:
// i=1, j=1
// i=1, j=2
// i=1, j=3
// i=2, j=1
// i=2, j=2
// i=2, j=3Khi i bằng 1, vòng lặp bên trong chạy cols lần (j chạy từ 1 đến 3). Sau đó, i trở thành 2 và vòng lặp bên trong bắt đầu lại, với j chạy từ 1 đến 3 lần nữa. Như vậy, tổng cộng có 2 × 3 = 6 lần lặp. rows và cols không bao giờ thay đổi: chúng chỉ cho các vòng lặp biết khi nào cần dừng.
Vòng lặp lồng nhau thường được dùng để tạo mẫu hoặc làm việc với các cấu trúc dạng lưới:
for (row in 1..3) {
for (col in 1..row) {
print("*")
}
println()
}
// Đầu ra:
// *
// **
// ***Ở đây, phạm vi của vòng lặp bên trong phụ thuộc vào biến của vòng lặp bên ngoài, tạo thành một mẫu hình tam giác. Hàm (function) print() in ra mà không xuống dòng, còn println() chuyển sang dòng tiếp theo sau mỗi hàng.
Thử thách
Trung bìnhĐọc một số nguyên n từ đầu vào. Dùng các vòng lặp lồng nhau để in bảng nhân cho các số từ 1 đến n.
Với mỗi hàng i từ 1 đến n, in các tích i * 1, i * 2, ..., i * n cách nhau bằng dấu cách, rồi xuống dòng.
Ví dụ, nếu đầu vào là 3, đầu ra sẽ là:
1 2 3
2 4 6
3 6 9Nếu đầu vào là 4, đầu ra sẽ là:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16Dùng print() kèm một dấu cách để in các giá trị trên cùng một dòng, và dùng println() để chuyển sang hàng tiếp theo.
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 cột), rồi so sánh cả hai với n. Đừng thay đổi chính n: mỗi hàng cần dùng lại giá trị này.
Tự làm thử
fun main() {
// Đọc đầu vào
val n = readLine()!!.toInt()
// TODO: Viết code bên dưới
// Dùng các vòng lặp lồng nhau để in ra bảng cửu chương
// Dùng print() và dấu cách để in các giá trị trên cùng một dòng
// Dùng println() để chuyển sang hàng tiếp theo
}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
4Toán tử phần 1
Toán tử số họcToán tử moduloPhép gán kết hợpToán tử so sánhÔn tập: phép tính đơn giản7Nhập xuất cơ bản
Hàm PrintlnMẫu chuỗiĐầu vào ReadLineChuyển đổi kiểu dữ liệuÔn tập: Số năm đến khi nghỉ hưuÔn tập: Đúng hay sai10Hàm
Khai báo hàmTham số và đối sốGiá trị trả vềĐối số có tênGiá trị mặc địnhHàm chỉ gồm một biểu thứcÔn tập: hàm SigmaÔn tập: hàm kiểm tra hợp lệ3Tính có thể null
An toàn với null là gìKiểu có thể nullToán tử gọi an toànToán tử ElvisCơ bản về thử thách hàmKhẳng định không nullÔn tập: truy cập an toàn6Ra quyết định
Câu lệnh ifCâu lệnh if-elseIf dưới dạng biểu thứcBiểu thức whenWhen với khoảng giá trịÔn tập: máy tính đơn giản9Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp do-whileBreakContinuePhạm vi trong vòng lặpVòng lặp lồng nhauÔn tập: giai thừaÔn tập: đầu vào động12Cơ bản về danh sách
List và MutableListTruy cập phần tửChỉnh sửa danh sáchPhương thức của ListPair và TripleÔn tập: danh sách sản phẩmÔn tập: danh sách đảo ngược15Theo dõi chi tiêu hằng ngày
Tổng quan dự ánThoát khỏi chương trìnhTự luyện tập: Playground Kotlin