常用类-Random类
1 创建Random类对象
此类用于生成随机数:
Random(); 创建一个新的随机数生成器
Random(long seed);种子数(重点理解工作原理,什么是伪随机数)
2 Random类常用方法
package com.qf.random_class;import java.util.Random;public class Test01 {/*** 知识点:Random - 随机类*/public static void main(String[] args) {Random ran = new Random();System.out.println("随机出int类型范围里的数字:" + ran.nextInt());System.out.println("随机出double类型范围里的数字:" + ran.nextDouble());System.out.println("随机出boolean类型范围里的数字:" + ran.nextBoolean());System.out.println("随机出0~9的int数字:" + ran.nextInt(10));//0~9}
}
3 案例:点名器
package com.qf.random_class;import java.util.Random;public class Test02 {/*** 知识点:Random - 随机类* * 案例:点名器*/public static void main(String[] args) {String[] names = {"小宇","小亮","小丹","小蒲","小飞","小康","小升","小怡"};Random ran = new Random();int index = ran.nextInt(names.length);System.out.println(names[index]);}
}
4 Random的种子数
package com.qf.random_class;import java.util.Random;public class Test03 {/*** 知识点:Random的种子数*/public static void main(String[] args) {//注意:种子数固定,随机出的数据也是固定的Random ran = new Random(100);System.out.println(ran.nextInt());System.out.println(ran.nextInt(10));System.out.println("---------------------------");MyRandom myRandom = new MyRandom();System.out.println(myRandom.nextInt());System.out.println(myRandom.nextInt(10));}
}
seed(种子数底层理解)
package com.qf.random_class;public class MyRandom {private long seed;public MyRandom() {// System.nanoTime()返回的是纳秒级精度的时间,以此作为种子更能保证生成数字的随机性。.this(seedUniquifier() ^ System.nanoTime());}private static long seedUniquifier() {for (;;) {long current = System.currentTimeMillis();long next = current * 181783497276652981L;if (next%3==0 || next%12==0 || next%17==0)return next;}}public MyRandom(long seed) {this.seed = seed;}public int nextInt(){return (int) seed;}public int nextInt(int i){return Math.abs((int) seed) % i;}
}