`

Random 对象、Math.random(转)

阅读更多
Random类 (java.util)         

Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。

下面介绍一下Random类的使用,以及如何生成指定区间的随机数组以及实现程序中要求的几率。

1、Random对象的生成

         Random类包含两个构造方法,下面依次进行介绍:

         a、public Random()

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

         b、public Random(long seed)

该构造方法可以通过制定一个种子数进行创建。

示例代码:

Random r = new Random();

Random r1 = new Random(10);

再次强调:种子数只是随机算法的起源数字,和生成的随机数字的区间无关。

2、Random类中的常用方法

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

a、public boolean nextBoolean()

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

b、public double nextDouble()

该方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。


c、public int nextInt()

该方法的作用是生成一个随机的int值,该值介于int的区间,也就是-231到231-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)区间的小数

       double d3 = r.nextDouble() * 1.5 + 1;

生成[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;

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

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

Math.random()方法生成0.0至1.0(不包含1.0)的double型随机数,一般地, a + Math.random() * b可以返回a到a+b之间的随机数,不包括a+b.

分享到:
评论

相关推荐

    math.random用法

    Math.random 用法 Math.random() 函数是一种生成随机数的函数,返回值是一个大于等于 0,且小于 1 的随机数。该函数广泛应用于 Flash 中的随机数生成、随机移动、随机颜色等方面。在本文中,我们将详细介绍 Math....

    【Java】Math.random()

    Math.Random()简介 Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。 for (int i = 0; i ...

    Javascript四舍五入Math.round()与Math.pow()使用介绍

    在本文中,我们将介绍JavaScript中的两个重要数学函数:Math.round()和Math.pow()。这两个函数虽然在数学运算中十分常用,但是它们的使用场合和效果却各不相同。通过详细解析,我们可以更好地理解这两个函数如何在...

    random-math.rar_random

    标题中的"random-math.rar_random"暗示了这是一个与随机数学相关的项目,可能是一个软件或程序,其中包含了关于随机数和数学运算的元素。这个项目的重点是利用编程技术生成1到100之间的数学加法题目。 描述部分指出...

    浅谈java中Math.random()与java.util.random()的区别

    在性能方面,`Math.random()` 通常被认为比 `Random.nextInt()` 快,因为它不需要创建对象。然而,对于大多数应用来说,这种差异可能微不足道,除非你在生成大量随机数时特别关注性能。 总的来说,如果你需要简单...

    C++中仅用random和math.h库编写的粒子群算法

    C++中仅用random和math.h库编写的粒子群算法,特别适合才开始接触C++的人群

    使用Math.floor与Math.random取随机整数的方法详解

    Math.random():获取0~1随机数 Math.floor() method rounds a number DOWNWARDS to the nearest integer, and returns the result. (小于等于 x,且与 x 最接近的整数。)其实返回值就是该数的整数位:Math.floor(0....

    java 随机数 Math.random

    //产生随机数的类 final SuiJiShuClass sjs=new SuiJiShuClass(); final JPanel panel=new JPanel(); //初始化一个JPanel ...int m=(int)Math.rint(Math.random()*(parseInt2-parseInt3)+ parseInt3);

    javascript中Math.random()使用详解

    Math.random() 这个方法相信大家都知道,是用来生成随机数的。不过一般的参考手册时却没有说明如何用这个方法来生成指定范围内的随机数。这次我就来详细的介绍一下Math.random(),以及如何用它来生成制定范围内的...

    java.util.Random与Math.random区别

    java.util.Random与Math.random的区别 java.util.Random和Math.random都是Java语言中用于生成随机数的方法,但是它们之间存在着一些重要的区别。 Math.random()方法 Math.random()方法是Java.lang.Math类中的一个...

    实例讲解Java中random.nextInt()与Math.random()的基础用法

    本文将详细解释`random.nextInt()`和`Math.random()`的基础用法。 首先,`random.nextInt(n)`是`Random`类的一个方法,用于生成0到n(不包括n)之间的整数。这个方法内部实现时,如果n是2的幂,它会执行更高效的...

    javascript Math.random()随机数函数

    random函数语法 Math.random(); random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 [removed](Math.random()); 返回随机数 [removed](Math.random()*(20...

    猜数字Math.random 利用alert函数

    猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数 猜数字Math.random 利用alert函数

    random调用类java.lang.math的成员方法

    random调用类java.lang.math的成员方法

    Java Math.round(),Math.ceil(),Math.floor()的区别详解

    在Java编程语言中,`Math`类提供了几个用于处理数值的静态方法,其中包括`Math.round()`, `Math.ceil()`, 和 `Math.floor()`。这些方法主要用于处理浮点数,将它们转换成整数,但每种方法的取整策略不同。下面我们将...

    Js中Math方法的使用

    这些方法并不需要创建`Math`对象实例即可使用,直接通过`Math`调用即可。本文主要介绍三个常用的方法:`Math.ceil()`、`Math.round()`以及`Math.floor()`。 #### Math.ceil() `Math.ceil()`函数返回大于或等于一个...

    lotus domino AJAX URL调用代理Math.random()

    Lotus Domino AJAX URL调用代理Math.random()是一个前端开发中的技术点,主要涉及到Ajax、JavaScript、ECMAScript以及 Lotus Domino AJAX 框架的应用。在Web应用中,使用Ajax技术可以实现页面局部更新,提高用户体验...

    JavaScript Math 对象的参考手册

    JavaScript中的`Math`对象是一个内置对象,它提供了一系列数学常量和函数,用于执行复杂的数学运算。`Math`对象并不像其他如`Date`或`String`那样具有构造函数,因此我们不能创建`Math`对象的实例。它的所有方法和...

    JS脚本Math方法(强烈推荐).pdf

    JavaScript中的Math对象是编程中不可或缺的一部分,特别是在处理数学运算和模拟物理效果时。Math对象包含了许多静态方法和常量,提供了对基本数学功能的访问。这些功能基于双精度IEEE-754浮点数标准,确保了计算的...

Global site tag (gtag.js) - Google Analytics