Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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中永远运行_Javascript - Fatal编程技术网

而循环在JavaScript中永远运行

而循环在JavaScript中永远运行,javascript,Javascript,我用JavaScript编写了一个函数,它检查1到9之间的所有三位数组合,并给出遵循此模式的组合数 √(x^2+y^2+z^2)=自然数(如24或34但不是2.54的整数) √ = 平方根,^2=2的幂 我的问题是,每当我运行函数时,计算机就会卡住,函数永远不会结束,所以它不会返回答案。 如果有人能告诉我它有什么问题,我将不胜感激 (我正在chrome浏览器控制台上运行我的程序) 函数mmd(){ var-chk=假; var a=1; var b=1; var c=1; var d=1; va

我用JavaScript编写了一个函数,它检查1到9之间的所有三位数组合,并给出遵循此模式的组合数 √(x^2+y^2+z^2)=自然数(如24或34但不是2.54的整数)

√ = 平方根,^2=2的幂

我的问题是,每当我运行函数时,计算机就会卡住,函数永远不会结束,所以它不会返回答案。 如果有人能告诉我它有什么问题,我将不胜感激 (我正在chrome浏览器控制台上运行我的程序)

函数mmd(){
var-chk=假;
var a=1;
var b=1;
var c=1;
var d=1;
var e=0;
while(chk!=真){
d=Math.sqrt(Math.pow(a,2)+Math.pow(b,2)+Math.pow(c,2));
如果(d==d.toFixed(0)){
e++;
}
否则{
如果((b==9)&&(a==9)&&(c==9)){chk=true;}
如果((a==9)和&(b==9)){c++;}
如果(b==9){b=1;a++;}
如果(c==9){c=1;b++;}
else如果(c<9){c++;}
}
}
返回e
}

这部分代码导致它永远不会结束:

if (d == d.toFixed(0)){} else {}
如果公式的结果是整数,则将1添加到
e
,但由于
else
的原因,不增加其他变量。它一直在做
e++
。因此,您需要删除该
else

我还随意删除了
chk
变量,而是使用
while(true)
,最后返回最终结果:

函数mmd(){
变量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++;
}
如果((b==9)&&(a==9)&&(c==9)){返回e;}
如果((a==9)和&(b==9)){c++;}
如果(b==9){b=1;a++;}
如果(c==9){c=1;b++;}
else{c++;}
}
}

警报(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;
}
函数mmd()
{
var keepGoing=true;
变量a=1,b=1,c=1,d,e=0;
同时(继续)
{
//计算d
d=Math.sqrt(Math.pow(a,2)+Math.pow(b,2)+Math.pow(c,2));
//检查它是否是一个整数
如果(d==d.toFixed(0))e++;
//如果我们完成了,那就停下来
如果(a==9&&b==9&&c==9){keepGoing=false;}
//如果c小于9,则增加它
否则(c<9){C++(});}
//如果c为9且b小于9,则将c设置回1并增加b
如果(b<9){c=1;b++;}
//如果c为9,b为9,则将两者都设置回1并增加a
如果(a<9){c=b=1;a++;}
}
返回e;
}

如果所有数字都等于9,您只需更改
复选框
,但将
b
c
反复更改为1如果
(d==d.toFixed(0))
,您就可以执行
e++没有其他内容。如果这个条件只满足一次,它将始终保持为真,并且您的循环将永远保持
e++
(直到崩溃)。这不是离题了吗?我建议使用CodeReview stack exchange网站。@evolutionxbox如果坏了,那是因为堆栈溢出。如果不是,但需要质量检查、性能等,那么它是用于代码审查的。旁注:对于不运行的代码,没有理由使用可运行的代码段。(你应该包括你的代码,但这可能会让人混淆你隐藏了实际的代码,而代码片段不会产生结果。)投票赞成。然而,可能有比:d==d.toFixed(0)更优雅的测试吗?@Roberto谢谢你,我现在用
parseInt
代替了它,这对我来说似乎更自然,但我没有任何理由认为它比
toFixed()更好。
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;
}