Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的do/while循环偶尔无法运行?_Javascript_Jquery_While Loop_Do While - Fatal编程技术网

Javascript 为什么我的do/while循环偶尔无法运行?

Javascript 为什么我的do/while循环偶尔无法运行?,javascript,jquery,while-loop,do-while,Javascript,Jquery,While Loop,Do While,我有一个do/while循环,它生成2到10之间的两个数字,然后检查它们的最大公因数。如果最大公因数不等于1,它将生成两个不同的数字,直到找到除1之外没有任何公因数的两个数字 它大部分时间都在运行,但大约每四次都无法生成数字。代码似乎被“卡住”,但我不确定原因: JAVASCRIPT function randomBetween(min, max) { var ceiling = max + 1; return Math.floor(Math.random() * (ceiling -

我有一个do/while循环,它生成2到10之间的两个数字,然后检查它们的最大公因数。如果最大公因数不等于1,它将生成两个不同的数字,直到找到除1之外没有任何公因数的两个数字

它大部分时间都在运行,但大约每四次都无法生成数字。代码似乎被“卡住”,但我不确定原因:

JAVASCRIPT

function randomBetween(min, max) {
  var ceiling = max + 1;
  return Math.floor(Math.random() * (ceiling - min)) + min;
}

function GenerateRandomNumberNoCommonFactorsWithAnother() {
  var Numerator;
  var Denominator;
  var gcd = function gcd(a, b) {
    return b ? gcd(b, a % b) : a;
  };
  do {
    Numerator = randomBetween(2, 10);
    Denominator = randomBetween(2, 10);
    gcd = gcd(Numerator, Denominator);
  } while (gcd != 1);
  return {
    Numerator: Numerator,
    Denominator: Denominator,
  }
}

var Test = GenerateRandomNumberNoCommonFactorsWithAnother();
$(".Test").html(Test.Numerator);
$(".Test2").html(Test.Denominator);
HTML




jsiddle:

函数已经使用了
gcd
名称,因此如果给它赋值,基本上就是用新值覆盖函数

为此变量使用另一个名称,例如
gcdResult

var gcdResult = gcd(Numerator, Denominator);
并相应地调整
,同时

while (gcdResult != 1);
这就变成了:

函数随机性(最小值、最大值){
var上限=最大值+1;
返回Math.floor(Math.random()*(天花-min))+min;
}
函数生成器DomainNumberNoCommonFactors with Other(){
var分子;
var分母;
var-gcdResult;
var gcd=功能gcd(a,b){
返回b?gcd(b,a%b):a;
};
做{
分子=介于(2,10)之间的随机数;
分母=介于(2,10)之间的随机数;
gcd结果=gcd(分子、分母);
}而(gcdResult!=1);
返回{
分子:分子,
分母:分母,
}
}
var Test=GeneratorDomainNumberNoCommonFactors with Other();
$(“.Test”).html(Test.momerator);
$(“.Test2”).html(Test.deminator)



您将gcd替换为一个整数函数。如果gcd在您的循环第一次退出时恰好返回1,但在任何其他情况下,它将中断


尝试重命名函数findGcd,并声明一个单独的gcd变量来保存该数字,这样就不会覆盖该函数

您的do/while循环工作正常

但是,gcd函数并不总是返回数值。由于其递归性质,a%b有时被计算为a%0,返回NaN


在尝试模之前,您需要解释零。

有意义-感谢您的帮助!我会在几分钟内“接受”答案,只要它能让我做一些有意义的事情。谢谢你,克里斯托弗!
while (gcdResult != 1);