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
}
我正在尝试使用切片和 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
}