javascript - While 循环在 JavaScript 中永远运行

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

如果公式的结果是整数,则将 1 加到 e,但不会增加其他变量,因为 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());

关于javascript - While 循环在 JavaScript 中永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924845/

相关文章:

Javascript 和非常长的字符串

javascript - 我怎样才能消除差距

javascript - react 。如何仅对现有 key 使用 fetch 和 setState 来处理 API 响应中丢失的 key ?

javascript - 按钮内的 onChange 和 onClick 在 I.E 上不起作用

javascript - 如何在 npm 中型编辑器中增加文本区域的高度?

javascript - Fabric.js 组成员的属性不更新?

javascript - ''Access to restricted URI denied'“尝试使用 ng-template 时出错

javascript - 在 JavaScript 中将一个时区转换为另一个时区

javascript - 谷歌 OAuth 2.0 同源错误

javascript - 如何在 MongoDB 中创建动态正则表达式?