http://blog.csdn.net/pipisorry/article/details/44411541

Random()函数生成随机数

java.util.Random

在Java的API帮助文档中,总结了一下对这个Random()函数功能的描写叙述:
1、java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;
2、同样种子数的Random对象,同样次数生成的随机数字是全然同样的;
3、Random类中各方法生成的随机数字都是均匀分布的。也就是说区间内部的数字生成的几率均等;

Random()的两种构造方法

1.Random():创建一个新的随机数生成器。
2.Random(longseed):使用单个 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。

Random()方法
1.protectedint next(intbits):生成下一个伪随机数。
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(intn):返回一个伪随机数,它是取自此随机数生成器序列的、在(包含和指定值(不包含)之间均匀分布的int值。
9.long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的long 值。
10.void setSeed(longseed):使用单个 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);//方法二

随机数种子的作用:

样例来做说明:

 
在定义的时候分别指定了同样的种子之后,在分别用r1和r2去[0,30)的随机数,结果编译运行懊悔发现结果都是呈现AABB型的,说明r1和r2取的随机数是一模一样的(下图为实验截图)。

 
假设我修改代码,改成以下这样:
 
再编译输出后。就再也不会得到AABB型的结果,依据代码的差别,就能够知道指定种子数。和不指定种子数的差别在于哪里了。

java.lang.Math.Random

调用这个Math.Random()函数可以返回带正号的double值。该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数。在该范围内(近似)均匀分布。

两个随机函数究竟的特点:

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()会相对来说比較灵活一些。

from:http://blog.csdn.net/pipisorry/article/details/44411541

ref:http://blog.sina.com.cn/s/blog_93dc666c0101h3gd.html

Java - 经常使用函数Random函数的更多相关文章

  1. Sass函数--数字函数

    数字函数简介 Sass 中的数字函数提要针对数字方面提供一系列的函数功能: percentage($value):将一个不带单位的数转换成百分比值: round($value):将数值四舍五入,转换成 ...

  2. JAVA中的Random()函数

    Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范 ...

  3. tips:Java的Random类和Random函数

    tips:Java的Random类和Random函数! 随机数是一个很有趣的东西,在java中可以通过下面这2种方法得到: (1)Random类: Random类是java.util.Random这个 ...

  4. Java Random函数

    Java中存在着两种Random函数: 1.java.lang.Math.Random: 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范 ...

  5. random函数

    Java中存在着两种Random函数: 一.java.lang.Math.Random; 调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范 ...

  6. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  7. OC与c混编实现Java的String的hashcode()函数

    首先,我不愿意大家需要用到这篇文章里的代码,因为基本上你就是被坑了. 起因:我被Java后台人员坑了一把,他们要对请求的参数增加一个额外的字段,字段的用途是来校验其余的参数是否再传递过程中被篡改或因为 ...

  8. C#Random函数在循环中每次获取一样的值

    首先需要了解一点Random函数的随机生成是和当前时间有关系,如果在短时间生成随机数,就会导致随机数生成出来是相同的. 不过我们可以在每次随机时指定一个Seed种子值,这样在循环里就可以每次获取不一样 ...

  9. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

随机推荐

  1. 0x54 树形DP

    树形DP我只知道千万别写森林转二叉树慢的要死 没有上司的舞会 水!裸! #include<cstdio> #include<cstring> #include<cstdl ...

  2. AIX的系统备份

    AIX克隆盘即AIX的rootvg的备用替换磁盘,用于保留AIX的原始状态,它可作为软件的升级后出现问题快速回退到原系统的备份手段,也可用于测试两个不同版本的AIX系统.系统可保留两块引导磁盘,而且都 ...

  3. Eclipse 连接hsqldb数据库

    初学Java,在接触数据库根本无从下手,不知如何将程序和数据库连接起来,今天做一个记录. 数据库是:hsqldb_1_8_0_5 附链接百度云盘 链接:https://pan.baidu.com/s/ ...

  4. CSS Flexbox 弹性盒子模型

    CSS Flexbox 弹性盒子模型 设置元素样式为 display: flex 或 display: inline-flex, 让元素变成flex容器, 从而可以通过flex模式布局它的子元素. f ...

  5. IT业常见职位英语缩写全攻略及详解

    现在中国人流行起英文名字,连职位也跟着作秀,什么CEO.COO.CFO.CTO.CIO啦,那CEO.COO.CFO.CTO.CIO到底是什么意思呢?总被这些概念搞晕,这可不是搞IT的应该犯的错误哦,好 ...

  6. jquery.slides.js

    http://slidesjs.com/#docs 一款强大的,专业的幻灯片组件,全方位对幻灯片的速度..全方位的控制: $(function(){ $("#slides").sl ...

  7. 从Android源码分析View绘制

    在开发过程中,我们常常会来自定义View.它是用户交互组件的基本组成部分,负责展示图像和处理事件,通常被当做自定义组件的基类继承.那么今天就通过源码来仔细分析一下View是如何被创建以及在绘制过程中发 ...

  8. Linux下实现视频读取

    V4L(video4linux是一些视频系统,视频软件.音频软件的基础,经常时候在需要采集图像的场合,如视频监控,webcam,可视电话,经常使用在embedded linux中是linux嵌入式开发 ...

  9. js原生_获取url键值对

    思路: 1.先对url进行处理,获取 ?后的字符串 postid=10457794&actiontip=保存修改成功') 2. 字符串通过&标识,不同参数转为数组 ["pos ...

  10. hdu1811 Rank of Tetris 拓扑排序+并查集

    这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...