java基础--16.java.util.Random类--产生随机数的N种方法

产生随机数的方法:

1.使用Math类自带的random方法

random方法产生的是0.0-1.0之间的随机数

1.1产生任意范围之内的随机数

参考公式: (int)( Math.random() * (end - start + 1))+start

例:产生5-8之间的随机数:

int x = (int)(5+Math.random()*(8-5+1));

2.使用java.util类中的Random类

 2.1带种子的构建方式:

  A:Random() 默认种子,每次产生的随机数不同

 2.2不带种子的构建方式:

  B:Random(long seed)指定种子,每次种子相同,随机数就相同
  

调用nextInt(arg)/nextDouble(arg)方法产生**

A:int nextInt():返回int范围内的随机数

B:int nextInt(int n):返回[0,n) 范围内的随机数

Random ran = new Random();

Integer x1 = ran.nextInt(20);
Double x2 = ran.nextDouble(3.0);

3.使用System类中的currentTimeMillis()方法返回的long值取模运算,就可以将结果限制在一个范围内了

三种方法举例

package cn.math;

import java.util.Random;

public class RandomDemo {

    public static void main(String[] args) {
        /*
         * 方法1:使用java.lang.Math类自带的random方法
         *  使用方法:(数据类型)(最小值+Math.random()*(最大值-最小值+1))
         */
        //例1.1:产生1-10之间的随机整数
        System.out.println("~"+(int)(1+Math.random()*10));
        //例1.2:产生5-8之间的随机整数
        System.out.print("~"+(int)(5+Math.random()*(8-5+1)));
        //例1.3:产生100之内的随机整数(0~99)
        System.out.print("~"+(int)(Math.random()*100));

        /* 2.使用java.util类中的Random类的nextInt(arg)/nextDouble(arg)方法产生
         *  如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,
         *  它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。
         *  为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。
         *  但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。
         */
        //2.1带种子的构建方式(此种方式,无论程序运行多少次,返回结果都是一样的)
        //2.1.1 使用555L作为种子产生随机数
        Random ran = new Random(555L);
        int i = 3;
        while(i--!=0){
            System.out.print("~"+ran.nextInt());
        }
        //结果:~-1367481220~292886146~-1462441651
        System.out.println("-------------------------");
        //2.1.2 同样使用555L作为种子产生随机数
        Random random = new Random();
        random.setSeed(555L);
        for (int i1 = 0; i1 < 50; i1++) {
            System.out.print("~"+random.nextInt());
        }
        //结果:~-1367481220~292886146~-1462441651 ,与上面产生的结果相同(关键是种子要一样)

        //2.2不带种子的构建方式(此种方式将会返回随机的数字,每次运行结果都不一样)
        Random ran2 = new Random();
        int i2 = 30;
        while(i2--!=0){
            System.out.print("~"+ran2.nextInt());
        }

        //3 使用System类中的currentTimeMillis方法产生50以内的随机数
        long r1 = System.currentTimeMillis();
        System.out.println(r1%50);
    }

}

你可能感兴趣的:(Java基础)