随机数浅谈Java中的几种随机数

java随机数  时间:2021-02-13  阅读:()

浅谈Jav a中的几种随机数

众所周知随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的产生一个0到1之间的随机数。看似简单但有时我们也会忽略了一些有趣的功能。

我们从书本上学到什么

最明显的也是直观的方式在Java中生成随机数只要简单的调用java. lang.Math.rando m()

在所有其他语言中生成随机数就像是使用Math工具类如abs, pow, f loor

, sqrt和其他数学函数。大多数人通过书籍、教程和课程来了解这个类。一个简单的例子从0.0到1.0之间可以生成一个双精度浮点数。那么通过上面的信息开发人员要产生0.0和10.0之间的双精度浮点数会这样来写

Math.rando m() * 10

而产生0和10之间的整数则会写成

Math.round (Math.rando m() * 10)

进 阶

通过阅读M ath.rando m()的源码或者干脆利用IDE的自动完成功能开发人

员可以很容易发现 java. lang.Math.rando m()使用一个内部的随机生成对象-一个很强大的对象可以灵活的随机产生布尔值、所有数字类型甚至是高斯分布。例如new java.util.Rando m() .nextI nt(10)

它有一个缺点就是它是一个对象。它的方法必须是通过一个实例来调用这意味着必须先调用它的构造函数。如果在内存充足的情况下像上面的表达式是可以接受的但内存不足时就会带来问题。

一个简单的解决方案可以避免每次需要生成一个随机数时创建一个新实例那就是使用一个静态类。猜你可能想到了jav a. lang.Math很好我们就是改 良java .lang.Math的初始化。虽然这个工程量低但你也要做一些简单的单元测试来确保其不会出错。

假设程序需要生成一个随机数来存储 问题就又来了。 比如有时需要操作或保护种子(seed) 一个内部数用来存储状态和计算下一个随机数。在这些特殊情况下共用随机生成对象是不合适的。

并 发

在Java EE多线程应用程序的环境中随机生成实例对象仍然可以被存储在类或其他实现类作为一个静态属性。幸运的是 java.util.Rando m是线程安全的所以不存在多个线程调用会破坏种子(seed)的风险。

另一个值得考虑的是多线程jav a. lang.Threa dLoca l的实例。偷懒的做法是通过Ja va本身A PI实现单一实例 当然你也可以确保每一个线程都有自己的一个实例对象。

虽然Jav a没有提供一个很好的方法来管理java.util.Rando m的单一实例。但是期待已久的Java 7提供了一种新的方式来产生随机数java.util.concu rrent .Threa dLoca lRand om.curre nt() .nextI nt(10)

这个新的A PI综合了其他两种方法的优点单一实例/静态访问就像Math.rando m()一样灵活。 Threa dLoca lRand om也比其他任何处理高并发的方法要更快。

经验

Chris Maras ti-Georg指出:

Math.round (Math.rando m() * 10)

使分布不平衡例如 0.0-0.499999将四舍五入为0而0.5至1.499999将四舍五入为1。那么如何使用旧式语法来实现正确的均衡分布如下

Math.floor (Math.rando m() * 11

幸运的是如果我们使用java .util.Rando m或jav a.util.concu rrent

.Threa dLoca lRand om就不用担心上述问题了。

Java实战项目里面介绍了一些不正确使用java.util.Rando m API的危害。这个教训告诉我们不要使用

Math.abs(rnd.nextI nt() )%n

而使用rnd.nextI nt(n)

ps本文章由北大青鸟广安门校区搜集自互联网

器安装环境和运维管理工具推荐

今天看到一个网友从原来虚拟主机准备转移至服务器管理自己的业务。这里问到虚拟主机和服务器到底有什么不同,需要用到哪些工具软件。那准备在下班之间稍微摸鱼一下整理我们服务器安装环境和运维管理中常见需要用到的软件工具推荐。第一、系统镜像软件一般来说,我们云服务器或者独立服务器都是有自带镜像的。我们只需要选择镜像安装就可以,比如有 Windows和Linux。但是有些时候我们可能需要自定义镜像的高级玩法,这...

创梦网络-新上雅安电信200G防护值内死扛,无视CC攻击,E5 32核高配/32G内存/1TB SSD/100Mbps独享物理机,原价1299,年未上新促销6折,仅779.4/月,续费同价

创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川眉山联通、广东优化线路高防机柜,CN2专线相关业务。广东电信大带宽近期可以预约机柜了,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网...

MechanicWeb免费DirectAdmin/异地备份

MechanicWeb怎么样?MechanicWeb好不好?MechanicWeb成立于2008年,目前在美国洛杉矶、凤凰城、达拉斯、迈阿密、北卡、纽约、英国、卢森堡、德国、加拿大、新加坡有11个数据中心,主营全托管型虚拟主机、VPS主机、半专用服务器和独立服务器业务。MechanicWeb只做高端的托管vps,这次MechanicWeb上新Xeon W-1290P处理器套餐,基准3.7GHz最高...

java随机数为你推荐
回收站在哪手机回收站在哪里打开简体翻译成繁体有什么将简体中文翻译成繁体中文的网站啊人人时光机寻时光机歌词拂晓雅阁有什么网站是学电脑技术的`?吴晓波频道买粉吴晓波频道学习卡资费?唱吧电脑版官方下载唱吧有电脑版的么? 在哪里下载啊?硬盘人硬盘是指什么人xv播放器下载除了迅雷看看播放器还有什么播放器支持xv格式的视频?2012年正月十五农历2012年正月15早上9点多生的!命里缺什么!是什么命相分词技术怎么在SEO中学会运用关键词分词技术
asp主机 虚拟主机mysql 荷兰vps 域名备案流程 免费cn域名 openv 唯品秀 hawkhost优惠码 韩国俄罗斯 香港机房 免备案空间 mysql主机 卡巴斯基永久免费版 爱奇艺vip免费领取 中国域名 阿里云个人邮箱 netvigator asp空间 rewritecond hdsky 更多