Random 是位于java.util包下的一个类
首先要理解这里的伪随机的是什么意思, 话不多说,先看该类的两个构造方法,
Random() 创建一个新的随机数生成器。 |
Random(long seed) 使用单个 long 种子创建一个新的随机数生成器。 |
先来个无参的:
Random random = new Random();
System.out.println(random.nextInt());//第一次打印结果为1780102617
System.out.println(random.nextInt()); //第二次打印结果为537589343
System.out.println("---------------------------------");
Random random2 = new Random();
System.out.println(random2.nextInt());//-1157793070
System.out.println(random2.nextInt()); //1913984760
每次打印结果不同,并且新建对象的随机数也不同
再来个有参的:
Random random = new Random(10);
System.out.println(random.nextInt());//第一次打印结果为-1157793070
System.out.println(random.nextInt()); //第二次打印结果为1913984760
System.out.println("---------------------------------");
Random random2 = new Random(10);
System.out.println(random2.nextInt());//-1157793070
System.out.println(random2.nextInt()); //1913984760
大家会发现,两个对象打印的结果竟然一样.
这是因为有参构造器中的的参数,就是一个种子标记 ,只要new出对象时,构造器中参数与之前构造器对象中的参数相同就会出现一样的随机数
这也和我system.out.print的顺序有关系(其实就是random的第几次),
例如
Random random = new Random(10);
System.out.println(random.nextFloat()); //0.73043025
System.out.println(random.nextInt());//第一次打印结果为1913984760
System.out.println(random.nextInt()); //第二次打印结果为1107254586
System.out.println("---------------------------------");
Random random2 = new Random(10);
System.out.println(random2.nextInt());//-1157793070
System.out.println(random2.nextInt()); //1913984760
System.out.println(random2.nextFloat()); //0.25780278
这里生成的随机数都是不一样的,大体应该是要次数相同且,类型相同才会出现随机数相同