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

转载于:https://www.cnblogs.com/clnchanpin/p/6921038.html

Java - 经常使用函数Random函数相关推荐

  1. c语言 random安全函数,random函数-关于C语言的函数问题请问,randomize()random这两 爱问知识人...

    函数名: rand 功 能: 随机数发生器 用 法: void rand(void); //产生0~32767的随机数 程序例: #include #include int main(void) { ...

  2. 如何利用python产生随机数(randrange函数和random函数)

    python提供了一个库模块,其中包含一些有用的函数用来生成(伪)随机数.该模块中的函数根据模块加载的日期和时间推导出初始种子值,因此每次运行程序时都会获得不同的种子值.这意味着你也会获得唯一的伪随机 ...

  3. java random构造方法_Java中的Random()函数及两种构造方法

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

  4. Java:Random函数及其种子的作用

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

  5. java random函数原理_JAVA Random 详解

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

  6. python的random函数_关于random()的详细介绍

    这篇文章主要介绍了Python随机生成数模块random使用实例,本文直接给出示例代码,需要的朋友可以参考下代码如下:#!/usr/bin/env python#coding=utf-8import ...

  7. 两种Random函数的使用

    Java中的Random()函数 Java中存在着两种Random函数(java.lang.Math.Random以及java.util.Random): 因为在日常的使用中,常常会涉及到随机数的产生 ...

  8. random函数的使用

    random函数的使用 random调用包 Random类定义的核心公有方法 构造方法 random调用包 java.util.Random() 返回带正号的double值,即取值范围是[ 0.0 , ...

  9. Java箭头函数,lambda函数

    Java箭头函数,lambda函数 lambda表达式实质就是一种语法糖,(建议尽量不要使用lambda表达式,代码太简洁,难懂,难以调试) lambda表达式的简单例子: 不需要参数,返回5 ()- ...

最新文章

  1. Tomcat(五):Tomcat 参数调优教程
  2. 用计算机做科学实验评课,科学小实验课程听课心得
  3. Mathematica笔记
  4. 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  5. python中常见的运行时错误_17个常见的Python运行时错误
  6. Common Lisp中调用R
  7. P3846-[TJOI2007]可爱的质数【BSGS,数论】
  8. Python 学习编程 【for语句breakcontinue语句使用】(一)
  9. ON1 photo raw 2021(ps/lr滤镜插件) 下载及安装
  10. 填涂颜色(洛谷-P1162)
  11. kafka java api 删除_Kafka入门系列—6. Kafka 常用命令及Java API使用
  12. c#之跟踪(c#高级编程系列)
  13. 025Python路--安装第三方模块
  14. Gin Web框架简单介绍
  15. JAVA集合系列(3):ArrayList扩容原理分析
  16. snipaste怎么滚动截长图_【神器】Snipaste——最好用的截图、贴图软件,没有之一...
  17. SAP学习记__物料管理(MM)模块__采购入库冲销、退货
  18. uboot移植——uboot的硬件驱动部分
  19. 加拿大麦吉尔大学计算机科学学院,加拿大麦吉尔大学专业:加拿大麦吉尔大学的院校介绍以及专业设置...
  20. Gym - 100886D 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest D - Catenary

热门文章

  1. 手把手教你构建食物识别AI:小白轻易可上手,人气高赞有Demo | 资源
  2. Waymo也商业化了!“早期乘客”项目开始测试收费,凤凰城人民掏了腰包
  3. 《2018中国AI计算力发展报告》发布!北京算力仅排第二
  4. 十年了,斯坦福和CMU的这场对决,开启了无人车时代
  5. 云服务器的IT价值与部署分析
  6. Kanban VS Scrum:哪个是最好的敏捷项目管理框架
  7. Jquery封装幻灯片效果
  8. HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator
  9. JFinal保存对象后可以取出主键
  10. 平面设计师必读的十本书