許朋,許清媛
(1.工業(yè)和信息化部電子第五研究所,廣州 510610;2.中山大學(xué)南方學(xué)院電子通信與軟件工程系,廣州 510970)
基于JavaScript的一種隨機(jī)抽取程序設(shè)計(jì)
許朋1,許清媛2
(1.工業(yè)和信息化部電子第五研究所,廣州510610;2.中山大學(xué)南方學(xué)院電子通信與軟件工程系,廣州510970)
為保證某項(xiàng)活動(dòng)的公平、公正,經(jīng)常需要從一定量數(shù)據(jù)中隨機(jī)抽取一個(gè)或多個(gè)數(shù)據(jù)。例如,在項(xiàng)目招標(biāo)評(píng)審過程中,為了保證評(píng)標(biāo)的公平性,需要從專家?guī)熘须S機(jī)抽取若干個(gè)評(píng)標(biāo)專家[2];在中小客車牌照搖號(hào),隨機(jī)從眾多申請(qǐng)者中抽取一部分人;為避免考試試題的泄露、保證考試的公平性,需要在臨近考試前從海量試題庫中隨機(jī)抽取若干道試題形成考試試卷[3];在抽獎(jiǎng)晚會(huì)上,從所有參與人員中隨機(jī)抽取若干個(gè)中獎(jiǎng)人等。在這些抽取活動(dòng)中,大多需要在公開場(chǎng)合進(jìn)行隨機(jī)抽取。傳統(tǒng)上可能采用人工隨機(jī)抽取的方法,例如抓鬮等。然而,人工隨機(jī)抽取大多存在工作效率低、管理不規(guī)范、隨機(jī)性差、容易作弊、公平性低等缺點(diǎn)[2]。由計(jì)算機(jī)實(shí)現(xiàn)隨機(jī)抽取則可以克服這些缺點(diǎn)和問題。
JavaScript語言是一種直譯式、弱類型、基于原型的腳本語言[1]。它的解釋器JavaScript引擎是瀏覽器的一部分,JavaScript腳本通過嵌入在HTML網(wǎng)頁中來實(shí)現(xiàn)自身的功能,已被廣泛用于Web應(yīng)用開發(fā)中[1],為網(wǎng)頁添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果[1]。本文將介紹一種基于JavaScript腳本語言在客戶端實(shí)現(xiàn)隨機(jī)抽取的程序設(shè)計(jì)思路,說明其實(shí)現(xiàn)方法、證明其隨機(jī)性。
隨機(jī)抽取的程序可按照?qǐng)D1所示流程設(shè)計(jì):
(1)將待抽取的所有數(shù)據(jù)(如所有參與中小客車搖號(hào)的人)組織起來,存放在“待抽取數(shù)組”中;
(2)點(diǎn)擊開始抽取后,每隔足夠短的時(shí)間隨機(jī)選擇“待抽取數(shù)組”中的一個(gè)元素在界面上顯示,形成被選中元素(數(shù)據(jù))在界面上快速刷新顯示(閃爍)的效果;
(3)點(diǎn)擊停止抽取后,界面停止閃爍后顯示的數(shù)組元素作為被抽中的一個(gè)數(shù)據(jù),將該數(shù)據(jù)保存“抽取結(jié)果數(shù)組”中;
(4)將被抽中的元素(數(shù)據(jù))從“待抽取數(shù)組”中刪除;
(5)判斷“抽取結(jié)果數(shù)組”中抽取數(shù)據(jù)的數(shù)量是否滿足要求,若滿足要求則終止程序;若不滿足要求,則在“待抽取數(shù)組”不為空的情況下繼續(xù)下一次抽取,直到抽取數(shù)據(jù)的數(shù)量是否滿足要求為止。
在該隨機(jī)抽取程序設(shè)計(jì)中,為滿足抽取的隨機(jī)性要求(即每個(gè)元素(數(shù)據(jù))被抽中的概率相等),需要滿足一下要求:
(1)每次抽取“待抽取數(shù)組”中的一個(gè)元素在界面上顯示時(shí)都要隨機(jī)抽取;
(2)要間隔足夠短的時(shí)間(小于人的反應(yīng)時(shí)間)抽取下一個(gè)元素(數(shù)據(jù))并顯示在界面上,形成被抽取元素(數(shù)據(jù))在界面上快速切換的效果,避免因人為選擇某個(gè)元素(數(shù)據(jù))而影響最終抽取結(jié)果的隨機(jī)性。
圖1 隨機(jī)抽取程序流程圖
(1)隨機(jī)抽取“待抽取數(shù)組”中數(shù)組元素的實(shí)現(xiàn)
隨機(jī)抽取“待抽取數(shù)組”中的數(shù)組元素可通過隨機(jī)選取數(shù)組元素的下標(biāo)來實(shí)現(xiàn)。就JavaScript語言來說,可使用 Math.random()方法和 parseInt()方法實(shí)現(xiàn)[1]。Math.random()方法可隨機(jī)產(chǎn)生大于等于0.0且小于1.0的浮點(diǎn)數(shù),parseInt()方法可實(shí)現(xiàn)浮點(diǎn)數(shù)的取下整運(yùn)算。假設(shè)ArrayLength表示 “待抽取數(shù)組”的長(zhǎng)度,則parseInt(Math.random()*(ArrayLength))可得到隨機(jī)選取的“待抽取數(shù)組”的下標(biāo)。
需要注意的是,parseInt()方法是取下整,而不是四舍五入取整,若使用四舍五入取整(如Math.round()),則每個(gè)“待抽取數(shù)組”下標(biāo)被選中的概率就不相等。
(2)“待抽取數(shù)組”的元素在界面上快速刷新顯示和停止刷新的實(shí)現(xiàn)
“待抽取數(shù)組”的元素在界面上快速刷新顯示和停止刷新,可使用JavaScript語言的setInterval(,)方法和clearInterval()方法實(shí)現(xiàn)[1]。使用setInterval(,)方法可實(shí)現(xiàn)每隔若干毫秒執(zhí)行一次界面刷新操作,進(jìn)而實(shí)現(xiàn)“待抽取數(shù)組”的元素在界面上快速刷新顯示的效果。clearInterval()方法可停止界面刷新,進(jìn)而得到被隨機(jī)抽中的元素(數(shù)據(jù))。
其中,setInterval(,)方法可實(shí)現(xiàn)每隔若干毫秒執(zhí)行一次界面刷新操作,只要界面刷新的時(shí)間間隔足夠小,則可避免人為去選擇某個(gè)元素(數(shù)據(jù)),進(jìn)而可保證最終抽取結(jié)果的隨機(jī)性。
基于以上的隨機(jī)抽取程序設(shè)計(jì)和程序?qū)崿F(xiàn)分析,
給出了從數(shù)據(jù)“001,002,003,004,005,006,007,008,
009,010,011,012,013,014,015”中隨機(jī)抽取幾個(gè)數(shù)據(jù)
(小于15個(gè))的JavaScript程序?qū)崿F(xiàn):
將該程序代碼放在.html中 (可放在.txt文檔中并修改后綴為.html來實(shí)現(xiàn)),使用IE瀏覽器運(yùn)行該.html文件,可觀察該隨機(jī)抽取程序的實(shí)現(xiàn)效果。圖2給出了該程序的實(shí)現(xiàn)效果,點(diǎn)擊【開始】時(shí),程序每次隨機(jī)選取“001,002,003,004,005,006,007,008,009,010,011,
012,013,014,015”中的一個(gè)數(shù)據(jù)顯示并進(jìn)行快速更新,點(diǎn)擊【停止】時(shí),程序?qū)⒆詈箫@示的數(shù)據(jù)展現(xiàn)在界面上,實(shí)現(xiàn)了隨機(jī)抽取。
圖2 隨機(jī)抽取程序?qū)崿F(xiàn)效果圖
本文給出了一種基于JavaScript語言的隨機(jī)抽取程序設(shè)計(jì)方法,設(shè)計(jì)了程序?qū)崿F(xiàn)的流程、分析了程序?qū)崿F(xiàn)的關(guān)鍵點(diǎn),并通過一個(gè)實(shí)例展現(xiàn)了隨機(jī)抽取程序?qū)崿F(xiàn)結(jié)果。
[1]Nicholas C.Zakas.Professional JavaScript for Web Developers,Third Edition.John Wiley&Sons,Inc.2012.
[2]陳衛(wèi)平.建設(shè)工程評(píng)標(biāo)專家隨機(jī)抽取系統(tǒng).科技信息,2010(09).
[3]劉旭旭.基于B/S模式的在線考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).醫(yī)藥與保健,2010,18(3).
Random Sampling;JavaScript;Program Design
A Random Sampling Program Design Based on JavaScript
XU Peng1,XU Qing-yuan2
(1.The 5th Electronics Research Institute of MII,Guangzhou 510610;2.Department of Electronic Communication&Software Engineering,Nanfang Colloge,Sun Yat-sen University,Guangzhou 510970)
1007-1423(2015)33-0063-04
10.3969/j.issn.1007-1423.2015.33.017
許朋(1985-),男,河南南陽人,碩士研究生,工程師,研究方向?yàn)閼?yīng)用軟件測(cè)試、嵌入式軟件測(cè)試
2015-11-06
2015-11-15
日常生活中經(jīng)常需要從一定量數(shù)據(jù)中隨機(jī)抽取一個(gè)或多個(gè)數(shù)據(jù)。介紹一種基于JavaScript語言的隨機(jī)抽取程序設(shè)計(jì)方法,設(shè)計(jì)程序?qū)崿F(xiàn)的流程、分析程序?qū)崿F(xiàn)的關(guān)鍵點(diǎn),并通過一個(gè)實(shí)例展現(xiàn)隨機(jī)抽取程序?qū)崿F(xiàn)效果。
隨機(jī)抽?。籎avaScript;程序設(shè)計(jì)
許清媛(1986-),女,江西興國人,碩士研究生,講師,研究方向?yàn)殡娮庸こ?、程序設(shè)計(jì)
In daily life,one or more data is often needed to be randomly selected from a certain amount of data.Introduces a method to design a random sampling program based on JavaScript.The program flow chart is designed,analyzes the key points of programing,by an example,demonstrates the implementation effect of the random sampling program.