多维数组我们只介绍二维数组。
二维数组的应用场景:
比如我们开发一个五子棋游戏,棋盘就是需要二维数组来表示。
二维数组的使用:
快速入门案例:
请用二维数组输出如下图形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
代码演示:
func main() {
//定义/声明 二维数组
var arr [4][6]int
//赋初值
arr[1][2] = 1
arr[2][1] = 2
arr[2][3] = 3
//遍历二维数组,按照要求输出图形
for i := 0; i < 4; i++ {
for j := 0; j < 6; j++ {
fmt.Print(arr[i][j], " ")
}
fmt.Println()
}
}
使用方式1:先声明/定义 再赋值
1)语法:var 数组名[大小][大小]类型
2)比如:var arr[2][3]int,再赋值。
3)使用演示
4)二维数组在内存的存在形式(重点)
func main() {
//定义/声明 二维数组
var arr2 [2][3]int
arr2[1][1] = 10
fmt.Println(arr2)
fmt.Printf("arr2[0]的地址%p
", &arr2[0])
fmt.Printf("arr2[1]的地址%p
", &arr2[1])
fmt.Printf("arr2[0][0]的地址%p
", &arr2[0][0])
fmt.Printf("arr2[1][0]的地址%p
", &arr2[1][0])
}
打印的结果:
二维数组在内存的布局的示意图:
使用方式2:直接初始化
1)声明:var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值..},{初值..}}
2)赋值(有默认值,比如int 类型的就是0)
3)使用演示
4)说明:二维数组在声明/定义时也对应有四种写法【和一维数组类似】
var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值..},{初值..}}
var 数组名 [大小][大小]类型 = [...][大小]类型{{初值..},{初值..}}
var 数组名 = [大小][大小]类型{{初值..},{初值..}}
var 数组名 = [...][大小]类型{{初值..},{初值..}}
func main() {
var arr3 [2][3]int = [2][3]int{{1,2,3},{4,5,6}}
fmt.Println("arr3=", arr3)
}
二维数组的遍历:
1)双层for循环完成遍历
案例演示:
func main() {
var arr3 = [2][3]int{{1,2,3},{4,5,6}}
//for循环遍历
for i := 0; i < len(arr3); i++ {
for j := 0; j < len(arr3[i]); j++ {
fmt.Printf("%v ", arr3[i][j])
}
fmt.Println()
}
}
2)for-range 方式完成遍历
案例演示:
func main() {
var arr3 = [2][3]int{{1,2,3},{4,5,6}}
//for-range来遍历二维数组
for i,v := range arr3 {
for j,v2 := range v{
fmt.Printf("arr3[%v][%v]=%v ", i, j, v2)
}
fmt.Println()
}
}
小例子:
定义二维数组,用于保存三个班,每个班五名同学成绩,并求出每个班级平均分、以及所有班级平均分。
func main() {
var scores [3][5]float64
//循环的输入成绩
for i := 0; i < len(scores); i++ {
for j := 0; j < len(scores[i]); j++ {
fmt.Printf("请输入第%d班的第%d个学生的成绩
", i+1, j+1)
fmt.Scanln(&scores[i][j])
}
}
//遍历输出成绩后的二维数组,统计平均分
totalSum := 0.0 //定义一个变量,用于累计所有班级的总分
for i := 0; i < len(scores); i++ {
sum := 0.0 //定义一个变量,用于累计各个班级的总分
for j := 0; j < len(scores[i]); j++ {
sum += scores[i][j]
}
totalSum += sum
fmt.Printf("第%d班级的总分为%v 平均分%v
", i+1, sum, sum / float64(len(scores[i])))
}
fmt.Printf("所有班级的总分为%v, 所有班级平均分%v
", totalSum, totalSum / 15)
}