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循环?
答案 0 :(得分:2)
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);
虽然只重复下一个陈述。如果需要重复更多,则必须使用花括号使用复合语句(语句块)。
这里,for
循环每行一次;在此范围内,while
将为每个哈希字符设置一次。
答案 1 :(得分:0)
任何没有括号{ <-code here-> }
的循环只会循环查看以下行。
所以你只做这件事:
while (hash.length != count)
hash += "#";
因此,删除你的for循环,你将有hash =“#”(因为count从1开始,hash.length为0),然后会发生以下情况:
hash += "\n";
count += n;
n++;
基本上,哈希将是#换行符。
答案 2 :(得分:0)
你的问题的答案是
因为while循环没有括号来指示循环内的代码。
只有一行,中
hash += "#";
获取执行,当你到达修改计数值的行时:
count += n;
,因为你已经退出那个循环,所以while循环不会重复
通常,您希望保持代码尽可能简单。
你可以通过这样的方式得到与你发布的代码相同的结果:
var hash="";
for (var pound = 1; pound <=7; pound ++)
{
hash += "#";
console.log(hash);
}
你将使用更少的变量,哈希的长度将大大减少。
有时太多字符串连接会降低代码执行速度。
上面的代码执行了七次for循环,每次都附加一个&#39;#&#39;到哈希字符串并在控制台上显示它...
相同的结果,更少的线条,更快的执行,更容易阅读。
如果您不熟悉编程,我建议您先从编程语言开始,鼓励良好的编程习惯。
虽然 PASCAL 不再受欢迎,但在任何C风格的语言之前首先学习它,很可能会让你起来并编写非常好的代码。
我知道Pascal haters可能会批评..但是,这种语言很适合让你专注于算法和良好的编程风格。这应该是你跳入任何语言之前的第一步。