概述
本教程将展示如何使用纯Java生成随机数,以及利用第三方库 - Apache Commons Math 实现。
更多精彩内容欢迎访问我们的“Java - 回归基础” 系列教程。
1. 无界Long随机数
生成一个Long型随机数:
@Test
public void givenUsingPlainJava_whenGeneratingRandomLongUnbounded_thenCorrect() {
long generatedLong = new Random().nextLong();
}
2. 有界Long随机数
2.1. 纯Java实现
生成一个在给定范围内的随机长整数:
@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实现
使用第三方库实现,更简洁:
@Test
public void givenUsingApacheCommons_whenGeneratingRandomLongBounded_thenCorrect() {
long leftLimit = 10L;
long rightLimit = 100L;
long generatedLong = new RandomDataGenerator().nextLong(leftLimit, rightLimit);
}
3. 无界Integer随机数
和生成Long型类似:
@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerUnbounded_thenCorrect() {
int generatedInteger = new Random().nextInt();
}
4. 有界Integer随机数
4.1. 纯Java实现
使用纯Java在给定范围内生成Integer随机数:
@Test
public void givenUsingPlainJava_whenGeneratingRandomIntegerBounded_thenCorrect() {
int leftLimit = 1;
int rightLimit = 10;
int generatedInteger = leftLimit + (int) (new Random().nextFloat() * (rightLimit - leftLimit));
}
4.2. 使用Apache Commons Math实现
同样,使用Commons Math 生成Integer随机数:
@Test
public void givenUsingApache_whenGeneratingRandomIntegerBounded_thenCorrect() {
int leftLimit = 1;
int rightLimit = 10;
int generatedInteger = new RandomDataGenerator().nextInt(leftLimit, rightLimit);
}
5. 无界Float随机数
现在,我们来生成随机浮点数 - 首先是无界的:
@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatUnbouned_thenCorrect() {
float generatedFloat = new Random().nextFloat();
}
6. 有界Float随机数
6.1. 纯Java实现
@Test
public void givenUsingPlainJava_whenGeneratingRandomFloatBouned_thenCorrect() {
float leftLimit = 1F;
float rightLimit = 10F;
float generatedFloat = leftLimit + new Random().nextFloat() * (rightLimit - leftLimit);
}
6.2. 使用Apache Commons Math
接下来,使用Commons Math生成有界float随机数:
@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. 无界Double浮点数
7.1. 纯Java实现
使用Java Math 生成double随机数:
@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
double generatedDouble = Math.random();
}
7.2. 使用Apache Commons Math
使用Apache Commons Math库生成随机double:
@Test
public void givenUsingApache_whenGeneratingRandomDoubleUnbounded_thenCorrect() {
double generatedDouble = new RandomDataGenerator().getRandomGenerator().nextDouble();
}
8. 有界Double随机数
8.1. 使用纯Java
使用Java生成在一个区间内的double类型随机值:
@Test
public void givenUsingPlainJava_whenGeneratingRandomDoubleBounded_thenCorrect() {
double leftLimit = 1D;
double rightLimit = 10D;
double generatedDouble = leftLimit + new Random().nextDouble() * (rightLimit - leftLimit);
}
8.2. 使用Apache Commons Math
最后,使用Apache Commons Math库生成有界区间内的随机双精度值:
@Test
public void givenUsingApache_whenGeneratingRandomDoubleBounded_thenCorrect() {
double leftLimit = 1D;
double rightLimit = 100D;
double generatedDouble = new RandomDataGenerator().nextUniform(leftLimit, rightLimit);
}
9. 总结
本教程演示了如何使用不同的方法和库,无论是有界还是无界,生成随机数。所有示例和代码片段的实现都可以在GitHub项目中找到。