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

来源:互联网 发布:java得到项目路径 编辑:程序博客网 时间:2024/05/16 12:33

产生随机数的方法:

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);    }}
0 0