我正在尝试生成因子3 ||的数字。数组中的5个。
这是我的代码的副本:
package main
import "fmt"
func main() {
i := 0
for i < 1000 {
var nums []int
if i%3 == 0 || i%5 == 0 {
nums := append(nums, i)
fmt.Println(nums)
}
i++
}
}
不幸的是,通过覆盖nums [0]上的值,这并没有按计划进行。这是我终端输出的最后几个值。
[981]
[984]
[985]
[987]
[990]
[993]
[995]
[996]
[999]
我在做什么错了?
更新
也尝试过:
var nums []int // initialize the slice outside for loop
for i < 1000 {
if i%3 == 0 || i%5 == 0 {
nums = append(nums, i) // append to the slice outside loop not create a new one using short variable declaration
fmt.Println(nums)
}
i++
}
但结果相同
答案 0 :(得分:5)
这是因为您正在创建[]int
slice的新变量,而不是追加到创建的外部if条件。在循环之外创建[]int
切片,并且不要在if条件内使用短声明创建新变量。
package main
import (
"fmt"
)
func main() {
i := 0
var nums []int
for i < 1000 {
if i%3 == 0 || i%5 == 0 {
nums = append(nums, i)
}
i++
}
fmt.Println(nums)
fmt.Println(len(nums), cap(nums)) // check for length and capacity of slice to know the size of slice after appending all data
}
Go playground上的工作代码