参考https://blog.csdn.net/md_shmily92/article/details/44059313

相关文章random.nextInt()与Math.random()基础用法

Java中Random也称为伪随机函数。

这句代码在Thinking in java中很常见

Java代码 
  1. Random rand = new Random(47);

但是下面两句代码放在一起就会有点晕了

Java代码 
  1. Random rand = new Random(47);
  2. int i = rand.nextInt(100);  //产生的随机数 不包括100,最大到99,

生成的随机数范围到底是什么,是0-47还是0-100,跟47和100又有什么关系。 
下面Random()方法做一些简单说明吧。

伪随机数 
对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。 
一般地,我们使用同系统时间有关的参数作为随机种子。

Random对象的生成 
Random类包含两个构造方法,下面依次进行介绍: 
(1)public Random() 
该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。

Java代码 
  1. public Random() { this(++seedUniquifier + System.nanoTime()); }
  2. private static volatile long seedUniquifier = 8682522807148012L;

(2)public Random(long seed) 
该构造方法可以通过制定一个种子数进行创建。

Java代码 
  1. Random r = new Random(10);

切记,种子数只是随机算法的起源数字,和生成的随机数字的区间无关!

随机种子对结果的影响 
(1)随机种子一定,随机数范围一定,则单个对象单次运行的结果一定 
选取随机种子为47,随机数最大值为19. 
下面代码运行10次的结果总是为18.

Java代码 
  1. public static void main(String[] args) {
  2. for (int i = 0; i < 10; i++) {
  3. Random rand = new Random(47);
  4. int j = rand.nextInt(20);
  5. System.out.println(j);
  6. }
  7. }

(2)随机种子一定,随机数范围一定,则多个对象单次运行的结果一定 
用相同的随机种子和随机范围生成了两个Random对象,但j和k的值每次都为18

Java代码 
  1. public static void main(String[] args) {
  2. for (int i = 0; i < 10; i++) {
  3. Random rand1 = new Random(47);
  4. Random rand2 = new Random(47);
  5. int j = rand1.nextInt(20);
  6. int k = rand2.nextInt(20);
  7. System.out.println(j);
  8. System.out.println(k);
  9. }
  10. }

(3)随机种子一定,随机数范围一定,但对象连续调用,运行结果不同 
在下面的代码中一次循环内,rand对象被连续调用了3次,分别输出了18,15,13. 
但每次循环的结果都一样,18,15,13会被顺序循环输出。 
也就是说同一个Random对象在随机种子和随着范围一定的情况下,连续调用的次数不同会生成不同的随机数。

Java代码 
  1. public static void main(String[] args) {
  2. for (int i = 0; i < 10; i++) {
  3. Random rand = new Random(47);
  4. int j = rand.nextInt(20);
  5. int k = rand.nextInt(20);
  6. int p = rand.nextInt(20);
  7. System.out.println(j);
  8. System.out.println(k);
  9. System.out.println(p);
  10. }
  11. }

产生特定区间的随机值

如产生5-26之间的随机值,为rand.nextInt(26-5+1)+5;

总结 
最后结合API中的说明,再简要总结写Random()方法的功能: 
(1)java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字; 
(2)相同种子数的Random对象,相同次数生成的随机数字是完全相同的; 
(3)Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等;

(4) 47是一个产生随机数的魔法数字,这个问题到现在都没人能够解释,只是经过很多次试验得到的,包括《Thinking in java》的作者布鲁斯.艾克尔也这么提到:由47做种后,产生的随机数更加体现了随机性。它没有什么具体的意义,只要理解随机数如果有一个种子,哪么出现了比较随即的随机数,而当种子是47的时候,随即率是最大的。

转载于:https://www.cnblogs.com/lijingran/p/8997892.html

