gpt4 book ai didi

arrays - 紧急运行时错误索引超出范围 [3],长度为 3

转载 作者:行者123 更新时间:2023-12-01 22:42:39 28 4
gpt4 key购买 nike

面临错误 Panic Runtime Error index out of range [3] with length 3。以下错误似乎表明索引超出范围或长度

panic: runtime error: index out of range [3] with length 3
main.romanToInt(0xc000022080, 0x3, 0x8)
solution.go, line 15
main.__helper__(...)
solution.go, line 30
main.main()
solution.go, line 58
func romanToInt(s string) int {
romanNum := map[byte]int{
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}

var sum int = 0
for i := 0; i <= len(s); i++ {
currentInt := romanNum[s[i]]
nextInt := romanNum[s[i+1]]
if currentInt < nextInt {
sum = sum + (nextInt - currentInt)
i += 1
} else {
sum = sum + currentInt
}
}
return sum
}
错误指向
nextInt := romanNum[s[i+1]]

最佳答案

假设您传递了字符串 XII到你的功能。这使得 len(s) 3 ,这意味着你的循环体将(如果没有发生 panic )执行 4 次(当 i0123 因为您的条件是 i <= len(s)
i 的迭代中是 2 (即它指的是 I 中的第二个 XII ,即最后一个字符),当该行

nextInt := romanNum[s[i+1]]
尝试访问下一个字符( i+1 将是 3 )然后它将超出范围。请记住, slice/数组是 0索引。这就是 panic 的原因。
如果在 i 时没有发生 panic ,那也毫无值(value)。是 2 ,那么它肯定会在下一次迭代中发生,其中 i3 , 自 3超出 s 的范围,在以下行:
currentInt := romanNum[s[i]]
要解决此问题,您需要重新考虑如何处理循环条件。使用 <=这里很可能会给你带来问题。此外,在循环体中,您需要考虑当您查看字符串中的最后一个字符时,没有下一个字符,但您的代码只是假设有。解决这两个问题应该可以帮助您克服问题。

关于arrays - 紧急运行时错误索引超出范围 [3],长度为 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63431500/

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