简介:详解java.util.Random用法、常用API,对比Math.random优缺点,附带练习题,新手学习收藏。
一、前言
之前学过Math.random()生成随机小数,它底层就是借助Random实现。Random是java.util包下专门生成随机数的工具类,可以生成整数、小数、布尔值,支持指定随机范围、自定义随机种子,大批量随机场景优先使用Random。
二、使用前提
需要导包:
import java.util.Random;
使用两步:
创建Random对象:Random r = new Random();
调用对象方法获取随机数
三、常用核心方法
1.nextInt()
nextInt():随机生成整个int取值范围的整数(正负都有)
Random ran = new Random();
int num = ran.nextInt();
System.out.println(num);
2.nextInt(int bound)【最常用】
nextInt(n):生成[0,n)的随机整数,左闭右开
需求:[min,max]整数公式:ran.nextInt(max-min+1)+min
//1~10随机整数
int a = ran.nextInt(10)+1;
//10~30
int b = ran.nextInt(21)+10;
3.nextDouble()
生成[0.0,1.0)随机小数,等同于Math.random()
double d = ran.nextDouble();
4.nextBoolean()
随机返回true/false
boolean flag = ran.nextBoolean();
四、随机种子构造方法
Random():无参构造,默认以系统时间为种子,每次运行随机数不一样
Random(long seed):指定种子,种子相同,每次运行随机序列完全一致,用于测试固定数据
Random ran = new Random(100);
//固定种子,多次运行随机数不变
五、Random VS Math.random()
Math.random():底层new Random().nextDouble(),只能生成0~1小数,使用简单,少量随机推荐
Random:API丰富,int、boolean、小数全能生成,可控制随机范围、自定义种子,大量随机优先使用
六、实战案例
案例1:循环生成5个[5,20]随机整数
import java.util.Random;
public class RandomTest {
    public static void main(String[] args) {
        Random ran = new Random();
        for(int i=0;i<5;i++){
            int n = ran.nextInt(16)+5;
            System.out.print(n+" ");
        }
    }
}
案例2:搭配之前Shape,随机半径求圆面积
Random ran = new Random();
double r = ran.nextInt(9)+2; //2~10
double area = Math.PI*Math.pow(r,2);
System.out.println("半径"+r+" 面积:"+area);
七、注意事项
一个项目只创建一个Random对象,不要循环内反复new,避免随机重复
想要真随机、安全随机:高并发/密码场景用SecureRandom
八、课后练习题
编程:随机生成6个[1,50]数字并输出
简答:指定种子的Random有什么特点?
编程:随机输出3次true/false

更多推荐