我的代码:package mainimport "fmt"func main() { var n int fmt.Scan(&n) s := make([][]int, n) for i := 0; i < n; i++ { for j := 0; j < n; j++ { fmt.Scanf("%d %d", &s[i][j]) } } s1 := 0 s2 := 0 for i := 0; i < n; i++ { for j := 0; j < n; j++ { if i == j { s1 += s[i][j] } if i+j == n-1 { s2 += s[i][j] } } fmt.Println(s1 - s2) }}输出:panic: runtime error: index out of range我试过,但感到恐慌。我想知道这个问题的正确解决方案。
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
这一行:
s := make([][]int, n)
创建切片的切片,其元素类型为 的切片[]int。它创建了一个包含n元素的切片,但外部切片的元素用元素类型的零值初始化,类型的零值[]int是nil(就像任何切片类型一样)。
您会感到index out of range恐慌,因为外部切片的任何元素的s长度都为零(因为它们未初始化为非nil切片),因此s[i][j]对于任何j值都会出现恐慌。
如果要将元素分配给“内部”切片,还必须初始化它们:
for i := 0; i < n; i++ {
s[i] = make([]int, n) // YOU ARE MISSING THIS LINE
for j := 0; j < n; j++ {
fmt.Scanf("%d %d", &s[i][j])
}
}
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消