嵌套循环
本课属于 Coddy GO 学习旅程的“基础知识”单元。第 49 课,共 109 课。
嵌套循环是指放在另一个循环中的循环。外层循环每迭代一次,内层循环就会完整运行一遍。
让我们使用嵌套循环为数字 1-3 创建一个乘法表:
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()
}运行这段代码后,我们会得到一个乘法表,其中每一行表示外层循环变量(i)的一个值与内层循环变量(j)的所有值相乘。输出会显示在屏幕上:
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 让我们一步一步了解它的工作原理:
首先,外层循环将 i=1,内层循环会完整运行:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"内层循环结束后,我们用 fmt.Println() 打印一个新行。
然后,外层循环将 i=2,内层循环重新开始,j 又从 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"最后,外层循环将 i=3,内层循环最后运行一次:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"每个循环都有自己的计数器(i 和 j),而 rows 和 cols 永远不会改变:它们只用于告诉循环何时停止。这个模式非常适合处理数据表或创建类似网格的结构。
挑战
入门在这个挑战中,你将练习使用嵌套循环打印简单的图案。外层循环遍历各行,内层循环遍历各列,从而创建一个由字符组成的小网格。
补全嵌套循环,打印一个 3x3 的星号网格(*)。每个星号后面都必须有一个空格,因此每行看起来应像这样:* * * (末尾有一个空格)。预期输出为:
* * * * * * * * *
每个循环都使用一个新的计数器(例如,用 i 表示行,用 j 表示每行中的星号),并将它与 rows 或 columns 进行比较。不要更改 rows 和 columns 本身:每一行都需要再次使用 columns。
亲手试试
package main
import "fmt"
func main() {
// 网格的行数和列数
rows := 3
columns := 3
// TODO: 创建嵌套循环,打印由星号(*)组成的网格
// 外层循环应遍历每一行
// 内层循环应遍历每一列
for i := 0; i < rows; i++ {
// 在这里添加内层循环,在每一列打印星号
// 这会在每一行结束后换行
fmt.Println()
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Go 在线编译器