嗨,这个函数需要一个带有一些整数的数组,我的目标是有一个只有正整数的新数组。但是,我不断收到相同的错误消息: panic :运行时错误:索引超出范围
有人可以帮我吗?
func domath(newarray[] int, i int, array[] int)([]int){
if i < len(newarray) {
if newarray[i] < 0{
i ++
domath(newarray, i, array)
}
if newarray[i] >= 0 {
array = append(array, newarray[i])
i ++
domath(newarray, i, array)
}
}
return array
}
最佳答案
该实现的问题是它在第一个if块内递增i,然后使用新的i值在第二个if块上检查newarray [i]> = 0,因此当您使用以下命令调用domath(a,x,b)时: x = len(a)-1,它尝试执行超出范围的newarray [x + 1](即newarray [len(newarray)])。
您可能打算写类似:
func domath(newarray []int, i int, array []int) []int {
if i < len(newarray) {
if newarray[i] < 0 {
return domath(newarray, i+1, array)
}
if newarray[i] >= 0 {
array = append(array, newarray[i])
return domath(newarray, i+1, array)
}
}
return array
}
您的算法的简化版本可以是:
func domath(newarray []int, i int, array []int) []int {
if len(newarray) == i {
return array
}
if newarray[i] >= 0 {
array = append(array, newarray[i])
}
return domath(newarray, i+1, array)
}
但是,您可能应该使用一种更惯用的实现,例如以下实现,它也会更快一些:
func domath(ns []int) []int {
var ps []int
for _, n := range ns {
if n >= 0 {
ps = append(ps, n)
}
}
return ps
}
关于go - Golang panic : runtime error: index out of range,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41356117/