gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:14:39 24 4
gpt4 key购买 nike

我的代码:

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

我试过了,但很 panic 。我想知道这个问题的正确解决方案。

最佳答案

这一行:

s := make([][]int, n)

创建一个 slice of slice,一个元素类型为 []int 的 slice。它创建一个包含 n 元素的 slice ,但外部 slice 的元素使用元素类型的零值初始化,类型 []int 的零值是 nil(就像任何 slice 类型一样)。

你得到 index out of range panic ,因为外部 slice s 的任何元素的长度都是零(因为它们没有被初始化为非 nil slice),因此 s[i][j] 对任何 j 值都会出现 panic 。

如果要将元素分配给“内部” slice ,还必须初始化它们:

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])
}
}

关于go - 如何找出围棋编程中的对角线差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com