random - 使用 math/rand 在 golang 中生成随机变量

标签 random go

我正在尝试为 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。

固定代码: http://play.golang.org/p/3D9osMzRRb

关于random - 使用 math/rand 在 golang 中生成随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28931015/

相关文章:

c++ - 有没有办法从 C++ 中的枚举类中获取随机数?

c++ - 简单的数字猜谜游戏。 C++

http - 是否可以同时运行 http.ListenAndServe() AND ReadFromUDP() ?

Go channel 不适用于生产者/消费者样本

java - 让我的圆圈随机消失,并在随机几秒后再次出现

java - 从有界 nextInt(int bound) 结果中查找 Java.util.Random 种子

c++ - 多维字符数组 - 如何用随机字符填充它?

rest - 我的其余 api 端点中的删除请求正文为空

去教程: what is the & doing in this line?

sql - 我应该将常见的 SQL 查询或 CTE 分开并放在一个变量中吗?