生成范围内的随机整数(代码)

时间:2011-08-19 10:20:28

标签: java algorithm

  

可能重复:
  Java: generating random number in a range

我无法理解班级Random及其方法中发生了什么。 有人会解释一下吗,PLZ?

还是有更简单的方法来生成随机数?

注意:我想了解函数的代码(Random.nextInt),而不是如何使用它。

2 个答案:

答案 0 :(得分:3)

如果你想要x(包括)和y(不包括)之间的随机整数,这就是你要做的:

int yourRandomNumber = new Random().nextInt(y-x) + x;

示例:如果您想随机选择[4,5,6,7],您将执行以下操作:

int yourRandomNumber = new Random().nextInt(4 /* i.e. 8-4 */) + 4;

答案 1 :(得分:1)

有什么难以理解的?有几种方法可以生成几乎所有类型的随机数...你想要的那个可能就是:

 int    nextInt(int n) 

从此随机数生成器的序列中返回一个伪随机,均匀分布的int值,介于0(包括)和指定值(不包括)之间。

编辑:你问这个功能是如何运作的。这也在函数的javadoc中解释。如果你对细节更感兴趣,你应该得到文档中引用的D. Knuth书(来自http://download.oracle.com/javase/1.4.2/docs/api/java/util/Random.html):

此类的实例用于生成伪随机数流。该类使用48位种子,使用线性同余公式进行修改。 (参见Donald Knuth,“计算机程序设计的艺术”,第2卷,第3.2.1节。)

如果使用相同的种子创建了两个Random实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列。为了保证此属性,为Random类指定了特定的算法。为了Java代码的绝对可移植性,Java实现必须使用此处显示的所有算法用于Random类。但是,Random类的子类允许使用其他算法,只要它们符合所有方法的一般合同。

Random类实现的算法使用受保护的实用程序方法,该方法在每次调用时最多可提供32个伪随机生成的位。

许多应用程序会发现Math类中的随机方法更易于使用。