arrays - 使用 math.random 生成随机数,但不重复
问题描述
对于我参与的组织的年度圣诞节活动,我们通常会举行抽奖活动,人们只需参加并在门口获得号码票,就有机会赢得免费奖品。我们使用一个用 Flash 编写的程序(使用 ActionScript 2.0),它利用 math.random 选择一个随机数,并附加一些参数,如下所示:
//maxNr = 999999999999999;
initRandom = function(){
var nr = Math.ceil(Math.ceil(Math.random()*(maxNr));
var nrString = "";
for( var j=0; j<(maxNr.toString().length-nr.toString().length); j++){
nrString += "0";
}
nrString += nr.toString();
var holder = this.createEmptyMovieClip("holder",1);
for( i=0; i<maxNr.toString().length; i++ ){
var mc = holder.attachMovie("number","n"+i,i+10);
mc._x = i*350;
mc.anim_mc.gotoAndPlay( Math.floor(Math.random()*9) + 1 );
this["iv"+i] = setInterval( this, "revealNumber", 2000 + (500*i), nrString.substr(i,1), i );
}
// scale (if needed) and center
if( holder._width > Stage.width ){
holder._width = Stage.width;
holder._yscale = holder._xscale;
}
holder._x = Stage.width/2 - holder._width/2;
holder._y = 100;
// buttons
back_btn.onRelease = function(){
for(item in holder){
holder[item].removeMovieClip();
}
gotoAndStop("intro");
}
}
revealNumber = function( digit, i ){
clearInterval( this["iv"+i] );
holder["n"+i].gotoAndStop("done");
holder["n"+i]["number_txt"].text = digit;
}
initRandom();
stop();
它旨在返回 1 到 1000 之间的随机数,定义如下:
go_btn.onRelease = function(){
maxNr = Math.max( 1000 , 1 );
gotoAndStop("random");
}
stop();
它是由我们组织的一位成员编写的,他不幸在这一年去世了,我几乎没有编程知识,但我学得很快,实际上已经修改了一些代码以达到目前的水平。但是,我正在尝试添加一个参数,该参数将禁止该函数重复一个数字,即不包括重新选择已生成的数字。我花了几天时间搜寻任何可能的资源,但只遇到了死胡同。
使用当前采用的方法,是否可以将此参数添加到此现有代码中,我该怎么做?
任何帮助、建议或回复将不胜感激!
解决方案
我的 AS2 有点生疏,但我认为下面的脚本解释了大致的想法。您需要一些注册表来记录生成的数字,以便下次生成数字时可以跳过它们。我使用了_global对象,因此这个逻辑甚至超越了以下脚本的多个实例。
// Create an Array to record generated numbers.
// The _global object is always present and can be accessed from anywhere.
if (_global.uniqueNr == undefined)
{
_global.uniqueNr = [];
}
function initRandom()
{
var nr;
do
{
nr = Math.ceil(Math.ceil(Math.random()*(maxNr));
}
while (_global.uniqueNr[nr] == true);
// Record the newly generated number so it would never drop again.
_global.uniqueNr[nr] = true;
// At this point you can be sure that "nr" contains a unique value.
推荐阅读
- .htaccess - .htaccess:将所有页面重定向到新域的根目录,某些情况除外
- c++ - Traversing Template Parameter Packs, what is the role of the specialization which takes no argument?
- python - 在所有测试语料库中测试模型 doc2vec
- excel - 获取调用宏的按钮的工作表
- c# - 当 TreeList 绑定到 DataSource 时 setValue() 不起作用
- python - 在python中使用箭头递增日期不改变属性
- assembly - 什么是 ihah、ohah 和 int86?
- php - Laravel sortBy() 基于字符串值
- python - 整数转换的舍入是否有不好的副作用?
- android - React Native Android 模块与 Andorid Studio 和 React native builder 冲突