[英]While loop runs forever in JavaScript
我在JavaScript中编写了一个函数,它检查了1到9之间三位数的所有组合,并给出了遵循这种模式的组合数√(x ^ 2 + y ^ 2 + z ^ 2)=一个自然数(全数如24或34但不是2.54)
√=平方根,^ 2 = 2的幂,
我的问题是,无论何时我运行该功能,计算机都会卡住并且该功能永远不会结束,因此它不会返回答案。 如果有人能告诉我它的错误(我在Chrome浏览器控制台上运行我的程序),我将非常感激
function mmd() {
var chk = false;
var a = 1;
var b = 1;
var c = 1;
var d = 1;
var e = 0;
while(chk != true) {
d = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2)+Math.pow(c, 2));
if( d == d.toFixed(0)) {
e++;
}
else {
if((b == 9) && (a == 9) && (c == 9)) {chk = true;}
else if((a == 9) && (b == 9)) {c++;}
else if(b == 9) {b = 1; a++;}
else if(c == 9) {c = 1; b++;}
else if(c < 9) {c++;}
}
}
return e
}
这部分代码导致它永远不会结束:
if (d == d.toFixed(0)){} else {}
如果公式的结果是整数,则向e
添加1,但由于else
,您不会增加其他变量。 它一直在做e++
。 所以你需要删除else
。
我也冒昧或删除了那个chk
变量,而是使用while(true)
,这将通过返回最终结果来结束:
function mmd() { var a = 1, b = 1, c = 1, d, e = 0; while(true) { d = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2)+Math.pow(c, 2)); if( d == parseInt(d, 10)) { e++; } if((b == 9) && (a == 9) && (c == 9)) {return e;} else if((a == 9) && (b == 9)) {c++;} else if(b == 9) {b = 1; a++;} else if(c == 9) {c = 1; b++;} else {c++;} } } alert(mmd());
它一旦到达e++
块就会卡住,永远不会增加a
, b
或c
。
function mmd()
{
var keepGoing = true;
var a = 1, b = 1, c = 1, d, e = 0;
while(keepGoing)
{
// calculate d
d = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2));
// check if it is a whole number
if(d == d.toFixed(0)) e++;
// if we're done then stop
if(a == 9 && b == 9 && c == 9){ keepGoing = false; }
// if c is less than 9 then increase it
else if(c < 9){ c++; }
// if c is 9 and b is less than 9 then set c back to 1 and increase b
else if(b < 9){ c = 1; b++; }
// if c is 9 and b is 9 then set both back to 1 and increase a
else if(a < 9){ c = b = 1; a++; }
}
return e;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.