【问题标题】:Conflict when trying to generate two separate numbers尝试生成两个单独的数字时发生冲突
【发布时间】:2017-12-28 07:28:27
【问题描述】:

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

谢谢!

【问题讨论】:

  • 这是做什么的:var GenerateRandomNumber2to6No1 = GenerateRandomNumber2to6No1();?
  • 它将变量GenerateRandomNumber2to6No1 设置为函数GenerateRandomNumber2to6No1() 的输出,这样我就可以用它来替换类.GenerateRandomNumber2to6No1 的任何元素
  • 这个javascript写在head里面的什么地方?单独的js文件?还是在正文标签内?

标签: javascript html random


【解决方案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),看看具体数字是多少,也可以帮助你知道问题出在哪里。

【讨论】:

  • 感谢您的帮助。我会根据您的建议继续使用代码。
【解决方案2】:

我觉得这段代码可以帮到你

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

【讨论】:

  • 感谢您的建议;我更希望找到对现有代码的修复,因为它与我的代码的其他部分相关,但非常感谢。
猜你喜欢
  • 2014-05-23
  • 2013-12-21
  • 2012-10-28
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多