繁体   English   中英

while循环在JavaScript中永远运行

[英]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++块就会卡住,永远不会增加abc

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM