尝试生成两个单独的数字时发生冲突

时间:2017-12-28 07:28:27

标签: javascript html random

我有以下脚本,用于生成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();说明了这一点,但也许不是在冗余时生成另一个唯一数字,而是根本不生成任何数字。是这样的吗?如果是这样,我该如何解决这个问题?

谢谢!

2 个答案:

答案 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);