我有以下脚本,用于生成2个不同的数字
<script type="text/javascript">
function GenerateRandomNumber2to6No1() {
var min = 2, max = 7;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
return random;
}
var GenerateRandomNumber2to6No1 = GenerateRandomNumber2to6No1();
$('.GenerateRandomNumber2to6No1').html(GenerateRandomNumber2to6No1);
function GenerateRandomNumber2to6No2() {
var min = 2, max = 7;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
return (random !== GenerateRandomNumber2to6No1) ? random: GenerateRandomNumber2to6No2();
}
var GenerateRandomNumber2to6No2 = GenerateRandomNumber2to6No2();
$('.GenerateRandomNumber2to6No2').html(GenerateRandomNumber2to6No2);
</script>
NUMBER 1: <span class = "GenerateRandomNumber2to6No1"></span>
NUMBER 2: <span class = "GenerateRandomNumber2to6No2"></span>
这通常可以正常工作,但偶尔页面会加载,不会出现数字。我猜这是GenerateRandomNumber2to6No2
恰好产生与GenerateRandomNumber2to6No1
相同的数字。我以为
return (random !== GenerateRandomNumber2to6No1) ? random: GenerateRandomNumber2to6No2();
说明了这一点,但也许不是在冗余时生成另一个唯一数字,而是根本不生成任何数字。是这样的吗?如果是这样,我该如何解决这个问题?
谢谢!
答案 0 :(得分:1)
function getRand(){
var array=[2,3,4,5,6,7]
var newArray=[];
for(var i=0;i<2;i++){
var ran=~~(array.length*Math.random());
newArray[i]=array.splice(ran,1)[0]
}
return newArray
}
var ranArray=getRand();
var ran1=ranArray[0];
var ran2=ranArray[1];
console.log(ran1,ran2)
getRand()是一个给你一个不同数字数组的函数。因为你只需要两个,它只循环两次,并给你一个数组,你可以利用它。
回到你的代码,从我看到的,Gno2应该继续运行,直到它有另一个数字,我不知道为什么。这是你尝试调试的时间。
首先我会尝试将max=2
更改为max=3
,如果代码可能不适用于某些数字,那么您可以快速实现并发现问题出在这两个函数中。
然后尝试记录console.log(Gno1,Gno2)
,看看这些数字究竟是什么,也可以帮助您了解问题所在。
答案 1 :(得分:0)
我认为这段代码可以帮助你
var rand1,rand2;
var min = 3;
var max = 6;
do {
rand1 = Math.floor(Math.random() * (max - min)) + min;
rand2 = Math.floor(Math.random() * (max - min)) + min;
}while(rand1 === rand2);
$('.GenerateRandomNumber2to6No1').html(rand1);
$('.GenerateRandomNumber2to6No2').html(rand2);