为了账号安全,请及时绑定邮箱和手机立即绑定

如何找出围棋编程中的对角线差?

如何找出围棋编程中的对角线差?

Go
莫回无 2022-01-04 18:49:39
我的代码: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])

    }

}


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信