Golang 中 "n" 个切片值的总和

Sum of "n" Slices values in Golang

我正在尝试使用切片和 For 循环在 golang 中制作一个简单的平均计算器。

但是我在 VS 代码中遇到错误,这个:

panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]: main.main() C:/Desktop/cs50/week2/myarray.go:16 +0x134 exit status 2

我在 W10 上使用 VS 代码。

我的代码:

package main

import "fmt"

func main() {
    var n int
    scores := []uint{}
    var sumScores float32 = 0

    fmt.Println("How many scores?") //ask user how many values
    fmt.Scan(&n)                    //get how many values

    for i := 0; i < n; i++ {
        fmt.Printf("Scores: ")                     // ask for values
        fmt.Scan(&scores[i])                       // get values
        sumScores = sumScores + float32(scores[i]) // sum values
    }

    fmt.Printf("Average: %f\n", sumScores/float32(n)) //average value
}

知道哪里出了问题吗?

我认为这可能与我使用 float32 的 Slice 定义有关。

先谢谢你。

这非常有效,您只需指明切片的初始大小:

func main() {
    var n int
    var sumScores float32 = 0

    fmt.Println("How many scores?") //ask user how many values
    fmt.Scan(&n)                    //get how many values
    scores := make([]uint, n, n)

    for i := 0; i < n; i++ {
        fmt.Printf("Scores: ") // ask for values

        fmt.Scan(&scores[i])                       // get values
        sumScores = sumScores + float32(scores[i]) // sum values
    }

    fmt.Printf("Average: %f\n", sumScores/float32(n)) //average value
}

用于学习目的

按照您声明 scores 切片的方式,它只是一个空切片,因此您可以先附加到它,然后在新生成的位置扫描数字。 (但这肯定不是解决这个特定问题的方法)

func main() {
    var n int
    scores := []uint{}
    var sumScores float32 = 0

    fmt.Println("How many scores?") //ask user how many values
    fmt.Scan(&n)                    //get how many values

    for i := 0; i < n; i++ {
        fmt.Printf("Scores: ") // ask for values
        scores = append(scores, 0)
        fmt.Scan(&scores[i])                       // get values
        sumScores = sumScores + float32(scores[i]) // sum values
    }

    fmt.Printf("Average: %f\n", sumScores/float32(n)) //average value
}

scores := []uint{}

这是一个切片文字,你应该使用 Golang built-in 函数 append 来处理它。

就像@no0ob 的第二个例子,或者这个:

func main() {
    var n int
    var tmpVal uint
    scores := []uint{}
    var sumScores float32 = 0

    fmt.Println("How many scores?") //ask user how many values
    fmt.Scan(&n)                    //get how many values

    for i := 0; i < n; i++ {
        fmt.Printf("Scores: ") // ask for values
        fmt.Scan(&tmpVal) // save input to tmpVal
        scores = append(scores, tmpVal) // append tmpVal to scores
        sumScores = sumScores + float32(scores[i]) // sum values
    }

    fmt.Printf("Average: %f\n", sumScores/float32(n)) //average value
}