随机数在循环里不变是什么原因

// 生成随机数
func MakeRandInt() int {
    min := 240
    max := 800
    rand.Seed(time.Now().UnixNano())
    number := rand.Intn(max-min) + min

    return number
}
// 调用
for _, v := range data {
   // 生成的随机数一直是一个
   collection.Height = helpers.MakeRandInt()
}
最佳答案

用闭包,如下:


var MakeRandInt = func() func() int {
    rand.Seed(time.Now().UnixNano())
    min := 240
    max := 800
    return func() int {
        return rand.Intn(max-min) + min
    }
}()
1年前 评论
讨论数量: 6

因为你的随机种子也在循环中

1年前 评论

你这个,最后的结果就是最后一个随机数啊。要看是不是一个,需要把随机数存到slice里

1年前 评论

用你代码在 for 里 fmt.Println(helpers.MakeRandInt()) , 每次结果都是随机的,因为你在for里赋值,然后在外面使用了这个值?导致值里只是最后一次随机的结果

1年前 评论

我想要不改变调用方式,怎么才能解决呢,只改变MakeRandInt()函数

1年前 评论

send调用一次就ok了,最好在全局初始化的地方;
函数里面就不要写 下面这个代码了

 rand.Seed(time.Now().UnixNano())

不然是同一个seed,循环出来就是同一个值

1年前 评论

用闭包,如下:


var MakeRandInt = func() func() int {
    rand.Seed(time.Now().UnixNano())
    min := 240
    max := 800
    return func() int {
        return rand.Intn(max-min) + min
    }
}()
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!