【问题标题】:For loop won't end. Don't know whyFor 循环不会结束。不知道为什么
【发布时间】:2014-11-27 11:21:48
【问题描述】:

我正在为一个项目编写一个 for 循环,该循环提示用户输入一个数字并不断提示,不断地将数字相加。当一个字符串被引入时,循环应该停止。我用一个while循环完成了它,但项目声明我们也必须用一个for循环来完成它。问题是即使'a = false',提示也会继续运行。有人能解释一下javascript的思维过程吗?我想了解为什么即使不满足条件,它也会继续循环运行。谢谢

 var addSequence2 = function() {

        var total = 0;
        var a;

        for (; a = true; ) {
            var input = prompt("Your current score is " +total+ "\n" + "Next number...");

            if (!isNaN(input)) {
                a = true;
                total = +total + +input;
            }
            else if (isNaN(input)) {
                a = false;
                document.write("Your total is " + total);
            }
        }
 };

【问题讨论】:

    标签: for-loop infinite-loop


    【解决方案1】:

    a = truea == true 之间存在差异。

    您的 for 循环基本上是在问“我可以将 'a' 设置为 true 吗?”,答案是肯定的,然后循环继续。

    将条件更改为a == true(从而询问“'a' 的值是否为真?”)


    为了详细说明,在大多数编程语言中,我们区分赋值(“使'x' 为 4”)和测试相等性(“'x' 是 4 吗?”)。按照惯例(至少在从 C 派生语法的语言中),我们使用 '=' 来分配/设置一个值,并使用 '==' 来测试。

    如果我正确理解规范(不保证),这里发生的情况是条件浓缩如下:

    1. (a = true)是真的吗?
    2. 完成括号:将 a 设置为 true
    3. (a) 是真的吗? (我们只是将其设置为 true,所以它必须是!)

    【讨论】:

    • 谢谢@KidneyChris,以及所有回复的人。我现在知道了。感谢大家抽出宝贵时间帮助我:)
    【解决方案2】:

    尝试使用等于运算符,即更改

    for (; a = true; ) {

    for (; a == true; ) {

    【讨论】:

      【解决方案3】:

      你应该使用 a == true 而不是 a = true......= 是一个赋值运算符

      【讨论】:

        【解决方案4】:

        for (; a = true; ),您将值分配给变量“a”,它将始终保持为真并最终进入无限循环。在 JavaScript 中它应该 a===true

        【讨论】:

          【解决方案5】:

          我怀疑你希望你的 for 看起来像这样:

          for(;a==true;)
          

          因为 a=true 是赋值,而不是比较。

          【讨论】:

            【解决方案6】:

            a == true。双等号比较两者。 Single equal 将值 true 分配给 a,因此它始终返回 true。

            【讨论】:

              【解决方案7】:

              for (; a = true; )

              for (; a == true; )

              【讨论】:

                【解决方案8】:

                这是你的固定代码:

                var addSequence2 = function() {
                
                    var total = 0;
                    var a = true;
                
                    for(;Boolean(a);) {
                        var input = prompt("Your current score is " +total+ "\n" + "Next number...");
                
                        if (!isNaN(input)) {
                            total = total + input;
                        }
                        else{
                            a = false;
                            document.write("Your total is " + total);
                        }
                    }
                };
                

                【讨论】:

                • 是的,while 循环似乎更适合此任务。但是作业要求我们使用 for 循环来练习使用它们,显然,我需要练习!呵呵。感谢您的帮助:)
                猜你喜欢
                • 2020-09-11
                • 1970-01-01
                • 1970-01-01
                • 2019-06-13
                • 2018-06-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-09-11
                相关资源
                最近更新 更多