Random类

一、Random类

Random类主要是生成随机数。

Random类是专门用于生成一个伪随机数的类,其产生的随机数是根据种子和顺序决定的;ThreadLocalRandom类是Java 7新增的一个类,它是Random的增强版。在并发访问的环境下,保证系统具有更好的线程安全性。Random类有两个构造器:

1、Random():创建一个新的随机数生成器。

2、Random(long seed):使用单个long种子创建一个新的随机数生成器。

1.1基本用法:

1.随机生成int取值范围内的数

int num1 = ran.nextInt();
System.out.println(num1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwKwlTkF-1652098265568)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509182048506.png)]

2.随机出int类型0~9的数字

int num2 = ran.nextInt(10);//底层原理:随机获取正整数的数字%10
System.out.println(num2);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acJKHGZx-1652098265571)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509182235453.png)]

3.随机出double取值范围内的数据

double num3 = ran.nextDouble();
System.out.println(num3);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arCqYpbo-1652098265572)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509182409357.png)]

4.随机出boolean类型的值

boolean bool = ran.nextBoolean();
System.out.println(bool);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUfFnHWP-1652098265572)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509182500032.png)]

1.2应用 – 点名器

将所有的学生姓名放在一个数组内,数组是已知的长度,长度为学生的个数,通过生成随机数去匹配学生在数组的下标,即可找到随机的学生。

public static void main(String[] args) {

    String[] names = {"罗菌鱼","张三","李四","王二麻子","赵五","钱六"};

    Random ran = new Random();
    int index = ran.nextInt(names.length);

    System.out.println(names[index]);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-geKOO6To-1652098265573)(C:\Users\Hp\AppData\Roaming\Typora\typora-user-images\image-20220509183035431.png)]

1.3种子数

种子数固定,随机出的数字就是固定的

public class Random {
    
    public Random() {
        //调用本类其他的构造方法
        this(seedUniquifier() ^ System.nanoTime());
    }
    
    private static long seedUniquifier() {
   
        for (;;) {
            //获取了一个值
            long current = seedUniquifier.get();
            //算法
            long next = current * 181783497276652981L;
            //判断next达到某个条件后,返回数据
            if (seedUniquifier.compareAndSet(current, next))
                return next;//返回了一个较为随机的值
        }
    }
    
	//有参构造 -- 传入的数据是种子数
    public Random(long seed) {
        if (getClass() == Random.class)
            this.seed = new AtomicLong(initialScramble(seed));
        else {
            // subclass might have overriden setSeed
            this.seed = new AtomicLong();
            setSeed(seed);
        }
    }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值