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

我试图构建一个代码,当用户输入一个数字序列时,它将通过序列比较每个数字,并且对于序列中的每个新的最大数字,它将对所有以前的数字求和


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 我可以'想不出解决这个问题的方法。


梵蒂冈之花
浏览 84回答 1
1回答

米脂

只有numeri[i]被添加到sum,并且您的循环永远不会访问最后一项 ( i < num - 1),那么最后一项怎么可能被添加呢?遍历整个切片,执行加法,但如果您不在最后一个元素,则只与下一个元素进行比较。如果我们在最后一个,我们也想打印,所以我们可以使用一个条件i == max || numeri[i] > numeri[i+1]如果i == max(短路评估),将不会执行与下一个元素的比较。例如:max := len(numeri) - 1for i, v := range numeri {&nbsp; &nbsp; sum += v&nbsp; &nbsp; if i == max || v > numeri[i+1] {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(sum)&nbsp; &nbsp; &nbsp; &nbsp; sum = 0&nbsp; &nbsp; }}这将输出(在Go Playground上尝试):[1 2 13 0 7 8 9 -1 0 2]16241
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go