如何生成介于0和n之间的随机数?
当前回答
您可以使用ruby rand方法,如下所示:
rand(n+1)
您需要使用n+1,因为rand方法返回任何大于或等于0但小于传递的参数值的随机数。
其他回答
虽然您可以使用rand(42-10)+10来获得10到42之间的随机数(其中10是包含的,42是不包含的),但自Ruby 1.9.3以来,有一种更好的方法,您可以调用:
rand(10...42) # => 13
通过需要我的backports gem,可用于所有版本的Ruby。
Ruby1.9.2还引入了Random类,因此您可以创建自己的随机数生成器对象,并具有一个很好的API:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Random类本身充当随机生成器,因此可以直接调用:
Random.rand(10...42) # => same as rand(10...42)
关于Random.new的注释
在大多数情况下,最简单的方法是使用rand或Random.rand。每次你想要一个随机数时,创建一个新的随机生成器是一个非常糟糕的主意。如果您这样做,您将获得初始种子算法的随机财产,与随机生成器本身的财产相比,这些属性非常糟糕。
如果您使用Random.new,那么应该尽可能少地调用它,例如,一次调用MyApp::Random=Random.nnew,并在其他地方使用它。
Random.new有帮助的情况如下:
您正在编写一个gem,不想干扰主程序可能依赖的rand/Random.rand序列您需要单独的可重复随机数序列(例如每个线程一个)您希望能够保存和恢复可复制的随机数序列(就像随机对象可以编组一样简单)
你可以做rand(范围)
x = rand(1..5)
使用rand(范围)
来自Ruby随机数:
如果你需要一个随机整数来模拟一个六面骰子,你可以使用:1+rand(6)。掷骰子可以用2+rand(6)+rand(4)模拟。最后,如果你只需要一个随机浮点数,只需要调用rand而不需要参数。
正如Marc AndréLafortune在下面的回答中所提到的(请投票),Ruby 1.9.2有自己的Random类(Marc Andreé亲自帮助调试,因此该特性的目标是1.9.2)。
例如,在这个需要猜10个数字的游戏中,您可以使用以下方法初始化它们:
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
注:
使用Random.new.rand(20..30)(使用Random.new)通常不是一个好主意,正如Marc AndréLafortune(再次)在他的回答中详细解释的那样。但是,如果不使用Random.new,那么类方法rand只接受一个最大值,而不是一个Range,正如banister(大力)在注释中指出的(以及Random的文档中所记录的)。只有实例方法可以采用Range,如生成7位数的随机数所示。
这就是为什么Random.new.rand(20..30)的等效值为20+Random.rand(11),因为Random.rand(int)返回“大于或等于零且小于参数的随机整数”。20..30包括30,我需要找到一个介于0和11之间的随机数,不包括11。
您可以简单地使用random_number。
如果给定正整数为n,random_number返回一个整数:0<=random_nnumber<n。
这样使用:
any_number = SecureRandom.random_number(100)
输出将是0到100之间的任何数字。
您可以使用ruby rand方法,如下所示:
rand(n+1)
您需要使用n+1,因为rand方法返回任何大于或等于0但小于传递的参数值的随机数。
推荐文章
- 如何找到包含匹配值的哈希键
- 未初始化的常量ActiveSupport::Dependencies::Mutex (NameError)
- 如何在Rails中找到当前的路由?
- 在Ruby中->运算符叫什么?
- Rails参数解释?
- Ruby中DateTime和Time的区别
- 如何从代理服务器后面更新Ruby Gems (ISA-NTLM)
- JS生成随机布尔值
- 如何用另一个键替换哈希键
- 添加一个CSS类<%= f.submit %>
- 从数组中获取随机项
- attr_accessor和attr_accessible的区别
- 如何从Ruby文件路径中获得没有扩展名的文件名
- 创建新用户时出现ActiveModel::ForbiddenAttributesError
- rvm安装失败:“rvm不是一个函数”