繁体   English   中英

用while循环循环一个三角形

[英]looping a triangle with a while loop

我正在阅读 Eloquent Javascript 书。 有一个任务来构建一个像这样的三角形:

#
##
###
####
#####
######
#######

有一个循环。

我用for循环成功地做到了。

for (var result = "#"; result.length <=7; result = result + "#")
console.log(result);

但由于某种原因,我不能用 while 循环来做到这一点。

var result = "#"
while(result.length <=7 ){
console.log(result);
result = result + "#";
}
VM920:3 #
VM920:3 ##
VM920:3 ###
VM920:3 ####
VM920:3 #####
VM920:3 ######
VM920:3 #######
"########"

出于某种原因,我在底部得到了这条额外的行,其中有 8 个 # 符号用引号括起来。 为什么会这样?

这是代码中最终表达式的结果。 在你的 JS 控制台中输入“5+5”,你会得到一个结果。 如果你把“5+5”放在脚本的末尾,同样的事情。 这就是这里发生的事情:

var result = "#"
while(result.length <=7 ){
    console.log(result);
    result = result + "#";  // <-- this is the last statement executed, so it is returned
}

相比之下,下面的最后一条语句是一个日志语句,它没有返回值。 所以脚本的结果是undefined

for (var result = "#"; result.length <=7; result = result + "#")
    console.log(result);

如果你尝试这样的事情,你可以更清楚地看到这一点:

for (var i=0; i < 5; i++) { 
    console.log(i); 
    i 
}

在这里,最后一个表达式就是i 此代码打印 0-4 (含)的每个数字,然后再次打印 4,因为它是最终表达式。

0
1
2
3
4  <-- the final console.log() call
4  <-- the final expression

我看到了两种解决方案出于某些原因,我更喜欢这个

var newItem = '';
for (var number = 0; number < 7; number++){
    console.log(newItem = newItem + '#');
}

但第二个更雄辩

for (var newItem = '#'; newItem.length < 7; newItem = newItem + '#') {
  console.log(newItem);
}

 var result = "#" while(result.length <=7 ){ console.log(result); result = result + "#"; }

代码工作正常。

实际上 javascript 引擎需要通知一个函数已经完成它的任务。 在这种情况下,编程语言的理解不是已finished ,而是has finished 主要的事实是它不仅适用于 javascript,也适用于其他语言。 在 C# 等某些语言中,我们使用方法签名来调用它,例如,

public void ReturnNothind(){
    // Code...
} 

当它需要通知它已经完成它的业务时,该方法返回void

在 javascript 的情况下,它没有在方法签名中声明,但它根据这个原理工作。

for loop的情况下,它返回undefined 另一方面,对于while循环,它通过返回result变量的值通知 js 引擎。

因此,要从 while 循环中获得相同的结果,您可以执行以下操作...

function print(){var result = "#"
while(result.length <=7 ){
console.log(result);
result = result + "#";
}}
print()

这是我个人最喜欢回答这个问题的方式;

let i = 0;
let finalValue = "";
while(i < 8) {
    finalValue += "#"; i++
    console.log(finalValue);
}

但也有这个解决方案;

let i = 0;
while(i < 8) {
let finalValue = ""; i++
let j = 0;
while (j < i+1) {
    finalValue += "#"; j++
    console.log(finalValue);
}
}

希望这可以帮助 :}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM