Go语言for循环最后一次迭代被跳过未打印结果问题修复
问题修复
两处错误导致最后一个结果缺失:
- 循环范围写小了:
i < num - 1的终止条件会让最后一个元素根本不进入循环,最后一段的数值没被加到sum里 - 逻辑有问题:一是多余的
numeri[i] == num - 1判断纯靠巧合触发第二段输出,没有实际逻辑意义;二是没有处理遍历到切片末尾的兜底输出,最后一段没有下降沿触发打印,自然不会出结果。
修正后可运行代码
func main() { var numeri []int numeri = GetInputSlice() fmt.Println(numeri) var sum int num := len(numeri) for i := 0; i < num; i++ { sum += numeri[i] // 两个触发打印的场景:遇到下降沿(当前值大于下一个值)、遍历到切片最后一位 if (i < num-1 && numeri[i] > numeri[i+1]) || i == num-1 { fmt.Println(sum) sum = 0 } } }
针对你给出的测试序列[1 2 13 0 7 8 9 -1 0 2],上述代码会依次输出16、24、1,和预期结果完全一致。
补充说明:如果你最开始描述的「遇到序列中新的最大值才求和」是真实需求,还需要新增变量单独记录遍历过程中的历史最大值,每次当前值超过历史最大值时才触发求和输出——当前修正是完全匹配你给出的测试用例预期结果实现的。
内容的提问来源于stack exchange,提问作者Adam Reddington
相关产品推荐
相关产品推荐

