随机数浅谈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本文章由北大青鸟广安门校区搜集自互联网

RAKSmart VPS主机半价活动 支持Windows系统 包含香港、日本机房

RAKSmart 商家最近动作还是比较大的,比如他们也在增加云服务器产品,目前已经包含美国圣何塞和洛杉矶机房,以及这个月有新增的中国香港机房,根据大趋势云服务器算是比较技术流的趋势。传统的VPS主机架构方案在技术层面上稍微落后一些,当然也是可以用的。不清楚是商家出于对于传统VPS主机清理库存,还是多渠道的产品化营销,看到RAKSmart VPS主机提供美国、香港和日本机房的半价促销,当然也包括其他...

数脉科技:六月优惠促销,免备案香港物理服务器,E3-1230v2处理器16G内存,350元/月

数脉科技六月优惠促销发布了!数脉科技对香港自营机房的香港服务器进行超低价促销,可选择30M、50M、100Mbps的优质bgp网络。更大带宽可在选购时选择同样享受优惠,目前仅提供HKBGP、阿里云产品,香港CN2、产品优惠码续费有效,仅限新购,每个客户可使用于一个订单。新客户可以立减400元,或者选择对应的机器用相应的优惠码,有需要的朋友可以尝试一下。点击进入:数脉科技官方网站地址数脉科技是一家成...

CloudCone中国春节优惠活动限定指定注册时间年付VPS主机$13.5

CloudCone 商家产品还是比较有特点的,支持随时的删除机器按时间计费模式,类似什么熟悉的Vultr、Linode、DO等服务商,但是也有不足之处就在于机房太少。商家的活动也是经常有的,比如这次中国春节期间商家也是有提供活动,比如有限定指定时间段之前注册的用户可以享受年付优惠VPS主机,比如年付13.5美元。1、CloudCone新年礼物限定款仅限2019年注册优惠购买,活动开始时间:1月31...

java随机数为你推荐
打开网页出现错误显示网页上错误,打不开网页怎么办flash导航条谁来帮我看看这样的flash导航条 下面的页面该怎么设计1433端口1433端口怎么打开qq怎么发邮件如何通过QQ发送邮件ios7固件下载ios 7及以上固件请在设备上点信任在哪点xp系统停止服务xp系统停止服务怎么办奇虎论坛360有论坛中心?mate8价格华为mate8手机参数配置如何,多少元机械键盘轴打游戏用机械键盘到底什么轴好?网站排名靠前网站排名靠前是否就意味着运营成功?阐述原因
北京vps 中文域名申请 工信部域名备案 com域名抢注 堪萨斯服务器 香港cdn 42u机柜尺寸 parseerror 全能主机 免费mysql 怎样建立邮箱 可外链网盘 qq云端 ftp免费空间 绍兴电信 登陆空间 游戏服务器出租 万网空间 数据湾 葫芦机 更多