许朋,许清媛
(1.工业和信息化部电子第五研究所,广州 510610;2.中山大学南方学院电子通信与软件工程系,广州 510970)
基于JavaScript的一种随机抽取程序设计
许朋1,许清媛2
(1.工业和信息化部电子第五研究所,广州510610;2.中山大学南方学院电子通信与软件工程系,广州510970)
为保证某项活动的公平、公正,经常需要从一定量数据中随机抽取一个或多个数据。例如,在项目招标评审过程中,为了保证评标的公平性,需要从专家库中随机抽取若干个评标专家[2];在中小客车牌照摇号,随机从众多申请者中抽取一部分人;为避免考试试题的泄露、保证考试的公平性,需要在临近考试前从海量试题库中随机抽取若干道试题形成考试试卷[3];在抽奖晚会上,从所有参与人员中随机抽取若干个中奖人等。在这些抽取活动中,大多需要在公开场合进行随机抽取。传统上可能采用人工随机抽取的方法,例如抓阄等。然而,人工随机抽取大多存在工作效率低、管理不规范、随机性差、容易作弊、公平性低等缺点[2]。由计算机实现随机抽取则可以克服这些缺点和问题。
JavaScript语言是一种直译式、弱类型、基于原型的脚本语言[1]。它的解释器JavaScript引擎是浏览器的一部分,JavaScript脚本通过嵌入在HTML网页中来实现自身的功能,已被广泛用于Web应用开发中[1],为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果[1]。本文将介绍一种基于JavaScript脚本语言在客户端实现随机抽取的程序设计思路,说明其实现方法、证明其随机性。
随机抽取的程序可按照图1所示流程设计:
(1)将待抽取的所有数据(如所有参与中小客车摇号的人)组织起来,存放在“待抽取数组”中;
(2)点击开始抽取后,每隔足够短的时间随机选择“待抽取数组”中的一个元素在界面上显示,形成被选中元素(数据)在界面上快速刷新显示(闪烁)的效果;
(3)点击停止抽取后,界面停止闪烁后显示的数组元素作为被抽中的一个数据,将该数据保存“抽取结果数组”中;
(4)将被抽中的元素(数据)从“待抽取数组”中删除;
(5)判断“抽取结果数组”中抽取数据的数量是否满足要求,若满足要求则终止程序;若不满足要求,则在“待抽取数组”不为空的情况下继续下一次抽取,直到抽取数据的数量是否满足要求为止。
在该随机抽取程序设计中,为满足抽取的随机性要求(即每个元素(数据)被抽中的概率相等),需要满足一下要求:
(1)每次抽取“待抽取数组”中的一个元素在界面上显示时都要随机抽取;
(2)要间隔足够短的时间(小于人的反应时间)抽取下一个元素(数据)并显示在界面上,形成被抽取元素(数据)在界面上快速切换的效果,避免因人为选择某个元素(数据)而影响最终抽取结果的随机性。
图1 随机抽取程序流程图
(1)随机抽取“待抽取数组”中数组元素的实现
随机抽取“待抽取数组”中的数组元素可通过随机选取数组元素的下标来实现。就JavaScript语言来说,可使用 Math.random()方法和 parseInt()方法实现[1]。Math.random()方法可随机产生大于等于0.0且小于1.0的浮点数,parseInt()方法可实现浮点数的取下整运算。假设ArrayLength表示 “待抽取数组”的长度,则parseInt(Math.random()*(ArrayLength))可得到随机选取的“待抽取数组”的下标。
需要注意的是,parseInt()方法是取下整,而不是四舍五入取整,若使用四舍五入取整(如Math.round()),则每个“待抽取数组”下标被选中的概率就不相等。
(2)“待抽取数组”的元素在界面上快速刷新显示和停止刷新的实现
“待抽取数组”的元素在界面上快速刷新显示和停止刷新,可使用JavaScript语言的setInterval(,)方法和clearInterval()方法实现[1]。使用setInterval(,)方法可实现每隔若干毫秒执行一次界面刷新操作,进而实现“待抽取数组”的元素在界面上快速刷新显示的效果。clearInterval()方法可停止界面刷新,进而得到被随机抽中的元素(数据)。
其中,setInterval(,)方法可实现每隔若干毫秒执行一次界面刷新操作,只要界面刷新的时间间隔足够小,则可避免人为去选择某个元素(数据),进而可保证最终抽取结果的随机性。
基于以上的随机抽取程序设计和程序实现分析,
给出了从数据“001,002,003,004,005,006,007,008,
009,010,011,012,013,014,015”中随机抽取几个数据
(小于15个)的JavaScript程序实现:
将该程序代码放在.html中 (可放在.txt文档中并修改后缀为.html来实现),使用IE浏览器运行该.html文件,可观察该随机抽取程序的实现效果。图2给出了该程序的实现效果,点击【开始】时,程序每次随机选取“001,002,003,004,005,006,007,008,009,010,011,
012,013,014,015”中的一个数据显示并进行快速更新,点击【停止】时,程序将最后显示的数据展现在界面上,实现了随机抽取。
图2 随机抽取程序实现效果图
本文给出了一种基于JavaScript语言的随机抽取程序设计方法,设计了程序实现的流程、分析了程序实现的关键点,并通过一个实例展现了随机抽取程序实现结果。
[1]Nicholas C.Zakas.Professional JavaScript for Web Developers,Third Edition.John Wiley&Sons,Inc.2012.
[2]陈卫平.建设工程评标专家随机抽取系统.科技信息,2010(09).
[3]刘旭旭.基于B/S模式的在线考试系统的设计与实现.医药与保健,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-),男,河南南阳人,硕士研究生,工程师,研究方向为应用软件测试、嵌入式软件测试
2015-11-06
2015-11-15
日常生活中经常需要从一定量数据中随机抽取一个或多个数据。介绍一种基于JavaScript语言的随机抽取程序设计方法,设计程序实现的流程、分析程序实现的关键点,并通过一个实例展现随机抽取程序实现效果。
随机抽取;JavaScript;程序设计
许清媛(1986-),女,江西兴国人,硕士研究生,讲师,研究方向为电子工程、程序设计
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.