Javascript 为什么我的do/while循环偶尔无法运行?
我有一个do/while循环,它生成2到10之间的两个数字,然后检查它们的最大公因数。如果最大公因数不等于1,它将生成两个不同的数字,直到找到除1之外没有任何公因数的两个数字 它大部分时间都在运行,但大约每四次都无法生成数字。代码似乎被“卡住”,但我不确定原因: JAVASCRIPTJavascript 为什么我的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 -
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);