999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

偽隨機(jī)數(shù)在Java中的應(yīng)用研究

2010-01-01 00:00:00李曉英
電腦知識(shí)與技術(shù) 2010年3期

摘要:介紹了Java中偽隨機(jī)數(shù)生成機(jī)制,并通過“擲骰子”和“35中7福利彩票”兩個(gè)游戲模擬程序,著重闡述了偽隨機(jī)數(shù)在Java軟件設(shè)計(jì)中的應(yīng)用。

關(guān)鍵詞:Java;偽隨機(jī)數(shù);Random類

中圖分類號:TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號:1009-3044(2010)03-628-02

The Research and Application of Pseudo-random Numbers in Java

LI Xiao-ying

(Higher Vocational Technical College, Guilin University of Technology, Nanning 530001, China)

Abstract: This paper introduces the general princle of pseudo-random number generation in java. And the application of Java random number in software design is stressed and described by the two game application program examples of rolliing the dice and welfare lottery.

Key words: java; pseudo-random number; random class

隨機(jī)數(shù)在軟件設(shè)計(jì)領(lǐng)域中得到很廣泛的應(yīng)用。偽隨機(jī)數(shù)是指用數(shù)學(xué)遞推公式所產(chǎn)生的隨機(jī)數(shù),獲取這種數(shù)的最簡單和最自然的方法是利用計(jì)算機(jī)語言的函數(shù)庫提供的隨機(jī)數(shù)發(fā)生器。不同的開發(fā)環(huán)境提供的生成隨機(jī)數(shù)的函數(shù)和方法不一樣。其中應(yīng)用得最為廣泛、研究最徹底的一個(gè)算法即線性同余法。

Java作為一種應(yīng)用廣泛的面向?qū)ο蟮木幊涕_發(fā)語言,對隨機(jī)數(shù)生成提供了多種途徑,以適應(yīng)各種不同的設(shè)計(jì)要求。

1 Java中偽隨機(jī)數(shù)生成機(jī)制

1.1 線性同余法

選取足夠大的正整數(shù)M和任意自然數(shù)n0,a,b,由遞推公式:

ni+1=(af(n)+b)modMi=0,1,…,M-1 (1)

生成的數(shù)值序列稱為是同余序列。當(dāng)函數(shù)f(n)為線性函數(shù)時(shí),即得到線性同余序列:

ni+1=(a*ni+b)modMi=0,1,…,M-1(2)

以下是線性同余法生成偽隨機(jī)數(shù)的偽代碼:

Random(n,m,seed,a,b)

{r0=seed;

for(i=1;i<=n;i++)

ri= (a* ri-1+ b)mod m)

其中種子參數(shù)seed可以任意選擇,常常將它設(shè)為計(jì)算機(jī)當(dāng)前的日期或者時(shí)間;m是一個(gè)較大數(shù),可以把它取為2W,W是計(jì)算機(jī)的字長;a可以是0.01W 和0.99W 之間的任何整數(shù)。

1.2 Java的Random類

Java中提供Random類產(chǎn)生偽隨機(jī)數(shù)。Random類使用48位的種子,使用線性同余公式對其進(jìn)行修改[1-2]。一旦用一個(gè)初值創(chuàng)建Random對象,就可以得到一系列的隨機(jī)數(shù)。

在Random類中,Java設(shè)計(jì)者使用Random()構(gòu)造方法來初始化Random對象。

Random randomGenerator=new Random();

Random()使用當(dāng)前的系統(tǒng)時(shí)間即System.currentTimeMillis()作為發(fā)生器的種子。隨機(jī)數(shù)發(fā)生器即Random對象產(chǎn)生以后,可以通過對象調(diào)用不同的函數(shù):nextInt()、nextLong()、nextFloat()、nextDouble()等來獲得不同類型的隨機(jī)數(shù)。

int randomNumber= randomGenerator.nextInt(n);

其中用到了Random類的nextInt方法。通過nextInt方法產(chǎn)生的隨機(jī)數(shù)的范圍應(yīng)根據(jù)特定應(yīng)用程序需要的不同而不同。當(dāng)給nextInt方法傳遞參數(shù)n時(shí),由nextInt方法所返回的值的范圍為0到n減1。

2 應(yīng)用分析

2.1 擲骰子游戲

