• java随机数


    Java中一般有两种随机数,一个是Math中random()方法,一个是Random类。

    一、Math.random()

    随即生成0<x<1的小数。

    实例:如何写,生成随机生成出0~100中的其中一个数呢?

        Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
    最终代码:(int)(Math.random()*50) + 50

    二、Random类

    Random random = new Random();//默认构造方法

    Random random = new Random(1000);//指定种子数字

    在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

    相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。

     

    2 、Random类中的常用方法

    Random 类中的方法比较简单,每个方法的功能也很容易理解。需要说明的是,Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。下面对这些方法做一下基本的介绍:

    a 、public boolean nextBoolean()

    该方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。

    b 、public double nextDouble()

    该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间,这里中括号代表包含区间端点,小括号代表不包含区间端点,也就是0到1之间的随机小数,包含0而不包含1.0。

     

    c 、public int nextInt()

    该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-2的31次方到2的31次方-1之间。

    如果需要生成指定区间的int值,则需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。

    d 、public int nextInt(int n)

    该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

    如果想生成指定区间的int值,也需要进行一定的数学变换,具体可以参看下面的使用示例中的代码。

    e 、public void setSeed(long seed)

    该方法的作用是重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。

    3 、Random类使用示例

    使用Random类,一般是生成指定区间的随机数字,下面就一一介绍如何生成对应区间的随机数字。以下生成随机数的代码均使用以下Random对象r进行生成:

    Random r = new Random();

    a 、生成[0,1.0)区间的小数

     double d1 = r.nextDouble();
    直接使用nextDouble方法获得。

    b、生成[0,5.0)区间的小数

    double d2 = r.nextDouble() * 5;

    因为nextDouble方法生成的数字区间是[0,1.0),将该区间扩大5倍即是要求的区间。

     

    同理,生成[0,d)区间的随机小数,d为任意正的小数,则只需要将nextDouble方法的返回值乘以d即可。

    c、生成[1,2.5)区间的小数  [n1,n2]

           double d3 = r.nextDouble() * 1.5 + 1;【也就是 r.nextDouble() * (n2-n1)+n1】

    生成[1,2.5)区间的随机小数,则只需要首先生成[0,1.5)区间的随机数字,然后将生成的随机数区间加1即可。

    同理,生成任意非从0开始的小数区间[d1,d2)范围的随机数字(其中d1不等于0),则只需要首先生成[0,d2-d1)区间的随机数字,然后将生成的随机数字区间加上d1即可。

    d、生成任意整数

    int n1 = r.nextInt();

    直接使用nextInt方法即可。

    e、生成[0,10)区间的整数

    int n2 = r.nextInt(10);

    n2 = Math.abs(r.nextInt() % 10);

    以上两行代码均可生成[0,10)区间的整数。

    第一种实现使用Random类中的nextInt(int n)方法直接实现。

    第二种实现中,首先调用nextInt()方法生成一个任意的int数字,该数字和10取余以后生成的数字区间为(-10,10),因为按照数学上的规定余数的绝对值小于除数,然后再对该区间求绝对值,则得到的区间就是[0,10)了。

    同理,生成任意[0,n)区间的随机整数,都可以使用如下代码:

    int n2 = r.nextInt(n);

    n2 = Math.abs(r.nextInt() % n);

    f、生成[0,10]区间的整数

    int n3 = r.nextInt(11);

    n3 = Math.abs(r.nextInt() % 11);

    相对于整数区间,[0,10]区间和[0,11)区间等价,所以即生成[0,11)区间的整数。

    g、生成[-3,15)区间的整数

    int n4 = r.nextInt(18) - 3;   【也就是 r.nextInt() * (n2-n1)+n1】 n1是个负数

    n4 = Math.abs(r.nextInt() % 18) - 3;    

    生成非从0开始区间的随机整数,可以参看上面非从0开始的小数区间实现原理的说明。

     
  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/miss123/p/5480597.html
Copyright © 2020-2023  润新知