下面是打印下图所示图案的My JavaScript代码。请检查代码并解决错误。
<script>
var n = prompt("Enter the number of n you want to print");
//rows = Math.floor(n / 2)
let str = ""
var i, j, k
for(i = 1; i <= n; i++){
for(j = 1; j <= i; j++){
str += "*"
}
for(k = n + 1; k >= i; k--){
str += " "
}
for(k = n + 1; k >= i; k--){
str += " "
}
for(j = 1; j <= i; j++){
str += "*"
}
str += "\n"
}
for(i = 1; i <=n + 2; i++){
for(j = n + 2; j > i; j--){
str += "*"
}
for(k = 1; k <= i; k++){
str = " "
}
for(k = 1; k <= i; k++){
str = " "
}
for(j = n + 2; j > i; j--){
str += "*"
}
str += "\n"
}
console.log(str)
</script>
我希望输出如下:
但输出中只有两个空格
3条答案
按热度按时间4ktjp1zp1#
将输入转换为
Number
:然后像@TomLV提到的那样修改代码:
m2xkgtsf2#
在第二个"i for循环"的两个"k循环"中,您将
str
设置为等于" "
。例如:
如果您将这些更新为
+=
,它就可以工作。i7uq4tfw3#
一些问题:
prompt
返回一个字符串,你需要把它转换成一个数字。你可以用一元加号来完成。str = " "
出现在您应该执行str += " "
的两个位置k
循环少一次迭代,并在这些循环之外添加str += " "
作为一个单独的语句。i
循环使一次迭代太多。不是问题,但是:
我将假设输出中的 number 行应该是
n*2+1
,并且在这方面没有错误。更正代码:
请注意,JavaScript有一些函数可以简化这个过程,例如可以使用
"*".repeat(i)
代替循环来生成相同的字符串。所以它变成了:
你也可以重用第一个循环的结果,通过将行存储在一个数组中来得到输出的后半部分,然后反转这个数组来得到输出的后半部分(去掉中间行):