我正在尝试为 golang 中的程序模拟抛硬币。我正在尝试使用 math/rand
并使用 time
对其进行播种。
import (
"fmt"
"math/rand"
"time"
)
根据我在此处和在线的其他地方查找的内容,我的实现应该有效:
func main() {
var random int
var i int
var j int
for j != 5 && i != 5 {
rand.Seed(time.Now().UnixNano())
random = rand.Intn(1)
if random == 0 {
i = i + 1
}
if random == 1 {
j = j + 1
}
}
fmt.Println(i, j)
}
但是,每次我运行它时,随机总是最终为 0。种子也没有改变,这让我很困惑。由于它在循环内,每次播种时以纳秒为单位的时间不应该改变吗?
最佳答案
不要在循环中重新播种,只做一次。
rand.Intn(n)
返回值 >= 0 且 < n。所以rand.Intn(1)
只能返回0,你要rand.Intn(2)
得到0或1。
关于random - 使用 math/rand 在 golang 中生成随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28931015/