Generating Random Numbers in a Range in Java – 在Java中生成一个范围内的随机数

最后修改: 2019年 9月 8日

中文/混合/英文(键盘快捷键:t)

1. Overview

1.概述

In this tutorial, we’ll explore different ways of generating random numbers within a range.

在本教程中,我们将探讨在一个范围内生成随机数的不同方法。

2. Generating Random Numbers in a Range

2.在一定范围内生成随机数

2.1. Math.random

2.1.Math.random

Math.random gives a random double value that is greater than or equal to 0.0 and less than 1.0.

Math.random给出一个随机的double值,大于或等于0.0,小于1.0。

Let’s use the Math.random method to generate a random number in a given range [min, max):

让我们使用Math.random方法来生成一个给定范围内的随机数[min, max)

public int getRandomNumber(int min, int max) {
    return (int) ((Math.random() * (max - min)) + min);
}

Why does that work? Let’s look at what happens when Math.random returns 0.0, which is the lowest possible output:

为什么会有这样的效果?让我们看看当Math.random返回0.0时发生了什么,这是最可能的输出。

0.0 * (max - min) + min => min

So, the lowest number we can get is min.

因此,我们能得到的最低数字是min

Since 1.0 is the exclusive upper bound of Math.random, this is what we get:

由于1.0是Math.random的专属上界,这就是我们得到的结果。

1.0 * (max - min) + min => max - min + min => max

Therefore, the exclusive upper bound of our method’s return is max.

因此,我们方法的返回值的专属上界是max

In the next section, we’ll see this same pattern repeated with Random#nextInt.

在下一节,我们将看到同样的模式在Random#nextInt中重复出现。

2.2. java.util.Random.nextInt

2.2.java.util.Random.nextInt

We can also use an instance of java.util.Random to do the same.

我们也可以使用java.util.Random的一个实例来做同样的事情。

Let’s make use of the java.util.Random.nextInt method to get a random number:

让我们利用java.util.Random.nextInt方法来获得一个随机数。

public int getRandomNumberUsingNextInt(int min, int max) {
    Random random = new Random();
    return random.nextInt(max - min) + min;
}

The min parameter (the origin) is inclusive, whereas the upper bound max is exclusive.

min参数(原点)是包容的,而上限max是排他的。

2.3. java.util.Random.ints

2.3. java.util.Random.ints

The java.util.Random.ints method returns an IntStream of random integers.

java.util.Random.ints方法返回一个随机整数的IntStream

So, we can utilize the java.util.Random.ints method and return a random number:

因此,我们可以利用java.util.Random.ints方法,返回一个随机数。

public int getRandomNumberUsingInts(int min, int max) {
    Random random = new Random();
    return random.ints(min, max)
      .findFirst()
      .getAsInt();
}

Here as well, the specified origin min is inclusive, and max is exclusive.

这里也是如此,指定的原点min是包容的,max是排斥的。

3. Conclusion

3.结论

In this article, we saw alternative ways of generating random numbers within a range.

在这篇文章中,我们看到了在一个范围内生成随机数的其他方法。

Code snippets, as always, can be found over on GitHub.

像往常一样,可以在GitHub上找到代码片段