当前位置: 首页 > 面试题库 >

如何正确播种随机数生成器

卜高超
2023-03-14
问题内容

我试图在Go中生成一个随机字符串,这是我到目前为止编写的代码

package main

import (
    "bytes"
    "fmt"
    "math/rand"
    "time"
)

func main() {
    fmt.Println(randomString(10))
}

func randomString(l int) string {
    var result bytes.Buffer
    var temp string
    for i := 0; i < l; {
        if string(randInt(65, 90)) != temp {
            temp = string(randInt(65, 90))
            result.WriteString(temp)
            i++
        }
    }
    return result.String()
}

func randInt(min int, max int) int {
    rand.Seed(time.Now().UTC().UnixNano())
    return min + rand.Intn(max-min)
}

我的执行速度很慢。使用进行播种time会在一定时间内带来相同的随机数,因此循环会一次又一次地迭代。如何改善我的代码?


问题答案:

每次设置相同的种子,您将获得相同的序列。因此,当然,如果您将种子设置为快速循环中的时间,则可能会多次调用相同的种子。

在您的情况下,在您调用randInt函数直到拥有不同的值之前,您正在等待时间(由Nano返回)。

对于所有伪随机库,您只需设置一次种子,例如在初始化程序时,除非您特别需要重现给定的序列(通常仅用于调试和单元测试)。

之后,您只需调用Intn即可获取下一个随机整数。

rand.Seed(time.Now().UTC().UnixNano())行从randInt函数移至main的开头,一切将会更快。

还请注意,我认为您可以简化字符串的构建:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    rand.Seed(time.Now().UTC().UnixNano())
    fmt.Println(randomString(10))
}

func randomString(l int) string {
    bytes := make([]byte, l)
    for i := 0; i < l; i++ {
        bytes[i] = byte(randInt(65, 90))
    }
    return string(bytes)
}

func randInt(min int, max int) int {
    return min + rand.Intn(max-min)
}


 类似资料:
  • 问题内容: JavaScript函数返回一个介于0到1之间的随机值,该值会根据当前时间自动播种(我相信类似于Java)。但是,我认为没有任何办法可以为其设置种子。 如何制作一个可以提供自己的种子值的随机数生成器,以使它生成可重复的(伪)随机数序列? 问题答案: 一种选择是http://davidbau.com/seedrandom,它是可播种的基于RC4的Math.random()插入式替换,具有

  • 问题内容: 我正在尝试在short原始数据类型的范围内(-32768,32767)生成随机整数。java Random对象仅生成正数。我将如何在该间隔内随机创建数字?谢谢。 问题答案: 您随机选择,然后减去

  • 本文向大家介绍如何生成一个随机数?相关面试题,主要包含被问及如何生成一个随机数?时的应答技巧和注意事项,需要的朋友参考一下  

  • 我已经编写了下面的代码。我已经运行了这个程序,它允许用户猜测正确的数字并成功返回消息。然而,我不能让它重新生成一个新的随机数?我也不能包括一个选项来询问用户是否想退出。请帮忙。谢谢你。

  • random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando