【问题标题】:Lua math.random() always gives the same number?Lua math.random() 总是给出相同的数字?
【发布时间】:2022-01-27 04:38:39
【问题描述】:

我希望某个项目的字符串包含 0 或 1。 所以我尝试了这个

local data = ""
for i=1, 5 do
    data = data .. math.random(2) - 1
end
print(data)

这个程序总是给出10111 作为结果。所以在搜索之后我得到了这个类似的问题。 Link 所以我改变了我的程序,就像那个程序中提到的那样

local data = ""
for i=1, 5 do
    math.randomseed(os.time())
    data = data .. math.random(2) - 1
end
print(data)

还有这个

local data = ""
for i=1, 5 do
    math.randomseed(os.time())
    math.random(2)
    math.random(2)
    math.random(2)
    data = data .. math.random(2) - 1
end
print(data)

所以当我也尝试这个时,它总是给出1111100000 作为输出。为什么?? 以及如何更正它以便我可以在我的字符串中随机获得 0 或 1??

【问题讨论】:

  • 考虑使用data = data .. math.random(0,1),如果你也觉得更清楚。

标签: random lua random-seed


【解决方案1】:

在循环之前添加种子:

local data = ""
math.randomseed(os.time())
for i=1, 5 do
    data = data .. math.random(2) - 1
end
print(data)

如果您重新设定或重新运行您的程序,请确保超过 1 秒,因为os.time() 返回以秒为单位的时间,以整数表示。

【讨论】:

  • 谢谢它的工作,但我想知道为什么我的代码不起作用?
  • 循环执行得如此之快以至于os.time()几乎无法改变:它是以秒为单位的时间。
  • 哦,谢谢你的解释。我在想它像其他语言一样提供毫秒。感谢您纠正我...
  • 我不确定循环时间是否超过 1 毫秒。你可以得到更高精度的时间using socket.
猜你喜欢
  • 2021-06-07
  • 2015-11-20
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多