Menu
CoddyTech

嵌套循环

本课属于 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 永远不会改变:它们只用于告诉循环何时停止。这个模式非常适合处理数据表或创建类似网格的结构。

challenge icon

挑战

入门

在这个挑战中,你将练习使用嵌套循环打印简单的图案。外层循环遍历各行,内层循环遍历各列,从而创建一个由字符组成的小网格。

补全嵌套循环,打印一个 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()
	}
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Go 在线编译器