JAVA Random类

目录

一、Random类基本介绍

二、Random对象的两种生成方式

三、Random类中的常用方法

3.1 基本方法

3.2 生成无限个int数据

3.3 toArray

四、经典例题

4.1 x到x平方 

4.2 1-5随机到1-7随机

4.3 等概率返回0和1

4.4 简单对数器


一、Random类基本介绍

Random类位于java.util包下,Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。

二、Random对象的两种生成方式

Random r = new Random();
Random r1 = new Random(10);

相同种子数的Random对象,相同次数生成的随机数字是完全相同的。

三、Random类中的常用方法

3.1 基本方法

Random random = new Random();
        System.out.println("nextInt():" + random.nextInt()); // 随机生成一个整数,这个整数的范围就是int类型的范围-2^31~2^31-1
        System.out.println("nextLong():" + random.nextLong()); // 随机生成long类型范围的整数
        System.out.println("nextFloat():" + random.nextFloat()); // 随机生成[0, 1.0)区间的小数
        System.out.println("nextDouble():" + random.nextDouble()); // 随机生成[0, 1.0)区间的小数
        System.out.println("nextBoolean():"+random.nextBoolean());//随机生成一个boolean值,生成true和false的值几率相等,也就是都是50%的几率
        System.out.println("nextGaussian():"+random.nextGaussian());//随机生成呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0
        byte[] byteArr = new byte[5];
        random.nextBytes(byteArr); // 随机生成byte,并存放在定义的数组中,生成的个数等于定义的数组的个数

3.2 生成无限个int数据

public static void main(String[] args) {
        Random random = new Random();
        random.ints(); // 生成无限个int类型范围内的数据,因为是无限个,这里就不打印了,会卡死的......
        random.ints(10, 100); // 生成无限个[10,100)范围内的数据

3.3 toArray

/**
         * 这里的toArray 是Stream里提供的方法
         */
        int[] arr = random.ints(5).toArray(); // 生成5个int范围类的整数。
        System.out.println(arr.length);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        // 生成5个在[10,100)范围内的整数
        arr = random.ints(5, 10, 100).toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        /**
         * 对于 random.ints(); random.ints(ori, des);
         * 两个生成无限个随机数的方法,我们可以利用Stream里的terminal操作,来截断无限这个操作
         */
        // limit表示限制只要5个,等价于random.ints(5)
        arr = random.ints().limit(5).toArray();
        System.out.println(arr.length);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        // 等价于random.ints(5, 10, 100)
        arr = random.ints(10, 100).limit(5).toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

四、经典例题

4.1 x到x平方 

任意x,x属于[0,1),[0,x)范围上的数出现的概率由原来的x调整成x平方

public static double XtoXpower(){
        return Math.max(Math.random(),Math.random());
    }

4.2 1-5随机到1-7随机

有一个方法f1()为从一到五等可能取一个数,现在此基础上改为一到七随机取出一个数

 public static int f1(){
        return (int)(Math.random() * 5) + 1;
    }

    public static int f2(){
        int ans = 0;
        do {
            ans = f1();
        }while (ans == 3);
        return ans < 3 ? 0 : 1;
    }

    public static int f3(){
        return (f2() << 2) + (f2() << 1) + (f2() << 0);
    }

4.3 等概率返回0和1

现已知方法x()会以固定概率返回0和1,但是x的内容未知,写出等概率返回0和1的方法

public static int x(){
        return Math.random() < 0.84 ? 0 : 1;
    }

    public static void f(){
        int ans = 0;
        do {
            ans = x();
        }while (ans == x());
        /*
        ans = 0 1
        ans = 1 0
        以上两种情况等概率
         */
    }

4.4 简单对数器

返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]

public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
		int len = (int) (Math.random() * maxLen);
		int[] ans = new int[len];
		for (int i = 0; i < len; i++) {
			ans[i] = (int) (Math.random() * maxValue);
		}
		return ans;
	}

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RandomJava中用于生成随机数的。它提供了多个方法用于生成不同型的随机数。其中一些常用的方法包括: - `public boolean nextBoolean()`:生成一个随机的布尔值,即true或false。 除此之外,Random还提供了其他用于生成随机数的方法,如生成整数、浮点数、字节等。这些方法都是基于种子数(seed)进行一定的变换,从而生成需要的随机数字。种子数可以通过构造Random对象时传入参数进行设置,如果不指定种子数,则默认使用当前时间作为种子数。 使用Random时,可以通过调用不同的方法来生成指定区间的随机数。例如,可以使用`nextInt(int bound)`方法生成一个在指定范围内的随机整数,其中bound参数指定了上限(不包含)。如果需要生成指定范围内的随机浮点数,则可以使用`nextDouble()`方法生成一个0到1之间的随机浮点数,并根据需要进行线性变换。 通过使用Random的方法,我们可以在程序中实现需要的随机性和几率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JAVARandom常用用法](https://blog.csdn.net/qq_37857292/article/details/124397982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JAVA Random](https://blog.csdn.net/wztmds/article/details/127586834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值