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

我的代码:


package main


import "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

我试过,但感到恐慌。我想知道这个问题的正确解决方案。


莫回无
浏览 182回答 1
1回答

不负相思意

这一行:s := make([][]int, n)创建切片的切片,其元素类型为 的切片[]int。它创建了一个包含n元素的切片,但外部切片的元素用元素类型的零值初始化,类型的零值[]int是nil(就像任何切片类型一样)。您会感到index out of range恐慌,因为外部切片的任何元素的s长度都为零(因为它们未初始化为非nil切片),因此s[i][j]对于任何j值都会出现恐慌。如果要将元素分配给“内部”切片,还必须初始化它们:for i := 0; i < n; i++ {&nbsp; &nbsp; s[i] = make([]int, n) // YOU ARE MISSING THIS LINE&nbsp; &nbsp; for j := 0; j < n; j++ {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Scanf("%d %d", &s[i][j])&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go