Lua随机数生成器总是产生相同的数字

问题描述 投票:0回答:3

我查了几个关于如何用lua生成随机数的教程,每个教程都说要使用math.random(),所以我就这么做了。然而,每次我使用它时,我每次都会得到相同的数字,我尝试重写代码,并且我总是得到尽可能小的数字。我什至包含了一个基于操作系统时间的随机种子。代码如下。

require "math"
math.randomseed(os.time())
num = math.random(0,10)
print(num)
random lua
3个回答
0
投票

我正在使用这样的随机函数:

math.randomseed(os.time())
num = math.random() and math.random() and math.random() and math.random(0, 10)

这工作正常。另一种选择是改进内置随机函数,如here所述。


0
投票

这可能有帮助!我必须使用这些函数来编写一个生成 Nano ID 的类。我基本上使用了 os.clock() 函数中的毫秒,并将其用于 math.randomseed()。

NanoId = {
  validCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",

  generate = function (size, validChars)

    local response = ""
    local ms = string.match(tostring(os.clock()), "%d%.(%d+)")
    local temp = math.randomseed(ms)

    if (size > 0 and string.len(validChars) > 0) then
      for i = 1, size do
        local num = math.random(string.len(validChars))

        response = response..string.sub(validChars, num, num)
      end
    end

    return response
    end
}

function NanoId:Generate()
  return self.generate(21, self.validCharacters)
end

-- Runtime Testing

for i = 1, 10 do
    print(NanoId:Generate())
end

--[[ 

Output:

>>> p2r2-WqwvzvoIljKa6qDH
>>> pMoxTET2BrIjYUVXNMDNH
>>> w-nN7J0RVDdN6-R9iv4i-
>>> cfRMzXB4jZmc3quWEkAxj
>>> aFeYCA2kgOx-s4UN02s0s
>>> xegA--_EjEmcDk3Q1zh7K
>>> 6dkVRaNpW4cMwzCPDL3zt
>>> R2Fct5Up5OwnHeExDnqZI
>>> JwnlLZcp8kml-MHUEFAgm
>>> xPr5dULuv48UMaSTzdW5J

]]

0
投票

math.random()
之后添加
math.randomseed(os.time())
似乎适合我。

math.randomseed(os.time())
math.random() 
num = math.random(0, 10)
print(num)

io.read()
© www.soinside.com 2019 - 2024. All rights reserved.