当前位置: 首页 > 面试题库 >

进行锻炼,运动:切片索引超出范围

苏波涛
2023-03-14
问题内容

我正在遍历Go语言之旅中的练习,但遇到了我无法弄清的障碍。我在做Exercise: Slices这个错误:

256 x 256

panic: runtime error: index out of range

goroutine 1 [running]:
main.Pic(0x10000000100, 0x3, 0x417062, 0x4abf70)
    /tmpfs/gosandbox-08a27793_4ffc9f4a_3b917355_ef23793d_c15d58cc/prog.go:9 +0xa0
tour/pic.Show(0x400c00, 0x40caa2)
    go/src/pkg/tour/pic/pic.go:20 +0x2d
main.main()
    /tmpfs/gosandbox-08a27793_4ffc9f4a_3b917355_ef23793d_c15d58cc/prog.go:20 +0x25

这是我的代码:

package main

import "tour/pic"

func Pic(dx, dy int) [][]uint8 {
    fmt.Printf("%d x %d\n\n", dx, dy)

pixels := make([][]uint8, 0, dy)

for y := 0; y < dy; y++ {
    pixels[y] = make([]uint8, 0, dx)

    for x := 0; x < dx; x++ {
        pixels[y][x] = uint8(x*y)
    }
}

return pixels
}

func main() {
    pic.Show(Pic)
}

对于我一生,我找不到问题!


问题答案:

切片

对于字符串,数组,指向数组的指针或切片a,主表达式

a [低:高]

构造一个子字符串或切片。索引表达式low和high选择哪些元素出现在结果中。结果的索引从0开始,长度等于高-低。

对于数组或字符串,索引low和high必须满足0 <= low <= high <= length;对于切片,上限是容量而不是长度。

指标

形式的主要表达

斧头]

表示由x索引的数组,切片,字符串或映射的元素。值x分别称为索引或映射键。适用以下规则:

对于类型A或* A(其中A是数组类型),或者对于类型S(其中S是切片类型):

x must be an integer value and 0 <= x < len(a)

a[x] is the array element at index x and the type of a[x] is
the element type of A

if a is nil or if the index x is out of range, a run-time panic occurs

制作切片,地图和通道

make(T, n)       slice      slice of type T with length n and capacity n
make(T, n, m)    slice      slice of type T with length n and capacity m

y必须是整数值,并且0 <= y <len(pixel [] uint8)。x必须是整数值,并且0 <= x <len(pixel [] []
uint8)。例如,

package main

import "tour/pic"

func Pic(dx, dy int) [][]uint8 {
    pixels := make([][]uint8, dy)
    for y := 0; y < dy; y++ {
        pixels[y] = make([]uint8, dx)
        for x := 0; x < dx; x++ {
            pixels[y][x] = uint8(x * y)
        }
    }
    return pixels
}

func main() {
    pic.Show(Pic)
}


 类似资料:
  • 问题内容: 我有一个类似MultiIndex的系列: 我想获得s [‘b’]值,其中第二个索引(’ ‘)在2到10之间。 在第一个索引上切片可以正常工作: 但不是第二种,至少从似乎是两种最明显的方式来看: 1)这将返回元素1至4,与索引值无关 但是,如果我反转索引,并且第一个索引是整数,第二个索引是字符串,则可以正常工作: 问题答案: 正如Robbie-Clarken回答的那样,从0.14开始,您

  • 问题内容: 为什么不导致错误?既然如此,其背后的动机是什么? 从这种行为,我可以假设在本质上/内部与并不相同,即使两者都导致相同的字符串。 问题答案: 没错!和根本不同,并且在序列范围之外进行切片(至少对于内置对象而言)不会导致错误。 起初可能令人惊讶,但是当你考虑它时,这是有道理的。索引返回单个项目,但切片返回项目的子序列。因此,当你尝试索引不存在的值时,没有任何返回值。但是,当你在边界之外对序

  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 问题内容: package main 在上面提到的程序中,即使我们正在从is [2]到on病房访问元素,并且片中只有2个元素,也没有为is [2:]感到恐慌。为什么会这样呢? 问题答案: 切片表达式的go规范阐明了切片所用索引的要求: 如果0 <=低<=高<=最大<= cap(a),则索引在范围内,否则它们超出范围。 对于索引表达式,相关要求是: 如果0 <= x <len(a),则索引x处于范围

  • 问题内容: 我有以下功能,该功能从终端接收命令并根据输入显示内容。看起来很简单,如果用户键入“ add”,则系统将打印一行,如果用户未键入任何内容,则将打印其他内容。 只要用户类型添加,它就起作用。如果用户未输入任何内容,则会引发 紧急情况:运行时错误:GoLang中的索引超出范围 为什么是这样? 问题答案: 如果用户不提供任何输入,则该数组为空。这意味着即使索引超出范围,也无法访问。 您可以在检

  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素