如何生成介于0和n之间的随机数?
当前回答
您可以简单地使用random_number。
如果给定正整数为n,random_number返回一个整数:0<=random_nnumber<n。
这样使用:
any_number = SecureRandom.random_number(100)
输出将是0到100之间的任何数字。
其他回答
嗯,我想通了。显然有一个内置(?)函数叫做rand:
rand(n + 1)
如果有人回答了更详细的答案,我会将其标记为正确答案。
使用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。
您可以使用ruby rand方法,如下所示:
rand(n+1)
您需要使用n+1,因为rand方法返回任何大于或等于0但小于传递的参数值的随机数。
别忘了先用srand()为RNG种子。
您可以简单地使用random_number。
如果给定正整数为n,random_number返回一个整数:0<=random_nnumber<n。
这样使用:
any_number = SecureRandom.random_number(100)
输出将是0到100之间的任何数字。
推荐文章
- 确定ActiveRecord对象是否为New
- Rails中的OO设计:在哪里放置东西
- 如何在Heroku上重新启动rails服务器?
- respond_to块如何工作?
- 给定一个类,查看实例是否有方法(Ruby)
- rails局部模板中的可选局部变量:如何退出(defined?foo)混乱?
- 在日历应用程序中建模重复事件的最佳方法是什么?
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- 如何在c++中生成一个随机数?
- 如何创建一个私有类方法?
- rails耙任务是否提供对ActiveRecord模型的访问?
- 无法安装pg gem
- 双* (splat)操作符做什么
- 如何使用Ruby on Rails进行HTTP请求?
- (1) libcurl不支持或禁用https协议