【问题标题】:JavaScript: while loop inside a for loopJavaScript:for循环内的while循环
【发布时间】:2016-07-19 07:32:19
【问题描述】:
var hash = "";
var count = 1;
var n = 3;
    for (var pound = 1; pound <=7; pound ++)
        {while (hash.length != count)
            hash += "#";
            hash += "\n";
            count += n;
            n ++;}
         console.log(hash);

您好,我是 Javascript 的新手,对一般的编码也很陌生。我花了几个小时分析我上面的代码。顺便说一句,我在没有任何帮助的情况下生成了自己。我不会说我很自豪,因为我不知道它为什么或如何运作。我想我得到了工作背后的基本数学知识,当我在最后检查变量的值时,结果与我的计算相符。但我不知道究竟会发生什么。它使用“#”生成一个三角形。我已经尝试删除 For 循环以确切了解 while 循环在做什么,但我无法掌握它。请看一下。

首先,在第一个 For 循环中,进入 while 循环,hash.length 的值为 0。比较它来计数哪个 1,它们不匹配,所以下一行。添加“#”和“\n”后,hash.length 变为 2。但代码被读到最后,使得 var count 现在为 4,var n 也等于 4。

现在,下一个循环不会发生在 while 循环中,我自己也试过了。它回到 For 循环。检查“hash.length != count”的条件,这个条件仍然成立,因为 hash.length 是 2,count 现在是 4。由于它们不相等,在返回 For 循环之前不应该重复 while ?

【问题讨论】:

  • 这看起来不像是有效的 javascript。至少,for 的左括号是无与伦比的。这不应该运行。
  • @Carcigenicate:有效。它执行。它只是格式错误。
  • @Amadan 哎呀!在移动应用上,for 循环的右端被切断,直到您滚动为止。

标签: javascript for-loop while-loop


【解决方案1】:
while (cond)
  statement1;
  statement2;

没有按照你的想法做(而且缩进在骗你)。重新编写代码以使其符合逻辑流程可以为您提供:

var hash = "";
var count = 1;
var n = 3;
for (var pound = 1; pound <= 7; pound++) {
  while (hash.length != count)
    hash += "#";
  hash += "\n";
  count += n;
  n++;
}
console.log(hash);

While 仅重复下一条语句。如果你需要它重复更多,你必须使用大括号的复合语句(语句块)。

这里,for 循环将为每一行执行一次;其中,while 将针对每个哈希字符执行一次。

【讨论】:

  • @Amadan...感谢您的评论。非常感谢。
【解决方案2】:

任何不带括号{ &lt;-code here-&gt; } 的循环仅循环查找以下行。

所以你的 while 只做这个:

while (hash.length != count)
    hash += "#";

所以,去掉你的 for 循环,你会得到 hash = "#"(因为 count 从 1 开始,hash.length 为 0),然后会发生以下情况:

hash += "\n";
count += n;
n++;

基本上,哈希将是带有换行符的#。

【讨论】:

  • @GBarroso...非常感谢。现在一切都说得通了。
【解决方案3】:

你的问题的答案是 因为 while 循环没有括号来指示循环内的代码。 只有一行,
hash += "#";
执行,当您到达修改计数值的行时:
count += n;,
while 循环不会重复,因为您已经退出了该循环。
通常,您希望代码尽可能简单。 只需以这种方式编写即可获得与您发布的代码相同的结果:

   var hash="";
   for (var pound = 1; pound <=7; pound ++)
        {
            hash += "#";
            console.log(hash);            
         }

您将使用更少的变量,散列的长度将大大减少。 有时过多的字符串连接会减慢代码执行速度。

上面的代码运行了七次 for 循环,每次,它都会在哈希字符串后面附加一个 '#' 并显示在控制台上...
结果相同,行数更少,执行速度更快,并且更易于阅读。

如果您是编程新手,我建议您从鼓励良好编程实践的编程语言开始。

虽然 PASCAL 不再流行,但在任何 C 风格语言之前先学习它,很可能会让你开始编写非常好的代码。

我知道讨厌 Pascal 的人可能会批评.. 但是,这种语言很好地让你专注于算法和良好的编程风格。这应该是您进入任何语言之前的第一步。

【讨论】:

  • ...非常感谢!你的评论很有帮助,我学到了很多。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2012-05-28
  • 2011-06-19
  • 2019-11-10
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多