




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于 Java 中的 Random 函数 今天在做 Java 练习的时候注意到了 Java 里面的一个随机函数 Random 刚开始只是 知道这个函数具有随机取值的作用 于是上网搜索了资料一番 做了一下一些关于 Random 函数的总结 Java 中其实存在着两种 Random 函数 一 java lang Math Random 调用这个 Math Random 函数能够返回带正号的 double 值 该值大于等于 0 0 且小于 1 0 即取值范围是 0 0 1 0 的左闭右开区间 返回值是一个伪随机选择的数 在该范围内 近似 均匀分布 例如我下面的实验代码 编译通过后运行结果如下图 大家观察会发现代码的用一个循环 10 次循环输出 num 的取值 均随机分布在 0 3 之间 在使用 Math Random 的时候需要注意的地方时该函数是返回 double 类型的值 所以 在要赋值给其他类型的变量的时候注意需要进行塑形转换 二 java util Random 在 Java 的 API 帮助文档中 总结了一下对这个 Random 函数功能的描述 1 java util Random 类中实现的随机算法是伪随机 也就是有规则的随机 所谓有规则 的就是在给定种子 seed 的区间内随机生成数字 2 相同种子数的 Random 对象 相同次数生成的随机数字是完全相同的 3 Random 类中各方法生成的随机数字都是均匀分布的 也就是说区间内部的数字生成 的几率均等 下面 Random 的两种构造方法 1 Random 创建一个新的随机数生成器 2 Random long seed 使用单个 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 下面是 Java util Random 方法摘要 protected intnext int bits 生成下一个伪随机数 booleannextBoolean 返回下一个伪随机数 它是取自此随机数生成器序列的均匀分布的 boolean 值 voidnextBytes byte bytes 生成随机字节并将其置于用户提供的 byte 数组中 doublenextDouble 返回下一个伪随机数 它是取自此随机数生成器序列的 在 0 0 和 1 0 之间均匀分布的 double 值 floatnextFloat 返回下一个伪随机数 它是取自此随机数生成器序列的 在 0 0 和 1 0 之间均匀分布的 float 值 doublenextGaussian 返回下一个伪随机数 它是取自此随机数生成器序列的 呈高斯 正 态 分布的 double 值 其平均值是 0 0 标准差是 1 0 intnextInt 返回下一个伪随机数 它是此随机数生成器的序列中均匀分布的 int 值 intnextInt int n 返回一个伪随机数 它是取自此随机数生成器序列的 在 0 包括 和 指定值 不包括 之间均匀分布的 int 值 longnextLong 返回下一个伪随机数 它是取自此随机数生成器序列的均匀分布的 long 值 voidsetSeed long seed 使用单个 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 方法二 前面曾讲到过构造 Random 对象的时候指定种子的问题 到底指定种子有什么作用呢 这 里直接用代码例子来做说明 在定义的时候分别指定了相同的种子之后 在分别用 r1 和 r2 去 0 30 的随机数 结果编 译执行后悔发现结果都是呈现 AABB 型的 说明 r1 和 r2 取的随机数是一模一样的 下图 为实验截图 如果我改动代码 改成下面这样 再编译输出后 就再也不会得到 AABB 型的结果 根据代码的区别 就可以知道指定种子 数 和不指定种子数的区别在于哪里了 最后再来简单对比一下这两个随机函数到底的特点 java Math Random 实际是在内部调用 java util Random 的 它有一个致命的弱点 它 和系统时间有关 也就是说相隔时间很短的两个 random 比如 double a Math random double b Math random 即有可能会得到两个一模一样的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实时预测算法-洞察及研究
- 小学宪法知识竞赛题库(含参考答案)
- 重庆外国语学校2026届高三(上)开学考试政治试题及答案
- 2025年版能源服务合同范本
- 出国培训安全注意事项
- 2025贷款中介服务合同范本
- 2025调整抚养权合同
- 出入仓安全培训课件
- 大一上政治期末考试卷及答案
- triz技术矛盾解决原理
- 热控安装工程施工方案
- 医院水、电、气故障报修、排查、处理流程1
- 八年级上册物理 第一章 第一节长度和时间的测量课件
- 数控加工中心培训课件
- 开关电源测试表格
- 《思想政治教育专业导论》课程教学大纲
- 产品可追溯性模拟演练(成品-原料)记录
- 中国—东盟自贸区
- 安全帽试验作业指导书实施细则
- IUPAC系统命名解读
- 专业互提条件清单-建筑
评论
0/150
提交评论