为什么我的解决方案不正确的旅游切片练习?



我正在学习golang,并试图完成围棋之旅。我被切片练习困住了。复制粘贴问题和我的解决方案在这里。谁能批评一下,告诉我哪里做错了?

问题:

Implement Pic. It should return a slice of length dy, each element of which is a slice of dx 8-bit 
unsigned integers. When you run the program, it will display your picture,
interpreting the integers as grayscale (well, bluescale) values.
The choice of image is up to you. Interesting functions include (x+y)/2, x*y, and x^y.
(You need to use a loop to allocate each []uint8 inside the [][]uint8.)
(Use uint8(intValue) to convert between types.)

我的解决方案:

package main
import "golang.org/x/tour/pic"
func Pic(dx, dy int) [][]uint8 {
ans := make([][]uint8, dy)
for i:=0; i< dy; i++ {
slice := make([]uint8, dx)
for j := 0; j<dx;j++{
slice = append(slice, uint8((i+j)/2))
}
ans = append(ans,slice)
}
return ans
}
func main() {
pic.Show(Pic)
}

在运行时,我得到错误:

panic: runtime error: index out of range [0] and length 0

我不确定我在这里做错了什么。另外,为什么在练习中要传递一个函数?这是有意的吗?

我明白了。正如我在我的评论中所说,你应该用slice[j] = uint((i+j)/2)ans[i] = slice替换你的追加调用。

练习用256x256调用函数。你创建一个256长的切片,然后附加其他切片256次,结果是一个512长的切片ans。前256个条目是空的,因为append在末尾追加了slice。因此,当pic库迭代您的数据时,它会尝试访问空片。

更新:修复算法的另一种方法是初始化长度为0的切片。所以编辑

ans := make([][]uint8, 0)slice := make([]uint8, 0)

也应该给出正确的结果。

相关内容

  • 没有找到相关文章

最新更新