关于Random(47)与randon.nextInt(100)的区别相关推荐

  1. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数

    Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt方法显示0到100之间的前50个随机整数 题目 赘述 代码 题目 ...

  2. Random类中的nextInt()函数

    Random的两个nextInt函数: 1.Random的nextInt()是无参函数,用来随机生成-~范围之间的整数: 2.Random的nextInt(int n)函数用来随机生成[0,n)之间的 ...

  3. width:100%和 max-width:100%的区别

    width:100% 和 max-width:100%的区别: width: 100%(不包括margin和padding和border)是将所有指定元素的宽度拉伸或收缩到和父元素的宽度一致, 而ma ...

  4. min-width:100%和max-width:100%的区别

    1.width:100%和width:auto width:100%,设定对象的宽度占父元素的100%不论设定元素的margin值是多少,不包含margin: width:auto,根据设定对象的实际 ...

  5. 100vh和100%的区别

    介绍 vh就是当前屏幕可见高度的1%,也就是说 height:100vh == height:100%; 我的案例: 元素没有设置高度的时候, 我写移动端界面的时候用100vh会把屏幕撑大到需要滑动框 ...

  6. 在设置背景图片全屏时background-size: 100% 100%;和background-size: 100%;的区别,一个100%和两个100%的区别

    background-size:这个属性有两个值,第一个值为x轴方向的缩放比例或者px,第二个值为y轴方向的缩放比例或者px,如果只写一个值,则第二个值默认为auto(根据图片原来的比例,以及现有的宽 ...

  7. CSS width = 100vw 和width = 100%的区别

    vw和vh相对的当前浏览器的视口 ,例如当前视口尺寸为375px 那么100vw = 375px,与父元素的大小无关 width = 100% 是指当前width相对于父元素的宽度,100%时宽度等于 ...

  8. 今日前端小知识—— width:auto 与 width:100% 的区别

    前段时间做页面的时候,发现给盒子设置 width:100% 和 auto 的效果不一样,这里来探讨一下. <style>.main {width: 300px;height: auto;p ...

  9. numpy.random 中rand和randn 函数的区别

    在学习numpy时,遇到了rand和randn两个函数,一开始不注意还把这俩当成同一个函数了.后来从网上查到,rand产生的是位于(0, 1)内的随机数,我猜测可能是服从标准均匀分布的随机数:rand ...

最新文章

  1. RedHat使用163源
  2. 使用OpenCV开发机器视觉项目
  3. 租网站服务器安全吗,租用的服务器安全吗
  4. asp.net 动态创建TextBox控件 如何加载状态信息
  5. 谈谈Java与大数据之间的关系你们都了解了清楚了吗?
  6. JavaScript学习指南 (来自转载)
  7. 基于javaweb+jsp的在线购书商城系统(java+jsp+mysql+servlert+ajax)
  8. navicat 绿化版
  9. 【微信小程序】从零开始搭建一个英语学习小程序01——基础准备
  10. 从一个插座面板开始说故事
  11. 解决Microsoft Edge与Chrome地址栏使用必应搜索bing.com很慢的问题
  12. 从零开始学python项目_从零开始学Python程序设计
  13. 迅雷启动慢 解决方法
  14. VC2010 中 MFC 的改进导致 XTP 停靠窗体无法显示的解决方法
  15. 【WPS表格】数据透视表的一些笔记整理
  16. 书法练习轨迹ReadMe
  17. 《MySQL 8从零开始学(视频教学版)》简介
  18. 关于http与https的区别之处
  19. 家具建材行业B2B电商平台解决方案
  20. 双 JK 触发器 74LS112 逻辑功能。真值表_Java多线程 volatile适用的场景:触发器

热门文章

  1. 十分钟教你学会打包APP
  2. WINCC 常见问题
  3. N卡版本查询--Windows命令下:
  4. IPC 通信 - IPC
  5. FastQC 与 质控
  6. Python爬取页游火线精英全区挑战排行榜
  7. 【笔记】《Federated Learning With Blockchain for Autonomous Vehicles Analysis and Design Challenges》精读笔记
  8. 少儿平台e启学用户隐私协议
  9. 【资源分享】一个超级方便的看电子书方法推荐
  10. Python 给视频添加水印