下面2个函数的功能是随机摇号的程序,一个是开始 一个是停止,要求是已经出现过的号码不得再出现,所以我专门设置里一个数组把出现过的号码记录下来,下次生成的随机数先跟数组里的每个比较一下,已经出现的就不在出现,用了这段代码
var repeated=false;
for(var i=1;i<=EntNum;i++)//判断是否号码出现过
if(iNum==Yaohaoed[i]){ repeated=true;break;}
if(!repeated){
if(iNum<10){
document.getElementById("stext").innerHTML="00"+iNum;
}else if(iNum<100){
document.getElementById("stext").innerHTML="0"+iNum;
}else{
document.getElementById("stext").innerHTML=iNum;
}
比如1-10内基本不会重复,但是如果1-300以内的数字选299个,越到后面就可能会重复的数字,但是有时候又不会重复,我分析了下代码感觉没问题的,为什么还会出现这个问题 ,高手清帮忙 谢谢了
var theTimer;
var iNum=0;
var EntNum=0;
var Isrecord=false;
//var repeated=false;
function checkLoad() {
//if (EntNum>=Zsye){ alert("摇号已经结束!"); return false;}
document.getElementById("btnBegin").disabled=true;
document.getElementById("btnStop").disabled=false;
Isrecord=false;
iNum=selectFrom(1,Cot);
var repeated=false;
for(var i=1;i<=EntNum;i++)//判断是否号码出现过
if(iNum==Yaohaoed[i]){ repeated=true;break;}
if(!repeated){
if(iNum<10){
document.getElementById("stext").innerHTML="00"+iNum;
}else if(iNum<100){
document.getElementById("stext").innerHTML="0"+iNum;
}else{
document.getElementById("stext").innerHTML=iNum;
}
}
theTimer = setTimeout("checkLoad()", 10);
}
function selectFrom(iFirstValue,iLastValue){
var iChoices = iLastValue-iFirstValue+1;
return Math.floor(Math.random()*iChoices+iFirstValue);
}
function stopPlay() {
document.getElementById("btnStop").disabled=true;
document.getElementById("btnBegin").disabled=false;
if(Isrecord) return false;
clearTimeout(theTimer);
EntNum++;
Yaohaoed[EntNum]=document.getElementById("stext").innerHTML;
Isrecord=true;
document.getElementById("hisRecord").innerText=document.getElementById("hisRecord").innerText+document.getElementById("stext").innerHTML+",";
Addstu();
if (EntNum>=Zsye){ alert("电脑派位已经结束,恭喜派位成功的学生!");document.getElementById("btnStop").disabled=true;document.getElementById("btnBegin").disabled=true;document.getElementById("Receive").disabled=false;}
}
var repeated=false;
for(var i=1;i<=EntNum;i++)//判断是否号码出现过
if(iNum==Yaohaoed[i]){ repeated=true;break;}
if(!repeated){
if(iNum<10){
document.getElementById("stext").innerHTML="00"+iNum;
}else if(iNum<100){
document.getElementById("stext").innerHTML="0"+iNum;
}else{
document.getElementById("stext").innerHTML=iNum;
}
比如1-10内基本不会重复,但是如果1-300以内的数字选299个,越到后面就可能会重复的数字,但是有时候又不会重复,我分析了下代码感觉没问题的,为什么还会出现这个问题 ,高手清帮忙 谢谢了
var theTimer;
var iNum=0;
var EntNum=0;
var Isrecord=false;
//var repeated=false;
function checkLoad() {
//if (EntNum>=Zsye){ alert("摇号已经结束!"); return false;}
document.getElementById("btnBegin").disabled=true;
document.getElementById("btnStop").disabled=false;
Isrecord=false;
iNum=selectFrom(1,Cot);
var repeated=false;
for(var i=1;i<=EntNum;i++)//判断是否号码出现过
if(iNum==Yaohaoed[i]){ repeated=true;break;}
if(!repeated){
if(iNum<10){
document.getElementById("stext").innerHTML="00"+iNum;
}else if(iNum<100){
document.getElementById("stext").innerHTML="0"+iNum;
}else{
document.getElementById("stext").innerHTML=iNum;
}
}
theTimer = setTimeout("checkLoad()", 10);
}
function selectFrom(iFirstValue,iLastValue){
var iChoices = iLastValue-iFirstValue+1;
return Math.floor(Math.random()*iChoices+iFirstValue);
}
function stopPlay() {
document.getElementById("btnStop").disabled=true;
document.getElementById("btnBegin").disabled=false;
if(Isrecord) return false;
clearTimeout(theTimer);
EntNum++;
Yaohaoed[EntNum]=document.getElementById("stext").innerHTML;
Isrecord=true;
document.getElementById("hisRecord").innerText=document.getElementById("hisRecord").innerText+document.getElementById("stext").innerHTML+",";
Addstu();
if (EntNum>=Zsye){ alert("电脑派位已经结束,恭喜派位成功的学生!");document.getElementById("btnStop").disabled=true;document.getElementById("btnBegin").disabled=true;document.getElementById("Receive").disabled=false;}
}
假如你生成的一个数是A
数组B存储的是已经生成的,那么应该这样处理
var A,B = [];
function IsRepeatedData(param)
isRepeated = false;
for(i=0;i<B.length;i++)
{
if(param==B[i])
{
isRepeated = true;
return isRepeated;
}
}
B.push(param);
return isRepeated;
}每次生成一个数A,调用IsRepeatedData(A)验证。
Yaohaoed[EntNum]=iNum 应该是等价的,问题不在这里
Yaohaoed[EntNum]=document.getElementById("stext").innerHTML;
.真是等价的?