Random

java.util.Random

1、java.util.Random类中实现的随机算法是伪随机,也就是有规律的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;

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

3、Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等;

下面Random()的两种构造方法: 

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

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

在生成随机数的时候要把种子seed带入到一个公式里面,如下:

protected synchronized int next(int bits) {

    seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);

    return (int) (seed >>> (48 - bits));

}

Random() 是以当前时间作为seed的

Random(long seed ) 是以给定的数作为seed的

种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。如下面的Java代码:

Random rand =new Random(25);

int i;

i=rand.nextInt(100);

初始化时25并没有起直接作用(注意:不是没有起作用),rand.nextInt(100);中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。

1. 生成指定范围随机数

Random random = new Random();

//生成从 [start, INT_MAX) 

int randomNumber = start + random.nextInt();

//生成从 [start,end) 的随机数

int randomNumber = start + random.nextInt(end);

2. 生成不重复的随机数

package com.zoo.lion.util;

import java.util.ArrayList;

import java.util.Random;

public class RandomCoder {

    public static void main(String[] args) {

        random();

    }

    private static void random() {

        ArrayList list = getDiffNO(10);

        System.out.println();

        System.out.println("产生的n个不同的随机数:" + list);

    }

   // 生成n个不同的随机数,且随机数区间为[0,10)

    private static ArrayList<Integer> getDiffNO(int n) {

        // 生成 [0-n) 个不重复的随机数

        // list 用来保存这些随机数

        ArrayList<Integer> list = new ArrayList<Integer>();

        Random rand = new Random();

        boolean[] bool = new boolean[n];

        int num = 0;

        for (int i = 0; i < n; i++) {

            do {

                // 如果产生的数相同继续循环

                num = rand.nextInt(n);

            } while (bool[num]);

            bool[num] = true;

            list.add(num);

        }

        return list;

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。