Java –随机长,浮点,整数和双精度

Java – Random Long, Float, Integer and Double

这份快速教程将说明如何使用纯Java和Apache Commons Math库生成长篇小说。

本文是Baeldung上的" Java – Back to Basic"系列的一部分。

1.生成无限制的多头

让我们从生成Long开始:

1
2
3
4
@Test
public void givenUsingPlainJava_whenGeneratingRandomLongUnbounded_thenCorrect() {
    long generatedLong = new Random().nextLong();
}

2.生成范围内的多头

2.1。纯Java随机长

接下来-让我们看一下创建一个随机有界Long-即在给定范围或间隔内的Long值:

1
2
3
4
5
6
@Test
public void givenUsingPlainJava_whenGeneratingRandomLongBounded_thenCorrect() {
    long leftLimit = 1L;
    long rightLimit = 10L;
    long generatedLong = leftLimit + (long) (Math.random() * (rightLimit - leftLimit));
}

2.2。 Apache Commons Math随机长

让我们看一下使用更简洁的API和Commons Math生成随机Long的方法:

1
2
3
4
5
6
@Test
public void givenUsingApacheCommons_whenGeneratingRandomLongBounded_thenCorrect() {
    long leftLimit = 10L;
    long rightLimit = 100L;
    long generatedLong = new RandomDataGenerator().nextLong(leftLimit, rightLimit);
}

3.生成一个无界整数

让我们继续前进,生成一个无界的随机整数:

1
2
3
4
@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerUnbounded_thenCorrect() {
    int generatedInteger = new Random().nextInt();
}

如您所见,它几乎很接近生成一个long。

4.生成范围内的整数

4.1。纯Java的随机整数

下一个–给定范围内的随机整数:

1
2
3
4
5
6
@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerBounded_thenCorrect() {
    int leftLimit = 1;
    int rightLimit = 10;
    int generatedInteger = leftLimit + (int) (new Random().nextFloat() * (rightLimit - leftLimit));
}

4.2。带有Commons Math的随机整数

与Common Math相同:

1
2
3
4
5
6
@Test
public void givenUsingApache_whenGeneratingRandomIntegerBounded_thenCorrect() {
    int leftLimit = 1;
    int rightLimit = 10;
    int generatedInteger = new RandomDataGenerator().nextInt(leftLimit, rightLimit);
}

5.生成无限制的浮动

现在,让我们回顾一下生成随机浮点数–首先是无界的:

1
2
3
4
@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatUnbouned_thenCorrect() {
    float generatedFloat = new Random().nextFloat();
}

6.生成范围内的浮动

6.1。纯Java的随机浮动

还有一个有界的随机浮点数:

1
2
3
4
5
6
@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatBouned_thenCorrect() {
    float leftLimit = 1F;
    float rightLimit = 10F;
    float generatedFloat = leftLimit + new Random().nextFloat() * (rightLimit - leftLimit);
}

6.2。与Commons Math随机浮动

现在-Commons Math的有界随机浮点数:

1
2
3
4
5
6
7
@Test
public void givenUsingApache_whenGeneratingRandomFloatBounded_thenCorrect() {
    float leftLimit = 1F;
    float rightLimit = 10F;
    float randomFloat = new RandomDataGenerator().getRandomGenerator().nextFloat();
    float generatedFloat = leftLimit + randomFloat * (rightLimit - leftLimit);
}

7.生成无限制的双精度

7.1。纯Java随机无界双

最后,我们将生成随机双精度值,首先,使用Java Math API:

1
2
3
4
@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
    double generatedDouble = Math.random();
}

7.2。具有Commons Math的随机无界双

以及Apache Commons Math库的随机double值:

1
2
3
4
@Test
public void givenUsingApache_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
    double generatedDouble = new RandomDataGenerator().getRandomGenerator().nextDouble();
}

8.生成范围内的双精度

8.1。纯Java的随机有界双

在此示例中,让我们看一下在一个间隔内使用Java生成的随机双精度数:

1
2
3
4
5
6
@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleBounded_thenCorrect() {
    double leftLimit = 1D;
    double rightLimit = 10D;
    double generatedDouble = leftLimit + new Random().nextDouble() * (rightLimit - leftLimit);
}

8.2。具有Commons Math的随机有界双

最后,使用Apache Commons Math库,在一定间隔内随机增加一倍:

1
2
3
4
5
6
@Test
public void givenUsingApache_whenGeneratingRandomDoubleBounded_thenCorrect() {
    double leftLimit = 1D;
    double rightLimit = 100D;
    double generatedDouble = new RandomDataGenerator().nextUniform(leftLimit, rightLimit);
}

到那里,您可以找到快速而准确的示例,说明如何为Java中最常见的数字基元生成无界值和有界值。

9.结论

本教程说明了如何使用不同的技术和库来生成有界或无界的随机数。

与往常一样,所有这些示例和代码片段的实现都可以在GitHub项目中找到。这是一个基于Maven的项目,因此应该易于导入和运行。