我正在编写一个随机化数字的代码。我把math.randomseed(os.time())
放在循环中。代码如下:
for i = 1, 1000 do
math.randomseed( os.time() )
j = math.random(i, row-one)
u[i], u[j] = u[j], u[i]
for k = 1, 11 do
file:write(input2[u[i]][k], " ")
end
file:write"\n"
end
当我多次运行时,整个输出总是一样的。重新运行时,randomseed不应该阻止重复吗?
答案 0 :(得分:12)
在程序开始时调用math.randomseed
一次。没有必要在循环中调用它。
答案 1 :(得分:2)
通常,第一个随机值并非真正随机(但它绝不是真正随机的,它是一个伪随机数生成器)。 首先设置一个随机种子,然后随机生成几次。 试试这段代码,例如:
math.randomseed( os.time() )
math.random() math.random() math.random()
for i = 1, 1000 do
j = math.random(i, row-one)
u[i], u[j] = u[j], u[i]
for k = 1, 11 do
file:write(input2[u[i]][k], " ")
end
file:write"\n"
end
但是,您可以尝试http://lua-users.org/wiki/MathLibraryTutorial:
-- improving the built-in pseudorandom generator
do
local oldrandom = math.random
local randomtable
math.random = function ()
if randomtable == nil then
randomtable = {}
for i = 1, 97 do
randomtable[i] = oldrandom()
end
end
local x = oldrandom()
local i = 1 + math.floor(97*x)
x, randomtable[i] = randomtable[i], x
return x
end
end