我正在使用Corona SDK和Lua作为编程语言进行游戏。从表中获取随机数时,我很困惑使用以下哪一个?
math.random()
math.randomseed()
有人会详细说明它们之间的确切区别吗?所以我可以使用最好的一个。
答案 0 :(得分:5)
math.random
为您提供随机数字。您可能会在需要随机数的程序中多次调用它。
math.randomseed
确定从math.random
给出的随机数序列的起始位置。您可能会在需要随机数的程序中只调用一次。
在每次致电math.randomseed
之前,您需要致电math.random
,这似乎是一种常见的误解。这是错误的,会破坏math.random
的随机性。
答案 1 :(得分:2)
当您执行使用math.random
的程序而未设置math.randomseed
时,它通常会产生相同的随机数集。这是因为math.randomseed
负责为seed
带来的随机数设置默认math.random
(或算法生成器)。
这种一致性显然不是随机的。请允许我举一个例子 - 首先转到Lua Demo Website,然后插入这段代码:
for i = 1,10 do
print(math.random())
end
继续按下运行按钮,看看解释器每次都会产生相同的数字。但是,要更改生成随机数的“种子”,我们可以将“种子”设置为当前时间(因为当前时间不会重复)
这次去网站并多次执行此代码:
math.randomseed(os.time())
for i = 1,10 do
print(math.random())
end
您现在应该注意每次如何获得不同的数字。
答案 2 :(得分:1)
如果您在致电math.random()
时需要相同的顺序,则必须在致电math.randomseed(same number every time before calling)
之前设置math.random()
。
如果你想要一个不同的随机数序列,那么在调用math.randomseed(os.time())
之前通过math.random()
因为os.time()
将返回秒数的时间,所以每次都会有所不同。< / p>
请参阅以下链接并查看示例。
https://docs.coronalabs.com/api/library/math/randomseed.html