虽然循环在JavaScript

时间:2016-04-28 20:26:38

标签: 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
}

2 个答案:

答案 0 :(得分:3)

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

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());

答案 1 :(得分:0)

一旦它到达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;
}