Lua的math.random无法正常工作

17

我想创造一些东西,一直在寻找生成随机数的方法,但是无论我在哪里测试我的代码,结果总是出现非随机数。 这是我写的一个例子。

local lowdrops =  {"Wooden Sword","Wooden Bow","Ion Thruster Machine Gun Blaster"}
local meddrops =  {}
local highdrops = {}

function randomLoot(lootCategory)
    if lootCategory == low then
        print(lowdrops[math.random(3)])
    end
    if lootCategory == medium then

    end
    if lootCategory == high then

    end
end

randomLoot(low)

无论在哪里测试我的代码,我都得到相同的结果。例如,当我在这里测试代码http://www.lua.org/cgi-bin/demo时,它总是以“离子推进器机枪炮”结束,不会随机化。就这样简单地测试。

random = math.random (10)
print(random)

给了我9,我是否遗漏了什么?

1个回答

28

在使用math.random()之前,您需要先运行math.randomseed()函数,就像这样:

math.randomseed(os.time())

可能会存在的一个问题是在某些平台上第一个数字可能不太“随机化”。因此,更好的解决方案是在实际使用前弹出一些随机数:

math.randomseed(os.time())
math.random(); math.random(); math.random()

参考资料:Lua 数学库教程


运行更新版本的代码,加上那一行,在这个Lua代码演示http://www.lua.org/cgi-bin/demo中似乎可以解决问题。然而,在我的Lua Eclipse IDE上运行相同的代码仍然出现了我之前遇到的原始问题,它似乎没有随机化,这可能是我的IDE的问题吗? - user2677006
1
尝试在math.randomseed()后立即调用math.random()一次,看看是否固定。 - Yu Hao
这似乎解决了问题,我不确定是怎么做到的,但非常感谢。 - user2677006
我刚遇到了这个问题,想知道为什么会发生。有人知道吗? - deathemperor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接