【问题标题】:Random number generator issues in RubyRuby 中的随机数生成器问题
【发布时间】:2013-06-10 04:12:49
【问题描述】:

我的目的只是用数字从 1 到 1 到 1000 之间的随机数填充一个数组。但是,在重复运行此代码(大约 50 次)后,我得到的最高数字是 120 ,只有两次超过 100。我的大多数数组都在 0 到 60 之间。这种行为对我来说似乎很奇怪。我是不是做错了什么?

my_array = []
i = 0
while i <= rand(1000)
    my_array << i 
    i += 1  
end

puts my_array.count
puts my_array

【问题讨论】:

  • 你在播种你的随机化器吗?
  • 你的随机数是 while 循环中的守卫,你正在附加你认为是计数器的东西。
  • 查看我的代码后......每次循环时都会运行一个新的随机数吗?如果是这样,那就可以解释为什么它如此倾向于较小的数字。如果没有人回答,我会检查并报告。
  • 我希望每次评估条件时都会评估 rand(1000)

标签: ruby arrays random


【解决方案1】:

您的功能已损坏,因为您正在检查随机数。这样做:

(0..1000).collect{ rand(1000) }

这将返回一个包含一千个随机数的数组。

或者,更接近您的代码:

my_array = []
i = 0
while i <= 1000
    my_array << rand(1000) 
    i += 1  
end

根据评论,你想要的是:

(1..rand(1000))

(1..rand(1000)).to_a

第一个结果是一个“更容易随身携带”的范围,第二个结果是填充数组。

(编辑)注意:

(1..10) 包含在内 - (1..10).to_a == [1,2,3,4,5,6,7,8,9,10]

(1...10) 是部分排他的 - (1...10).to_a == [1,2,3,4,5,6,7,8,9] - 它不包括数组的结尾,但仍包括开头。

【讨论】:

  • 谢谢。我实际上是在尝试按顺序获取从 1 到 1 到 1000 之间的某个随机数的数组。
  • @Kewigro 没有随机的顺序。如果您希望它是连续的,则必须对其进行排序。
  • 在 Ruby 中,您通常描述的是您想要什么,而不是获得它的秘诀。你想要的是一个从 1 到随机数的数组,所以这就是你写的。
  • 好的。我只是在学习红宝石。您的示例有助于突出我所犯的错误,我曾怀疑但不知道如何解决。谢谢
【解决方案2】:

听起来像你想要的:

(1...rand(1000)).to_a

【讨论】:

  • 甚至没有#to_a。对于大多数应用程序来说,包含 Enumerable 的东西和数组一样好。
  • 好的,但是 OP 专门要求一个数组。
【解决方案3】:

此外,我已经修改了我的代码以反映我最初想要完成的任务。我的问题是每次循环我的代码时,我都会生成一个新的随机数。正因为如此,随着“i”向 1000 递增,生成一个低于“i”的随机数的可能性越来越大。我的解决方案虽然不如我接受的上述解决方案那么优雅,但是将随机数存储在一个变量中,然后再尝试在循环中使用它。再次感谢。这是修改后的代码:

my_array = []
i = 0
g = rand(1000)
while i <= g
    my_array << i 
    i += 1  
end

puts my_array.count
puts my_array

【讨论】:

  • 你可以像my_array = (1..g).to_a那样简单地做到这一点
  • 是的,看起来很不错。从现在开始,我将使用它。
猜你喜欢
  • 2016-05-26
  • 2018-01-03
  • 2013-10-21
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多