关于java中random的一些思考

首先java中存在两个随机数java.util.Random;和Math.random();

首先来看Math.random();它返回的是一个double类型的数值,范围是[0,1)在该范围内几乎均匀分布;返回的是一个伪随机数即有规则的随机;这种方法较为简便易用;想生成何种类型,强制转换即可;相应的做一个简单计算变换一下区间范围即可;例如:生成1~10范围的一个随机整数

int r = (int)Math.random()*10+1;//生成1~10范围的一个随机整数
        System.out.println(r);

然后来看java.util.Random;这种方法为用Random类建立对象来进行实体化操作;有两种构造方法:

1.Random r1 = new Random();无参的随机生成器

    for(int i=1;i<=1;i++) {
            int a = r1.nextInt();
            System.out.println(a);
        }

该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象即使用系统时间的毫秒作为默认种子。

2.Random r1 = new Random(long seed);有参数的随机生成器,参数类型是long型;也可以叫其为long型种子

    for(int i=1;i<=10;i++) {
            int a = r1.nextInt(10);
            System.out.println(a);
        }

该方法传递了一个long型数值给随机生成器,返回值范围为[0,10);

下面有一种几率实现挺有意思的;在[0,10)区间内有20%的几率实现数字1,50%的几率生成2,其余生成3;那么该如何去实现

呢?

        Random r2 =new Random();
        
        for(int i=0;i<10;i++) {
            int a = r2.nextInt(10);
            if(a<2) {
                a = 1;
            }else if(a<7){
                a = 2;
            }else {
                a = 3;
            }
            System.out.println(a);
        }

注意:

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

生成的随机数序列相同

猜你喜欢

转载自blog.csdn.net/qq_41815040/article/details/82969174