Java中的
java.util.Random
类用于生成伪随机数。它提供了多种方法来生成不同类型的随机数,包括整数、浮点数和布尔值。以下是对Random
类及其主要方法的详细介绍
一、生成随机数
创建一个Random
对象,可以使用以下两种方式:
-
无参构造函数:使用默认的种子(当前时间的毫秒数)
-
Random random = new Random();
-
-
带参构造函数:使用指定的种子,便于生成可重复的随机数序列
-
Random random = new Random(42);
-
无参的构造函数非常好理解,即根据当前时间毫秒值随机生成,那么有参是什么意思呢?有参数即意味着可以生成重复序列的随机数,即如果参数一样,那么根据参数创建的两个对象所生产的随机数:第一组为1,5,7,第二组必然也为1,5,7
二、主要方法
在上述创建完Random对象后,我们即可使用Random中的方法来创建伪随机数
2.1 int nextInt()
- 返回一个随机的整数,范围是所有可能的
int
值。 -
int randomValue = random.nextInt();
- 最小值:
Integer.MIN_VALUE
,即-2^31(-2147483648) - 最大值:
Integer.MAX_VALUE
,即2^31-1(2147483647)
2.2 int nextInt(int bound)
- 返回一个0(包括)到
bound
(不包括)之间的随机整数。用法示例: -
int randomValue = random.nextInt(10);
2.3 随机浮点数生成 double nextDouble()
- 返回一个0.0(包括)到1.0(不包括)之间的随机浮点数。
-
double randomValue = random.nextDouble();
2.4 float nextFloat()
- 返回一个0.0(包括)到1.0(不包括)之间的随机浮点数。
-
float randomValue = random.nextFloat();
2.5 boolean nextBoolean()
- 返回一个随机的布尔值。
-
boolean randomValue = random.nextBoolean();
2.6 随机长整型生成long nextLong()
- 返回一个随机的长整型值。
-
long randomValue = random.nextLong();
三、综合示例
import java.util.Random;
import java.util.Arrays;public class RandomExample {public static void main(String[] args) {Random random = new Random();// 生成一个随机整数int randomInt = random.nextInt();System.out.println("Random Integer: " + randomInt);// 生成一个0到9之间的随机整数int randomIntBounded = random.nextInt(10);System.out.println("Random Integer (0-9): " + randomIntBounded);// 生成一个随机浮点数double randomDouble = random.nextDouble();System.out.println("Random Double: " + randomDouble);// 生成一个随机布尔值boolean randomBoolean = random.nextBoolean();System.out.println("Random Boolean: " + randomBoolean);// 生成随机字节数组byte[] randomBytes = new byte[5];random.nextBytes(randomBytes);System.out.println("Random Bytes: " + Arrays.toString(randomBytes));// 生成一个随机长整型值long randomLong = random.nextLong();System.out.println("Random Long: " + randomLong);// 生成一个高斯分布的随机数double randomGaussian = random.nextGaussian();System.out.println("Random Gaussian: " + randomGaussian);}
}
四、如何随机生成1-10中五个不重复的随机数?
方法1:
@Test
void threadtest4() throws ExecutionException, InterruptedException {//生成一个数组int[] arr = new int[5];int count=0;Random random = new Random();while (count<5){Boolean isBreak=true;//生成的随机数int i = random.nextInt(5) + 1;//判断是否重复for(int j=0; j<arr.length; j++){if(arr[j]==i){isBreak=false;}}//不重复就进入数组中if(isBreak) {arr[count] = i;count++;}}Arrays.stream(arr).forEach(e-> System.out.println(e));
}
其结果: