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

Golang 中“n”个切片值的总和

Golang 中“n”个切片值的总和

Go
HUWWW 2022-12-19 17:52:23
我正在尝试使用 Slices 和 For Loops 在 golang 中制作一个简单的平均计算器。但是我在 VS 代码中遇到错误,这个错误:恐慌:运行时错误:索引超出范围 [0],长度为 0 goroutine 1 [正在运行]:main.main() C:/Desktop/cs50/week2/myarray.go:16 +0x134 退出状态 2我在 W10 上使用 VS 代码。我的代码:package mainimport "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 定义有关。提前谢谢你。
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


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

}


查看完整回答
反对 回复 2022-12-19
?
FFIVE

TA贡献1797条经验 获得超6个赞

分数 := []uint{}


这是一个切片字面量,你应该使用 Golang 内置函数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

}


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号