常用类 (四) ----- Random随机数类

相关文章

  1. 《常用类 (一) ----- Arrays数组工具类》
  2. 《常用类 (二) ----- Math类》
  3. 《常用类 (三) ----- BigDecimal和BigInteger大数类》
  4. 《常用类 (四) ----- Random随机数类》
  5. 《常用类 (五) ----- Date日期类和Calender日历类》
  6. 《常用类 (六) ----- String类与字符串》
  7. 《常用类 (七) ----- 包装类》


随机数类Random


一、构造方法
  • Random()
  • Random(int seed)——相同seed的Random对象每次产生的随机数相同
二、常用方法
返回值函数名和形参功能
intnextInt()随机生成一个int范围内的整型值
intnextInt(int bound)随机生成一个[0,bound)范围内的整型值
longnextLong()随机生成一个long范围内的长整型值
floatnextFloat()随机生成一个[0,1)范围内的单精度浮点数
doublenextDouble()随机生成一个[0,1)范围内的双精度浮点数
booleannextBoolean()随机生成一个布尔值
voidnextBytes(byte[] bytes)随机生成字节填充到指定字节数组中
voidsetSeed(int seed)给Random对象设置种子
三、练习:生成一个长度为n,指定元素范围的随机数组
 
  public static int[] getRandomArray(int length, int from, int to) {

        // 先构造一个元素全为0的数组
        int[] arr = new int[length];

        // 辅助数组
        int[] helper = new int[length];

        System.arraycopy(arr, 0, helper, 0, length);

        // 数组初始化为-1
        Arrays.fill(arr, -1);
        Arrays.fill(helper, -1);

        // 随机数
        Random random = new Random();

        // 遍历数组
        for (int i = 0; i < length; i++) {
            // 死循环生成随机数
            while (true) {
                int num = getRandomNum(from, to, random);

                // 二分查找该数字是否存在于这个数组中
                // 如果不在则把该数字放在数组内然后跳出死循环
                if (!isContains(helper, num)) {
                    arr[i] = num;
                    helper[i] = num;
                    break;
                }
            }
        }
        return arr;
    }

    private static int getRandomNum(int from, int to, Random random) {

        int x = to - from;
        return random.nextInt(x + 1) + from;
    }
    
四、补充

上面的方法都是java.util.Random类中的,但在java.lang.Math类中也有一个获取随机数的方法——double random(),生成一个[0,1)之间的double类型随机数。

  • 想得到一个[1,b)之间的随机数可以这样做:

    // [0,1) * (b-1) + 1 = [0,b-1) + 1 = [1,b)
    Math.random() * (b-1) + 1;
    
  • 想得到一个[a,b)之间的随机数可以这样做:

    // [0,1) * (b-a) + b= [0,b-a) + a = [a,b)
    Math.random() * (b-a) + b
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值