我正在尝试为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.种子也不会改变,这让我感到困惑。因为它在循环内,所以每次播种时不应该以纳秒为单位改变时间吗?
答案 0 :(得分:5)
不要在循环中重新设置,只执行一次。
rand.Intn(n)
返回值> = 0且< ñ。因此rand.Intn(1)
只能返回0,您希望rand.Intn(2)
获得0或1。