当前位置:首页 >> IT/计算机 >>

伪随机数生成及其在Java 中的实现与应用


第 1卷 9

第 1 期 

电 脑 开 发 与 应 用 

文 章编 号 :10 —5 5 ( 0 6 0 —0 3 —0  0 3 8 0 2 0 )1 0 3 3

伪 随 机 数 生 成  其 在 J v 中 的 实 现 与 应 用  及 aa
Ge e a i n o   e do—r n m  m b r   nd is n r to   fPs u a do Nu e s a  t 

I l me t t n a d Ap lc t n i   a a mp e n a i   n   p ia i  n J v   o o
王瑞 胡  王  宇  
( 重庆 文理 学 院 重庆   42 6 ) 0 1 0 

【 摘  要】介 绍 了基 于数 学递 推 法 的 利用 计 算机 产 生伪 随机 数 的线 性 同余 法 , 以及 利用 Jv a a中提 供 的 R n o   adm 类及其 成 员函数来 生成 随机 数 , 并编 写相 应测试 程 序观察 所 生成 的伪 随机序 列 。 最后 结合 一个 游戏 应用 程序 例子  阐述 了如何利 用 随机数来 随机 生成 骰子投 掷 点数用 以模 拟实 践环境 。 此再加 上 别 的有利 条 件 , 以设 计 出各种  用 可
满足 不 同要 求 的软 件 。     【 键词】线 性 同余 法 ,伪 随机数 生成 ,Jv  关 aa
中图 分 类 号 : P 7  T 24

?  
文献标识码 :   A

AB TRACT Th   a e   r s n s ma h ma i r c r e c S   e p p r p e e t  t e tc e u r n e—b s d l e r c n r e t me h d o   s u o—r n o Nu e s g n r t d   a e   i a   o g u n   t o   fp e d n a d m  mb r   e e a e  

wihc mp tr g n r tsr n o fn t n wih Ra d m ls nJ v  n  h   mb rf n t n,n   r g a  h  ee a tp o r m  t  o u e , e e ae  a d m u ci   t   n o ca si a aa dt eme e u ci a dp o r mst er lv n  r ga o o
t   b e v  h   e e a e   s u o—r n o s q e c . w  O u e r n o n mb r   O g n r t   ie c s i g p i t  s e p u d d f r Oo s r et e g n rt dp e d a d m  e u n e Ho t   s   a d m  u e s t   e e a e d c   a t   o n s i  x o n e   o   n sm u a i g a p a t a  n io me tb     a   p l a i n p o r m  x mp e  i l t     r c i le v r n n   y a g me a p i to   r g a e a l . n c c

KEYW ORDS l e rc n r e tmeh d,p e d   i a  o g u n  t o n s u o—r n o n m b r  e e ain, J v  a d m  u esg n r t o aa

随机数 在 软 件设 计 , 尤其 是 在 实 践环 境 模 拟 和测  试等 领域 中得 到很广 泛 的应用 。由于真 正 的随机 数存  在生 成速度 慢 、 效率低 、 占用 大量 存储 空 间且不 可重  需 现等 问题 , 们 转 而研 究 用 算法 生 成 模 拟各 种 概 率分  人 布的 伪随机 序列 。伪 随机 数是 指用 数学 递推 公式 所产  . 生 的随机 数 。 实用 的角 度看 , 取这种 数的 最简 单 和  从 获 最 自然 的方 法是 利用 计 算机语 言 的 函数库 提供 的随 机  数发 生器 。不 同 的开发 环境 提供 的生 成随 机数 的函数  和方 法不 一样 。 中应用 得最 为 广泛 、 究 最彻底 的一  其 研 个算 法 即线性 同余 法 。Jv 作 为 一种应 用 广泛 的面 向  aa
对 象的 编程开 发语 言 , 随 机数生 成提 供 了多种 途径 , 对  

Ra d m ( m , e d, ,   n o n, s e a b)

{  
r) s ed; I e    

f r i 1 i 一 n;+ + ) o ( 一 ;< i   r一 (   a*r一 + b mo    1 ) d m 

)  

其 中种子 参数 s e 以任 意选 择 , 常将 它设 为  ed可 常 计算 机 当前 的 日期 或 者 时 间 ; 是 一 个 较 大 数 , 以    可 把它 取为 2   是 计算 机 的字 长 ; 以是 0 0  和   , n可 .1 W 0 9 W 之 间的任 何整 数 。  9  

2 Jv   a a中伪 随机 数 生 成 机 制 
Jv a a中提 供 R n o 类 产 生 伪 随机 数 。R n o   adm adm 类是 一 个伪 随机 数发 生 器 , 机 数是 按 照 某种 算 法 产  随

以适 应 各种不 同 的设计 要求 。  

1 线性 同余法 L G( ier o gu  C Ln a  n re C
n e Ge e a o ) c  n r t r 
选 取足够 大 的正整 数  和 任意 自然 数 。a b 由 , ,,  
递推 公式 :   ‘   、  
1 一 (f(   + b mo    = 0, , , 一 1 ( ) " 1 冲1 a n) ) d M i 1… M   1 

生 的 , 旦用 一个初 值创 建 R n o 对 象 , 一 adm 就可 以得 到 


系 列 的 随机 数 , 如 果 用 相 同 的初 值 创 建 Rad m 但 no  

对 象 , 到 的随机 数序 列是 相 同的 。为此 ,a a设 计者  得 Jv 在 R n o 类 的 Ra o ) 造方 法 中使用 当前 的系  ad m md m( 构 统 时 间来 初 始化 R n o 对 象 。因为 没有 任何 时刻 的  adm 时 间是相 同的 , 以就 可 以 减少 随 机 数 序列 相 同 的可  所
能性。   ’   2 1 Jv .  a a的 Ra d m 类实 现  no

生 成 的数值序 列称 为是 同余 序列 。 函数 f n 为线 性  当 ()
函数 时 , 即得 到线 性 同余序 列 :  
+一( l 口*n + 6 mo     = 0 1 … , 一 1 i ) dM i , ,     (, 2  )

以下是 线性 同余 法生 成伪 随机 数 的伪代码 :  
*   2 0 — 8 2 到 , 0 5一l 一2 改 回 0 5 0 —2 收 20 l 2     .

** 基金 项 目: 庆 文 理 学 院 校 级 科 研 项 目( 0 4 J 8 。   重 Y20 S 2 ) 

* * *王 瑞 胡 , ,9 5年 生 , 士 , 师 ,0 3年 获 武 汉科 技 大 学 硕 士 , 究 方 向 : 络 数 据 库 , 字 化 终 端 , 入 式应 用 软 件设 计 。 男 17 硕 讲 20 研 网 数 嵌  

伪 随 机 数 生 成 及 其在 Jv a a中的 实 现 与 应 用 
考 察下面两条语句 :  
Ra d m  a d mGe e a o — n w  n o ( ; n o rn o n r tr e Ra d m )  i tr n o n   a d mNu mb r r n o e = a d mGe e a o . e t n ( ; n r t r n x I t n) 

的 n xI t e t 方法 , 时 的表达 式 为 : n 此  

8 a d mGe eao . e tn ( 9 ) / 里 的参 数  +r n o n rtr n x It 2 3 / 这
不 是 2 2  9。

其 中用 到 了 Ra d m 类 的 n x It 法 。以 下 是  no e tn 方

n x It e t 方法 实现 的主 要代 码 : n  
p b i i tn x I t i t n) { u i  n   e tn (n   c  
itbt ,a ; n   is v l 

3 应 用 分 析 
以掷骰 子游 戏 为例 。 此游 戏 中 , 戏者 将 滚动两 个  游 骰子。 每一个 骰 子有 六个 面 , 别代 表 1 2 3 4 5 6 分 , , , , , 这 
六 个 点 。当骰 子停 下 以后 , 到 两个 随机产 生 的数 , 得 计 

d   o{
b t — n x ( 1 ; a =b t  n i s e t 3 ) v l is  

} i ( is v l ( - 1 <O   whl bt - a + n ) ); e
r t n va ; e ur   l 

算 这两 个 骰子 上 面 的点数 和 。根 据 此点 数 和判 断 玩家  是 否 输赢 。其 程序 流 程 图如 图 1所示 。  

}  

通过 n xI t 法 产 生 的 随机 数 的范 围应 根 据 特  e tn 方 定 应 用 程 序 需 要 的 不 同而 不 同 。可 按 照 下 列 形 式 为 

n xI t 法传 递一 个参 数 : e tn 方  
v le 1 r n o au 一 + a d mGe e ao . e tn ( )  n rtrn xIt 6 ;

该语 句产 生一 个从 1到 6范 围 内 的随机 整 数 。 当 

给 n xI t 法传 递 一 个参 数 时 , n x It 法 所 返  e tn 方 由 e tn 方 回的值 的范 围为 0到参 数 值减 1  。
同 n xIt方法 一 样 , 用 ‘e t u l 法 产 生  e tn 利 n xDo be方

的 随机数 的范 围 ( 即大 于等 于 0 0小 于 1 0 也 会 根据  . .) 特 定应 用 程 序 的需 要 而 改 变 。可 以参 照 下 列 形 式 给  n xDo be 法 的返 回值乘 以某 个数 : e t u l方  
d u l Va u   一  o b e le 1    0 *   rn o a d mGe e a o . n rtr  



 

图 1 掷 骰 子 游 戏 程 序 流程 图   

n x D u [( ; 产 生 的 d u l 值 的 范 围变 为 0 0到  e t o be ) 则 o be .
1. 0 0之 间 。  

为 了能 在掷 骰 子游 戏 应 用 程 序 中使 用 随机 数 , 需 
要 导 入 jv . t 包呻 的 Ra d m 类 。 a a ui l no  

另 外 , 可 以 利 用 Jv 也 a a中 的 Mah类 提 供 的  t (。 ) 该方 法 的返 回值是 一个 介 于 0 0 . . ~1 0之 间 的浮 点 
数 。当然 , 了产生 一 个在 0 0和上 界 hg 为 . ih之 间 的 随 

该应 用程 序 中有 几个 地 方都 需 要滚 动 和显 示两 个  骰 子 ;ipa Di ds ly e用于 显示 骰子 的图 片 。其 主要 代码 如 
下 :  
p ia eitr lDie )  rv t n  ol c ( {

r l e 法 用于 滚动  o D e方 rn o 方法 , 调用 形 式 为 d u l X ad m 其 o be =Mah r n o   t .a d m  骰 子 。因此需 要创 建 两个 方法 : l i

机数 , 以把上 述得 到 的 z乘 以 hg 。 么如何 产 生任  可 ih 那
意指定 lw 和 hg o ih两 数之 间 的随 机数 ?如要产 生 的随 

itde 一 1 a d mObe t n xI t 6   n  il +r n o jc. e tn ( ): itde — 1 a d mObe t n xI t 6 ; n  i2 +r n o jc. e tn ( ) 
ds ly e de J a e , i1 ; ip a Di ( il L b ld e ) 

机数 的范 围在 8 0 0. 间 , 用 如下 表达 式 : .  ̄3 00之 可  

董  爹  匿餮  匿量 
2 2 测试 程序编 写 .  

8 0 M ah rn o ( . + t .a d m )*2 2 9 

啄 

箧 、s ly i(萎鲞  ,i2 ;     pa D ede J a e de )  d i i2L b l 甏 蜃 霎蒸藿董鲞 
r t n di e ur   e1+ di2 e 

笔 者编 写 了一个测 试 程序 如下 :  
ca sts { ls e t 

} / n   t o  o l c    e d me h d r l e / Di

. 

p bi sai v i man s r g ] rs { u l tt  od i(ti [ ag ) c c   n  
it n  m= 0/ m 用 于 计 数  ;/
fr iti o (n 一0; 1 0 i + )  i 0 0;+ < {
d u l  o b e x一 8 M a h. a d m ( + t rn o )*2 2   9 ;

该段 代码 将 变量 de 和 de i1 i2分别设 置 为 1 6 包  ~ (
括 边 界 值 ) 间 的 一 个 it型 随 机 数 。 之 后 对  之 n ds ly i ipa D e方法进 行 了两 次调 用 。 i ly e 法 用于  ds a Di 方 p
.  

i( > 2 0 { fx 9 ) m+ + ; y tm. u . rn l x) } S se o t p itn( ;  }  
S s e . u . rn l m)   、 y t m o t p i tn( ;  

显 示 对应 于 1 ~6之 间 的骰 子 图 片 , 中第 1 参 数代  其 个
表 所 显 示 图片 的 J a e, 2个 参 数代 表骰 子 的点 数  L b l第
值。  
p iaev i  ipa Di(La e  iDiJ b li tfc )  rv t  od ds ly e J b lpc eLa e ,n a e {
i a I on i a m ge c  m ge— 

}  

程 序 的运行 结果 表 明 了 10 0个 随 机数 当中有 3   0 5 个 在 20 0 0. 9 .  ̄3 0 0之 间 的随 机数 。 如果 生成 的是 介 于  两 个 数 之 间 的 随机 整 数 , 以利 用 上 述 的 R n o 类  可 adm

n w I g I o ( LE e ma e c n FI


P REF X + f c I a e+ FI LE
—  

S UFF X)  I ;

Dc e I b 1 s t c n(ma e : iDi l, e . e I o i g )   a

第1卷 9

第 1 期 

电 脑 开 发 与 应 用 

( 3 ) . 5. 总 7 3  

},n  e 。 i l De /edm t dd p y i / h sa  

司 的 Ra I H3 1 电 压 检 测 芯 片 , 电压 低 于 3 0   l I 0C 当 V


d p y i 方法显示与用 rl i i l De sa ol c D e方法产生的随  时 , 水表蜂鸣器报警提示。 3 1H 0C芯片检测电压  R 11 3 1
机骰 子数 相对应 的图片 。 中参数 it 其 n 用来 取得 一 幅图 


范 围在 ( O   ) 测 量 精 度 高 , 耗 小 , 常 适合  3 土2 v, 功 非




片 ,L be 用来 显示该 图片 。 I E P FX 和 FL   做 智能水 表 的 电压 检 测芯 片 。 Jal l FL RE I IE   S F X 是 两个 已得 到声 明 的常 量 , UF I 字符 串 F L IE 11 通 .. 信接口 7  
一  

P REF X + fc I a e+ FI E I  



S FI 来指明 U FX用 某个图   片


本次 设计的 智能网 水表采 远 络 用了 程监测 制 和控  
技术 , 需要 与集 中器 及 管理计 算 机进 行双 向通 信 。 现在 

j     i
  :

文件 的位置 ( 1 E P FL REFI 和 F LE S F X 都定  X I UF I

义 为 p iaef a S r g型 , 值 分别 为“ma e / i” 市 场上 比较 常 用 的接 口器 件 有 R r t i l ti v  n   n 其 I g s de   S一2 2和 R 3 S一4 5 8 

和 ?n”。 果fe “ g) 如 a 的值为1则该表达式将变为 两 其中R 一3接口 用负逻 平,单片机的 p c ,   种。 S2 2 采 辑电 与   “ a s i?n”表示表面点数为 1 I g /e p ? m ed1 g 的图片的位 T L 平不 T 电 兼容; 传输速率 它的 较低; 抗干扰 能力弱;   置。 应用 该 程序的 运行界 图2   面如 所示。 有效 距离 传输 有限。 S 4 接口 而R 一8 5 器件的 平与   电 单
’ 。     … ’   卜 口 ‘ 叫 —一 ^‘ ’ J D ‘    ’   t 1    ’   ’   H  匕

  i i   i  
i  

邮 l誓  o    

_ ?   
j  麓 量RI I o J l    

力强; 其有效 距离约为1 0 。 本次 传输   0 故 设计采用 0m  



i  

园  

-据总传方实了能表集器间 l 的 8。 R4 线输式现智水与中   i S通  数5 一信 之  
2 低 功耗 智能 网络 水表 的软 件设 计  i  

裔 劳    

采c 现功 言络表功,组, l 用了 低 语,水的能块计 ; 为言 编 能个序 个件     语 为 智网程由 模设 实 耗 整 多软成 作程



相关文章:
更多相关标签: