【问题标题】:Javascript while loop calculationJavascript while循环计算
【发布时间】:2012-03-23 14:24:37
【问题描述】:

如果我是你,我不会运行这个:

Javascript:

(function() {
    var a = 1, 
        b = a, 
        c = b,
        d = 1,
        e = 1;

    while ( d != 0 && e != 0) {
        b = Math.sqrt(a*a+a*a);
        c = 2*a-b;

        e = b%1;
        f = c%1;

        document.write(a);

        a++;
    } 

    document.write('a = ' + a);
    document.write('b = ' + b);
    document.write('c = ' + c); 

})();​

是的,基本上我想一遍又一遍地计算相同的方程,直到所有三个都是带有 Javascript 的整数,然后将它们打印出来。请注意,直到最近我才使用 jQuery。

这似乎只是无限重复,虽然我觉得很奇怪它在计算时不打印a,不确定javascript while 循环是否是这样工作的。

另外,为什么我不能用Math.sqrt(2a^2) 来计算B?

【问题讨论】:

    标签: javascript while-loop infinite-loop


    【解决方案1】:

    Math.sqrt(2a^2) 不起作用,因为:

    1) 当您想使用 * 进行乘法运算时,您必须在 Javascript 中明确说明。 2a 不代表2*a
    2) ^ 在 Javascript 中的含义与求幂不同。这意味着Bitwise XOR

    在许多其他编程语言中也是如此。 Math.sqrt(2*a*a) 会为你工作。

    您的循环不会退出,因为 d != 0 始终为真,因为您永远不会修改 d 的原始值 1。

    我不确定你想用 b%1c% 做什么,但任何整数 mod 1 都会给你 0。

    没有任何内容写入屏幕,因为您的循环永远不会停止执行,因此不会让网络浏览器有机会呈现任何内容。

    【讨论】:

    • “任何 mod 1 都会给你 0”不正确:1.1 % 1 不为零。
    • @muistooshort 是的,我不知道 % 是为整数以外的数字定义的。谢谢。
    【解决方案2】:

    它永远不会结束,因为d 永远不会等于 0。你将它初始化为 1 并且永远不会重新分配它。您还使用了未声明的变量f。应该是d

    我还建议使用console.log 而不是document.write。它比 DOM 更频繁地刷新,并且通常具有更好的日志记录功能。查看 WebKit Inspector(Safari 和 Chrome)、Firebug (Firefox) 或 F12 开发人员工具 (IE)。

    作为 PaulP.R.O.指出,您想要的求幂语法是无效的 JavaScript 语法。如果你愿意,你可以这样写:

    b = Math.sqrt(2 * Math.pow(a, 2));
    

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2011-09-29
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多