如何使用While循环正确打印左下向递减星形三角形?
修正While循环实现左下向递减星形三角形
修正后的代码
let star = "* "; let totalRows = 5; let currentRow = 0; while (currentRow < totalRows) { // 打印每行的前置空格 let spaceCount = 0; while (spaceCount < currentRow * 2) { process.stdout.write(" "); spaceCount++; } // 打印当前行的星星 let starCount = 0; while (starCount < totalRows - currentRow) { process.stdout.write(star); starCount++; } // 换行 console.log(); currentRow++; }
原代码问题分析
- 未重置高度变量:原代码中
height仅初始化一次,第一次外层循环后height被减至0,后续内层循环因height > length不成立,无法再打印多个星星。 - 缺少前置空格逻辑:没有处理每行的缩进,无法实现三角形的偏移效果。
- 多余星星输出:最后
console.log(star)会额外打印一个星星,导致第一行输出异常。
修正说明
- 用
totalRows明确总行数,避免魔法数字,提升代码可读性。 - 外层循环控制当前行数,每行先打印
currentRow * 2个空格实现缩进,再打印totalRows - currentRow个星星保证每行星星数递减。 - 每次外层循环独立处理空格和星星的计数,避免变量污染导致的逻辑错误。
内容的提问来源于stack exchange,提问作者Bigflatfoot
相关产品推荐
相关产品推荐