1) 問題分析

擲骰子游戲中,游戲者將滾動(dòng)兩個(gè)骰子。每一個(gè)骰子有六個(gè)面,分別代表1,2,3,4,5,6這六個(gè)點(diǎn)。當(dāng)骰子停下以后,得到兩個(gè)隨機(jī)產(chǎn)生的數(shù),計(jì)算這兩個(gè)骰子上面的點(diǎn)數(shù)和,根據(jù)此點(diǎn)數(shù)和判斷玩家是否輸贏。

2) 類定義

根據(jù)問題分析,為該應(yīng)用程序創(chuàng)建骰子類Dice與測試類TestDice,類關(guān)系圖如圖2。

為了能在擲骰子游戲應(yīng)用程序中使用隨機(jī)數(shù),需要導(dǎo)入java.util包的Random類。Dice類定義屬性骰子點(diǎn)數(shù)point,以及滾動(dòng)骰子rollDice和顯示骰子displayDice兩個(gè)方法。其中,rollDice方法用于滾動(dòng)骰子;displayDice用于顯示骰子的圖片。TestDice類定義rule方法,可用于判斷玩家是否輸贏。

3) 類實(shí)現(xiàn)與GUI設(shè)計(jì)

Dice類中rollDice方法關(guān)鍵代碼如下:

public int rollDice()

{point = rand.nextInt(6)+1;

return point;}

該方法生成1~6(包括邊界值)之間的一個(gè)int型隨機(jī)數(shù),作為當(dāng)前骰子點(diǎn)數(shù)。

displayDie方法用于顯示對應(yīng)于1~6之間的骰子圖片,其中第1個(gè)參數(shù)代表所顯示圖片的JLabel,第2個(gè)參數(shù)代表骰子的點(diǎn)數(shù)值。

public void displayDice(JLabel picDiceJLabel,int face)

{image = new ImageIcon

(FILE_PREFIX+face+FILE_SUFFIX);

picDiceJLabel.setIcon(image);}

其中,F(xiàn)ILE_PREFIX和FILE_SUFFIX是兩個(gè)已得到聲明的常量,均定義為private final String型,其值分別為圖片文件夾路徑和圖片后綴。這樣,字符串FILE_PREFIX+face+FILE_SUFFIX可用來指明骰子點(diǎn)數(shù)對應(yīng)的圖片文件位置。

該應(yīng)用程序的GUI運(yùn)行界面如圖3所示。

2.2 35中7福利彩票游戲

1) 問題分析

35中7福利彩票游戲中,中獎(jiǎng)號碼由7個(gè)基本號碼組成,使用指定的專用搖獎(jiǎng)器搖出。搖獎(jiǎng)器內(nèi)放置標(biāo)有01-35的35個(gè)號碼球,搖獎(jiǎng)時(shí)依次搖出7個(gè)號碼球,然后,依據(jù)設(shè)置相應(yīng)的兌獎(jiǎng)規(guī)則,(如7中7、7中6、7中5)等,進(jìn)行兌獎(jiǎng)。

2) 類定義

根據(jù)問題分析,為該應(yīng)用程序創(chuàng)建球類Bull、游戲類Game與測試類TestGame,類關(guān)系圖如圖4。

同樣,為了能在游戲應(yīng)用程序中使用隨機(jī)數(shù),需要導(dǎo)入java.util包的Random類。Bull類定義球號碼point以及顯示球displayBull方法。其中, displayBull用于顯示球號碼對應(yīng)的圖片。Game類中playGame方法用于隨機(jī)從35個(gè)球中“搖出”7個(gè)球,并需要考慮球號不能重復(fù);ruleGame方法用于設(shè)置兌獎(jiǎng)規(guī)則。

3) 類實(shí)現(xiàn)

Game類中playGame方法的關(guān)鍵代碼如下:

public void playGame()

{int i=0;

int index =0;

for(i=0;i

{ranarray[i]=i+1;

}

for(i=0;i

{index = rand.nextInt(NumBull);

ran[i].setPoint( ranarray[index] );

ranarray[index]=ranarray[--NumBull];

}//產(chǎn)生不重復(fù)的球號}

其中,變量定義如下:

int NumBull = 35; //定義總球數(shù)

int NumRoll = 7; //定義中獎(jiǎng)球數(shù)

Bull[]ran = new Bull[NumRoll]; //定義中獎(jiǎng)的球

private int[] ranarray = new int[NumBull]; //總球的數(shù)組

public Random rand = new Random(); //初始化隨機(jī)數(shù)

3 結(jié)束語

隨機(jī)數(shù)在軟件設(shè)計(jì)領(lǐng)域應(yīng)用十分廣泛,如游戲的設(shè)計(jì),信號的處理,軟件加密等。利用Java良好的面向?qū)ο髾C(jī)制和豐富GUI組件結(jié)合隨機(jī)數(shù)可以設(shè)計(jì)滿足不同應(yīng)用的軟件。

參考文獻(xiàn):

[1] Knuth D.The Art of Computer Programming,Volume 2[M].Addison-Wesley,1997.

[2] JDKTM 5.0 Documentation[EB/OL].http://www.javatang.com/javadoc/.

[3] 梁錦葉.Java語言及應(yīng)用教程[M].北京:人民郵電出版社,2005.

[4] 謝仕華.幾種形態(tài)偽隨機(jī)數(shù)生成算法-java實(shí)現(xiàn)[J].中國科技信息,2005(15):28-29.

[5] Rumbaugh J,Jacobson I,Booch G.The Unified Modeling language Reference Manual[M].2nd ed.Addison-Weslen,2004.

[6] 邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析[M].2版.北京:清華大學(xué)出版社,2006.

[7] 埃克爾.Java編程思想[M].4版.陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2007.

[8] 楊威,吳國風(fēng).幾種偽隨機(jī)數(shù)發(fā)生器機(jī)器在WEB中的應(yīng)用[J].微型電腦應(yīng)用,2007,2(23):57-60.

主站蜘蛛池模板: 亚洲一区二区三区国产精品| 中文字幕日韩视频欧美一区| 黄色国产在线| 久久精品无码国产一区二区三区| 国产日韩欧美中文| 国产三级a| 九九热在线视频| 欧美无专区| 国产理论一区| 久久精品国产精品一区二区| 成人亚洲国产| 在线国产毛片| 欧美五月婷婷| 亚洲人成网站18禁动漫无码| 国产激情第一页| 在线国产欧美| 中文字幕 91| 久久黄色视频影| av手机版在线播放| 国产欧美亚洲精品第3页在线| 国产一区免费在线观看| 免费一级无码在线网站| 午夜免费视频网站| 黄色网址免费在线| 久久国产精品电影| 国产一级小视频| 最新日本中文字幕| 广东一级毛片| 一本大道香蕉久中文在线播放| 极品私人尤物在线精品首页| 亚洲欧洲天堂色AV| 日本高清有码人妻| 国产91精品调教在线播放| 欧美一区二区啪啪| 久久男人视频| 国产精品自在自线免费观看| 国产三级成人| 国产真实乱子伦视频播放| 欧美精品影院| 欧美啪啪网| 日韩成人在线视频| 天天色综合4| 国产不卡网| 亚洲aaa视频| 欧美成a人片在线观看| 乱人伦99久久| 国产成人免费高清AⅤ| 欧美亚洲欧美区| 亚洲成人在线网| 欧美影院久久| swag国产精品| 精品乱码久久久久久久| 激情视频综合网| 国产美女主播一级成人毛片| 日韩av资源在线| 色婷婷电影网| 高潮毛片免费观看| 国产精品真实对白精彩久久| 婷五月综合| 久久久久亚洲Av片无码观看| 国产欧美网站| 久久综合结合久久狠狠狠97色| 日韩精品成人网页视频在线| 狠狠久久综合伊人不卡| 日本亚洲国产一区二区三区| 国产毛片片精品天天看视频| 久久99国产综合精品1| 日韩无码视频网站| 国产麻豆精品在线观看| 国产精品成人免费视频99| 国产真实乱子伦精品视手机观看 | 国产AV毛片| 91av成人日本不卡三区| 亚洲成av人无码综合在线观看| 亚洲精品片911| 国产av一码二码三码无码| 亚洲狼网站狼狼鲁亚洲下载| 国产精品黑色丝袜的老师| 制服丝袜 91视频| 真人高潮娇喘嗯啊在线观看| 国产嫩草在线观看| 99久久99这里只有免费的精品|