`
wuchangqing
  • 浏览: 5998 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Random的使用

阅读更多
原文链接 : http://blog.sina.com.cn/s/blog_93dc666c0101h3gd.html
Java中存在着两种Random函数:
一、java.lang.Math.Random;
调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
例如下面的实验代码
 Java中的Random()函数
编译通过后运行结果如下图
 Java中的Random()函数
观察会发现代码的用一个循环10次循环输出num的取值,均随机分布在[0,3)之间!在使用Math.Random()的时候需要注意的地方时该函数是返回double类型的值,所以在要赋值给其他类型的变量的时候注意需要进行塑形转换。
 
二、java.util.Random;
在Java的API帮助文档中,总结了一下对这个Random()函数功能的描述:
1、java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;
2、相同种子数的Random对象,相同次数生成的随机数字是完全相同的;
3、Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等;
 
下面Random()的两种构造方法
1.Random():创建一个新的随机数生成器。
2.Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
 
我们可以在构造Random对象的时候指定种子(这里指定种子有何作用,请接着往下看),如:
Random r1 = new Random(20);
或者默认当前系统时间对应的相对时间有关的数字作为种子数:
Random r1 = new Random();
需要说明的是:你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系。如下面的Java代码:
Random rand =new Random(25);
int i;
i=rand.nextInt(100);
初始化时25并没有起直接作用(注意:不是没有起作用),rand.nextInt(100);中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。
 
下面是Java.util.Random()方法摘要
1.protected int next(int bits):生成下一个伪随机数。
2.boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
3.void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
4.double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
5.float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
6.double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
7.int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
8.int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
9.long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
10.void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。
 
方法摘要也就这些,下面给几个例子:
1.生成[0,1.0)区间的小数:double d1 = r.nextDouble();
2.生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
3.生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
4.生成-231到231-1之间的整数:int n = r.nextInt();
5.生成[0,10)区间的整数:
int n2 = r.nextInt(10);//方法一
n2 = Math.abs(r.nextInt() % 10);//方法二
 
前面曾讲到过构造Random对象的时候指定种子的问题,到底指定种子有什么作用呢,这里直接用代码例子来做说明:
 Java中的Random()函数

 

在定义的时候分别指定了相同的种子之后,在分别用r1和r2去[0,30)的随机数,结果编译执行后悔发现结果都是呈现AABB型的,说明r1和r2取的随机数是一模一样的(下图为实验截图)。
 Java中的Random()函数
如果我改动代码,改成下面这样:
 Java中的Random()函数

 

再编译输出后,就再也不会得到AABB型的结果,根据代码的区别,就可以知道指定种子数,和不指定种子数的区别在于哪里了。
 Java中的Random()函数
 
最后再来简单对比一下这两个随机函数到底的特点:
1.java.Math.Random()实际是在内部调用java.util.Random()的,它有一个致命的弱点,它和系统时间有关,也就是说相隔时间很短的两个random比如:
double a = Math.random();
double b = Math.random();
即有可能会得到两个一模一样的double。
2.java.util.Random()在调用的时候可以实现和java.Math.Random()一样的功能,而且他具有很多的调用方法,相对来说比较灵活。所以从总体来看,使用java.util.Random()会相对来说比较灵活一些。
分享到:
评论

相关推荐

    python随机模块random使用方法详解

    ### Python随机模块random使用方法详解 #### 概述 Python中的`random`模块提供了一系列用于生成随机数的函数。这些函数对于开发游戏、密码生成器、数据加密算法、科学计算等场景非常有用。通过调用`random`模块提供...

    Oracle随机函数之dbms_random使用详解

    如果你需要特定范围内的数值,如100到0之间,可以使用`dbms_random.value(low, high)`,如`SELECT dbms_random.value(100, 0) FROM dual;` 这将返回一个介于100(包括)和0(包括)的随机浮点数。 2. **dbms_random...

    random函数使用详细讲解

    该文档是关于random函数使用详细讲解,主要在代码编写产生随机数的时候用到,详细介绍了random函数的各种用法,赶快下载看看吧~

    FLASH中使用Random函数创建随机数

    现在我们深入探讨如何在Flash中使用Random函数以及相关的应用。 首先,让我们了解基本的用法。在ActionScript中,你可以这样创建一个0到1之间的随机数: ```actionscript var randomNumber:Number = Math.random()...

    Python random库使用方法及异常处理方案

    1.random库的使用: random库是使用随机数的Python标准库 从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件...

    math.random用法

    可以使用 Math.round(Math.random()*(y-x))+x 生成一个 x 到 y 之间的随机数,例如生成一个 5 到 20 之间的随机数可以使用 Math.round(Math.random()*15)+5。 6. 应用实例 在 Flash 中,可以使用 Math.random() ...

    C#中random函数使用 抓阄系统

    下面我们将深入探讨`Random`类的使用以及如何构建一个简单的抓阄系统。 首先,让我们了解`Random`类的基本用法。`Random`类位于`System`命名空间下,创建`Random`对象时,你可以传递一个种子值,如果不传,则系统会...

    randomForest_R

    在`randomForest`包中,我们可以使用`randomForest()`函数建立模型。例如,对于分类问题,我们有: ```R model <- randomForest(target ~ ., data = train_data, ntree = 500, mtry = sqrt(ncol(train_data) - 1)) ...

    Random_Numbers_Android-master_randomnumbers_random_androidstudio

    这个项目"Random_Numbers_Android-master_randomnumbers_random_androidstudio"显然专注于如何在Android Studio环境下生成和使用随机数。 在Android中,生成随机数主要依靠`java.util.Random`类。这个类提供了多种...

    Random函数

    为此,我们可以使用 getRandomNum 函数,该函数使用 Random 类的 Next() 方法来生成随机数,并使用 getNum 函数来检测生成的随机数是否有重复。 getRandomNum 函数的实现原理是使用 Random 类的实例来生成随机数,...

    Python随机生成数模块random使用实例

    print random.random() #[x, y]中的随机整数 print random.randint(1, 100) list = [1, 2, 3, 4, 5] #随机选取 print random.choice(list) #随机打乱 random.shuffle(list) print list 输出 复制代码 代码如下: 0....

    Java基础之Random随机数.docx

    在Java中,Random类提供了产生随机数的方法,下面将详细介绍Random类的使用。 Random类的使用 Random类是Java中生成随机数的主要类,它提供了多种方法来生成随机数。下面是Random类的一些常用方法: * `nextInt()...

    hw_random硬件随机数1

    这些工具利用/dev/hw_random来填充内核熵池,熵池被内核内部使用,并通过/dev/urandom和/dev/random特殊文件对外导出。 **工作原理** 1. **字符设备** 通过标准的open()和read()系统调用,可以直接从硬件RNG设备...

    Python random 生成随机数

    默认情况下,它使用`random.random()`函数作为随机源。该函数会改变原列表的顺序,因此如果不想改变原列表,需要先复制一份再进行操作。 **示例代码:** ```python import random lst = [1, 2, 3, 4, 5] random....

    python使用turtle库与random库绘制雪花

    Python使用turtle库与random库绘制雪花 在计算机图形学领域,使用编程语言来模拟自然现象是一种常见的实践。Python作为一门简洁易学的编程语言,很适合用来做这样的实验。通过结合turtle图形库和random库,我们可以...

    用C++封装的CRandom类

    使用`CRandom`类的示例代码可能如下: ```cpp #include "Random.h" int main() { CRandom random; int randomInt = random.generateInt(1, 100); float randomFloat = random.generateFloat(0.0f, 1.0f); bool...

    Mahout RandomForest Example使用步骤

    在这些算法中,随机森林(Random Forest)是一种广泛使用的集成学习方法,适用于分类和回归任务。本篇文章将详细解释如何在 Mahout 中使用随机森林进行数据分类。 首先,我们需要了解随机森林的基本概念。随机森林...

Global site tag (gtag.js) - Google Analytics