免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2248 | 回复: 0
打印 上一主题 下一主题

java中random随机函数的一些理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-27 16:45 |只看该作者 |倒序浏览
random()是伪随机数生成器,因为的它的随机数生成都是和seed种子相关的,只要种子相同生成的随机数都是相同的,在没有指定种子的情况下
会根据当前时间生成一个种子参数
在一篇博客中看到这样一句话;实际上Random是一种伪随机数,相同的种子产生相同的序列(注意不是相同数值)。
为什么说是生成相同的序列,这里要理解下构造函数设定种子后(不管是自己指定的还是,系统默认生成的)随机数是怎样生成的:
首先nextInt()函数会根据当前的seed生成一个随机后,然后把生成的随机数赋值给seed,继续生成随机数,一直这样执行下去。

所以好好理解下面两段代码
  1. public static void main(String[] args) {
  2.                   
  3.          for (int i=0;i<10;i++){
  4.          Random r = new Random(10);
  5.          data = r.nextInt(10);
  6.                    System.out.print(rand);     
  7.          System.out.print(" ");
  8.          }
  9.         
  10.          }
复制代码
生成的10个数都是一样的
  1. public static void main(String[] args) {
  2.                  Random r = new Random(10);
  3.                  for (int i=0;i<10;i++){
  4.                  data = r.nextInt(10);
  5.                            System.out.print(rand);
  6.                  System.out.print(" ");
  7.                  }
  8.              }
复制代码
上面这段代码生成的10个数都不一样,但是再次执行的时候生成的10个数序列和上次执行for循环生成的序列是一样的,这点就是上面那句的意思
random()默认生成种子的原理是一样的,但是如果把上面换成random()的话,执行多次for循环生成的随机数都会不一样,因为每次执行的时候时间不一样了 所以默认的种子也就不同了,由此可知,random()随机数生成的关键是要有一个的真正随机的种子
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP