Java随机数的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java随机数的使用相关的知识,希望对你有一定的参考价值。

在java中实现随机数的类有两种,分别是和java.util.Math 和 java.util.Random

第一种:java.lang.Math.random()

Math.random()方法创建的是[0.0,1.0)范围类的浮点数

示例代码:

        int i = 0;
        System.out.println("Math.random生成随机数!");
        while (i < 3) {
            System.out.println("第" + i + "个数:" + Math.random());
            i++;
        }

 控制台输出:

技术分享

第二种:java.util.Random类

java.util.Random类有两种构造器,分别为Random()和Random(long seed)

两种构造器最主要的区别就在于seed的不同,seed是实现Random类所需的变量,也就是Random类创建所需的种子,Random根据它来生成不同的随机数序列.

Random()用的是默认的seed值,而Random(long seed)实现则是根据输入的seed值来生成对应的随机数序列,

也就是说相同seed的Random对象创建的随机数序列相同.

示例代码:

        java.util.Random random1 = new java.util.Random(10);
        java.util.Random random1_sanmeseed = new java.util.Random(10);
        java.util.Random random2 = new java.util.Random();
        System.out.println("random1:"+random1.nextInt());
        System.out.println("random1_sanmeseed:"+random1_sanmeseed.nextInt());
        System.out.println("random2:"+random2.nextInt());

 控制台输出:

 技术分享

 注:使用nextInt测试时要注意使用无参或者参数相同的方法 否则就是random的seed值相同 也会输出不同的随机数.

 

由此可见在java.util.Random类的适用范围更广泛一些,随后大致讲下它的几个方法,分别是:

nextInt();nextInt(int bound);nextDouble();

 

nextInt() nextInt(int bound)的不同在于bound 限制了随机数出现的范围,使用后者方法生成的随机数是在[0,bound)之间 不带参数则生成[-2147483648,2147483647]范围内的随机数,也是int的取值范围.

        java.util.Random random = new java.util.Random();
        for(int i=0;i<10;i++){
            System.out.println("带bound参数方法生成的随机数:"+random.nextInt(10));
            System.out.println("无参数方法生成的随机数:     "+random.nextInt());
        }

控制台输出:

技术分享

 

nextDouble()方法 返回的随机数和Math.random()返回的随机数范围相同,均为[0,1)之内的随机数,

那么实现[-3,12)范围内的随机小数怎么办呢?(此问题同样适用于nextInt(),nextFloat()等方法)

        java.util.Random random = new java.util.Random();
        for(int i=0;i<10;i++){
            double num = random.nextDouble()*15-3;
            System.out.println("[-3,12)之间的Double随机数:"+num);
        }

控制台输出:

技术分享

 

以上是关于Java随机数的使用的主要内容,如果未能解决你的问题,请参考以下文章

LockSupport.java 中的 FIFO 互斥代码片段

如何在片段中使用 GetJsonFromUrlTask​​.java

正在渲染opengl的随机屏幕片段-这表明啥错误?

# Java 常用代码片段

# Java 常用代码片段

创建片段而不从 java 代码实例化它