为了账号安全,请及时绑定邮箱和手机立即绑定

最后一次迭代被跳过并且不在 for 循环中打印

最后一次迭代被跳过并且不在 for 循环中打印

Go
梵蒂冈之花 2022-12-26 10:12:37
我试图构建一个代码,当用户输入一个数字序列时,它将通过序列比较每个数字,并且对于序列中的每个新的最大数字,它将对所有以前的数字求和func main() {    var numeri []int    numeri = GetInputSlice()    fmt.Println(numeri)    var sum int    num := len(numeri)    for i := 0; i < num - 1 ; i++ {        sum += numeri[i]        if numeri[i] > numeri[i+1] || numeri[i] == num - 1 {            fmt.Println(sum)            sum = 0        }    }}完整代码在这里:https ://go.dev/play/p/13ljQPmKaRA如果我输入这个数字序列 [1 2 13 0 7 8 9 -1 0 2] 我想得到 16、24 和 1。但是在我的代码中我只得到 16 和 24 而没有得到最后一个 1 我可以'想不出解决这个问题的方法。
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

只有numeri[i]被添加到sum,并且您的循环永远不会访问最后一项 ( i < num - 1),那么最后一项怎么可能被添加呢?


遍历整个切片,执行加法,但如果您不在最后一个元素,则只与下一个元素进行比较。如果我们在最后一个,我们也想打印,所以我们可以使用一个条件


i == max || numeri[i] > numeri[i+1]

如果i == max(短路评估),将不会执行与下一个元素的比较。


例如:


max := len(numeri) - 1

for i, v := range numeri {

    sum += v

    if i == max || v > numeri[i+1] {

        fmt.Println(sum)

        sum = 0

    }

}

这将输出(在Go Playground上尝试):


[1 2 13 0 7 8 9 -1 0 2]

16

24

1


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信