Menu
CoddyTech

Vòng lặp lồng nhau

Thuộc phần Kiến thức nền tảng trong hành trình GO của Coddy. Bài học 49 trên 109.

Vòng lặp lồng nhau là các vòng lặp được đặt bên trong một vòng lặp khác. Vòng lặp bên trong chạy hết trong mỗi lần lặp của vòng lặp bên ngoài.

Hãy tạo bảng nhân cho các số từ 1 đến 3 bằng vòng lặp lồng nhau:

rows := 3
cols := 3
for i := 1; i <= rows; i++ {
    for j := 1; j <= cols; j++ {
        fmt.Printf("%d×%d=%d\t", i, j, i*j)
    }
    fmt.Println()
}

Sau khi chạy đoạn code này, ta có bảng nhân, trong đó mỗi hàng thể hiện một giá trị của biến vòng lặp bên ngoài (i) nhân với tất cả giá trị của biến vòng lặp bên trong (j). Kết quả sẽ hiển thị trên màn hình:

1×1=1   1×2=2   1×3=3   
2×1=2   2×2=4   2×3=6   
3×1=3   3×2=6   3×3=9   

Hãy cùng tìm hiểu cách hoạt động này từng bước:

Trước tiên, vòng lặp bên ngoài đặt i=1 và vòng lặp bên trong chạy hoàn tất:

i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"

Sau khi vòng lặp bên trong kết thúc, chúng ta in một dòng mới bằng fmt.Println().

Sau đó, vòng lặp bên ngoài đặt i=2 và vòng lặp bên trong bắt đầu lại, với j lại bắt đầu từ 1:

i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"

Cuối cùng, vòng lặp bên ngoài đặt i=3 và vòng lặp bên trong chạy lần cuối:

i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"

Mỗi vòng lặp có biến đếm riêng (i và j), còn 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. Cách làm này rất hữu ích khi xử lý các bảng dữ liệu hoặc tạo cấu trúc dạng lưới.

challenge icon

Thử thách

Người mới

Trong thử thách này, bạn sẽ luyện tập cách dùng vòng lặp lồng nhau để in ra một mẫu đơn giản. Vòng lặp ngoài sẽ duyệt qua các hàng, còn vòng lặp trong sẽ duyệt qua các cột để tạo một lưới ký tự nhỏ.

Hoàn thành các vòng lặp lồng nhau để in ra một lưới dấu hoa thị 3x3 (*). Mỗi dấu hoa thị phải có một dấu cách theo sau, vì vậy mỗi hàng sẽ trông như sau: * * * (có dấu cách ở cuối). Đầu ra mong đợi 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 rows hoặc columns. Đừng thay đổi chính rows và columns: mỗi hàng đều cần lặp lại columns.

Tự làm thử

package main

import "fmt"

func main() {
	// Số hàng và cột trong lưới
	rows := 3
	columns := 3
	
	// TODO: Tạo các vòng lặp lồng nhau để in ra một lưới dấu sao (*)
	// Vòng lặp bên ngoài duyệt qua các hàng
	// Vòng lặp bên trong duyệt qua các cột
	for i := 0; i < rows; i++ {
		// Thêm vòng lặp bên trong ở đây để in dấu sao ở mỗi cột
		
		// Lệnh này in ra một dòng mới sau mỗi hàng
		fmt.Println()
	}
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Go online