英文:
Nested loops array in Go not behaving like other languages' array
问题
为什么这个函数打印出一个数组[83 83 83 83 83]
而不是[98 93 77 82 83]
?
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{ 98, 93, 77, 82, 83, }
for i, _ := range x {
for j, _ := range scores {
// 用 scores 数组的元素填充 x 数组
x[i] = scores[j]
}
}
fmt.Println(x)
}
这个函数打印出[83 83 83 83 83]
的原因是,内部的嵌套循环将 scores 数组的每个元素都赋值给了 x 数组的每个元素。由于内部循环的 j 始终从 0 到 4 循环,所以每次都将 scores[0] 的值赋给了 x 数组的每个元素,因此最终 x 数组中的所有元素都是 scores[0] 的值,即 83。如果你想要得到[98 93 77 82 83]
的结果,可以将内部循环的赋值语句修改为x[i] = scores[i]
。这样,x 数组的每个元素将分别与 scores 数组的对应元素进行赋值。
英文:
Why is this function printing out an array of [83 83 83 83 83]
instead of [98 93 77 82 83]
?
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{ 98, 93, 77, 82, 83, }
for i, _ := range x {
for j, _ := range scores {
// fill up x array with elements of scores array
x[i] = scores[j]
}
}
fmt.Println(x)
}
答案1
得分: 5
因为你正在用scores
的每个值填充x[i]
。你有一个额外的循环。
由于切片scores
的最后一个值是83,你多次填充x
,每个位置都是83。
更简单的方法是:
for i, _ := range x {
// 用scores数组的元素填充x数组
x[i] = scores[i]
}
输出:[98 93 77 82 83]
英文:
Because you are filling x[i]
with each of the values of scores
.
You have one extra loop.
Since the last value of the slice scores
is 83, you are filling x
one more time, with 83 for each slot.
Simpler would be:
for i, _ := range x {
// fill up x array with elements of scores array
x[i] = scores[i]
}
Output: [98 93 77 82 83]
答案2
得分: 1
你有太多的循环。重写如下:
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{98, 93, 77, 82, 83}
for i := range x {
x[i] = scores[i]
}
fmt.Println(x)
}
输出:
[98 93 77 82 83]
在这种情况下,你可以简单地写成:
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{98, 93, 77, 82, 83}
x = scores
fmt.Println(x)
}
输出:
[98 93 77 82 83]
英文:
You have too many loops. Write:
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{98, 93, 77, 82, 83}
for i := range x {
x[i] = scores[i]
}
fmt.Println(x)
}
Output:
[98 93 77 82 83]
In this case, you could simply write:
package main
import "fmt"
func main() {
var x [5]float64
scores := [5]float64{98, 93, 77, 82, 83}
x = scores
fmt.Println(x)
}
Output:
[98 93 77 82 83]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论