为何无法打印双镜像帕斯卡星型图案?请排查JavaScript代码错误
修复双镜像帕斯卡星型图案的JavaScript代码错误
你的代码运行后仅输出两个空格,核心问题出在字符串覆盖、类型转换错误、循环逻辑不匹配这几点,以下是具体修复方案:
错误分析
- 类型未转换:
prompt返回字符串类型,直接用于循环比较会引发逻辑异常,若输入非数字会直接失效。 - 字符串被覆盖:下半部分循环中使用
str = " "直接赋值,会清空之前拼接好的上半部分图案,最终只剩最后一次循环的内容。 - 循环次数与空格逻辑错误:下半部分
n+2的循环次数完全不符合对称需求,中间空格的计算逻辑也导致空格过多,破坏图案结构。
修复后的代码
<script> // 将输入转为数字,设置默认值4避免空输入错误 var n = parseInt(prompt("Enter the number of rows you want to print")) || 4; let str = ""; // 上半部分:星号从1递增到n for(let i = 1; i <= n; i++){ // 左侧星号 for(let j = 1; j <= i; j++){ str += "*"; } // 中间对称空格:共2*(n-i)个 for(let k = 1; k <= n - i; k++){ str += " "; } for(let k = 1; k <= n - i; k++){ str += " "; } // 右侧星号 for(let j = 1; j <= i; j++){ str += "*"; } str += "\n"; } // 下半部分:星号从n-1递减到1 for(let i = 1; i < n; i++){ // 左侧星号 for(let j = n - i; j >= 1; j--){ str += "*"; } // 中间对称空格:共2*i个 for(let k = 1; k <= i; k++){ str += " "; } for(let k = 1; k <= i; k++){ str += " "; } // 右侧星号 for(let j = n - i; j >= 1; j--){ str += "*"; } str += "\n"; } console.log(str); </script>
效果验证(输入n=4时)
输出图案如下:
* * ** ** *** *** ******** *** *** ** ** * *
内容的提问来源于stack exchange,提问作者Het Patel
相关产品推荐
相关产品推荐

