在特定范围内生成随机整数

问题:

我试图用Java生成一个随机int值,但是在一个特定的范围内。
 例如:
我的范围是 10,意味着是最小的可能值,10是最大的。这些数字之间的任何其他数字也可能是一个值。
在Java中,Math类中有一个方法random(),它返回0.01.0之间的double值。在类Random中有方法nextInt(int n),它返回0(包括)和ñ(排除)范围内的随机int值。我找不到一个方法,它返回两个数字之间的随机整数值。
我已经尝试了以下的事情,但我仍然有问题:
(最小和最大是最小和最大的数字)。
 解决方案1:

randomNum = minimum + (int)(Math.random() * maximum); 

 Problem:
 randomNum可以大于maximum
 解决方案2:

Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;

 Problem:
 randomNum可以小于minimum
如何解决这些问题?
我也试过浏览档案并发现:

但是我无法解决问题。

回答:

Java 1.7或更高版本中,标准的做法如下:

import java.util.concurrent.ThreadLocalRandom;

// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);

请参阅the relevant JavaDoc。这种方法的优点是不需要明确地初始化java.util.Random实例,如果不适当地使用,这可能是混乱和错误的根源。
然而,相反,没有办法明确设置种子,因此在诸如测试或保存游戏状态或类似的情况下可能难以再现结果。在这些情况下,可以使用以下所示的Java Java 1.7以前的技术。
 Java 1.7之前,标准的做法如下:

import java.util.Random;

/**
 * Returns a pseudo-random number between min and max, inclusive.
 * The difference between min and max can be at most
 * 
请参阅the relevant JavaDoc。实际上,java.util.Random类往往比java.lang.Math.random()更好
特别地,当在标准库内有一个简单的API来完成任务时,不需要重新设计随机整数生成轮。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Generating random integers in a specific range

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

30 − 25 =