常用类-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;
}
}