【问题标题】:Replace for loop with a while loop?用while循环替换for循环?
【发布时间】:2019-09-09 20:19:31
【问题描述】:

目标是使用 while 循环仅将 0 到 101 的偶数打印到网页。我已经使用 for 循环有效地做到了这一点,但我必须按照指示使用 while 循环,我无法让它工作。

有效的 for 循环:

for (var loopCounter = 0; loopCounter >= 0 && loopCounter <= 101; loopCounter++){
    if (loopCounter % 2 == 0){
        document.write(loopCounter + '<br/>')
    }
}

我试图使 while 循环尽可能类似于 for 循环,但是当我使用下面的代码时,我的页面甚至不会加载,更不用说打印数字了。

var loopCounter = 0;
while (loopCounter >= 0 && loopCounter <= 101){
    while (loopCounter % 2 == 0){
        document.write(loopCounter + "<br/>");
        loopCounter++;
    }
}

非常感谢任何帮助,我也是 JavaScript 的新手,如果我使用 while 循环错误,请不要激怒我。

【问题讨论】:

  • 为什么if语句变成了while循环?
  • 另外,您必须将loopCounter++; 放在if 语句之后,以便它在每次迭代中运行。

标签: javascript for-loop while-loop


【解决方案1】:

你差不多明白了,你只需要改变循环类型并添加一个停止条件,内部IF可以保持不变:

var loopCounter = 0;
while (loopCounter <= 101){
    if (loopCounter % 2 == 0){
        document.write(loopCounter + "<br/>"); 
    }
    loopCounter++;
}

另外,loopCounter 变量不仅应该在偶数时增加,所以它应该在 IF 之外,否则它只会增加偶数。 另外,我认为在这个例子中没有必要检查 loopCounter 变量是否小于零。希望我有所帮助

【讨论】:

  • 啊!谢谢,那行得通。您知道我按照自己的方式进行操作时页面没有加载的原因吗?
  • 它可能陷入了无限循环,因为第二个 while 的条件始终为真
  • 哦,好的,我明白了。谢谢!
【解决方案2】:
let loopCounter = 0;
while (loopCounter <= 101){
   //Change the second while for an if.
    if (loopCounter % 2 == 0){
        document.write(loopCounter + "<br/>");
    }
    // Also, you must place the loopCounter++ after the if statement.
    loopCounter++;
}

【讨论】:

    【解决方案3】:

    看到这个例子,为什么让它变得困难?将 while 与 if 结合起来

    您可以修改代码以满足您的需要

    https://jsfiddle.net/jg972s8p/

    <script>
    function myFunction() {
    var tmp = "";
    var loopCounter = 0;
    while (loopCounter >= 0 && loopCounter <= 101){
        if (loopCounter % 2 == 0)
      {
            tmp = tmp + loopCounter.toString() + "<br>";
        }
            loopCounter++;
        }
        return tmp
    }
    document.getElementById("demo").innerHTML = myFunction();
    </script>
    

    【讨论】: