求仅用2个for循环实现多种星型图案的JavaScript代码
用2个for循环实现多星型图案打印
没问题,我帮你调整代码,只用两个for循环就能打印出常见的几种星型图案(矩形、左对齐直角三角、右对齐直角三角、等腰三角、菱形)。先说说你的原代码问题:它用了while循环预生成字符串,还嵌套了for,而且只针对菱形做了逻辑,现在我们把所有图案的打印逻辑整合到两个循环里:
const patternSize = 5; // 可以修改这个值调整图案大小 // 外层循环:控制所有图案的行(含分隔空行) for (let i = 0; i < 6 * patternSize + 2; i++) { let currentLine = ''; // 内层循环:构建每行的空格和星号 for (let j = 0; j < 2 * patternSize - 1; j++) { // 判断当前行属于哪个图案 if (i < patternSize) { // 矩形:每行固定patternSize个星号 currentLine += j < patternSize ? '*' : ' '; } else if (i === patternSize) { // 分隔空行 currentLine = ''; break; } else if (i < 2 * patternSize + 1) { // 左对齐直角三角形 const rowIndex = i - patternSize - 1; currentLine += j <= rowIndex ? '*' : ' '; } else if (i === 2 * patternSize + 1) { currentLine = ''; break; } else if (i < 3 * patternSize + 2) { // 右对齐直角三角形 const rowIndex = i - (2 * patternSize + 2); currentLine += j >= patternSize - 1 - rowIndex ? '*' : ' '; } else if (i === 3 * patternSize + 2) { currentLine = ''; break; } else if (i < 4 * patternSize + 3) { // 等腰三角形 const rowIndex = i - (3 * patternSize + 3); const midPos = patternSize - 1; currentLine += j >= midPos - rowIndex && j <= midPos + rowIndex ? '*' : ' '; } else if (i === 4 * patternSize + 3) { currentLine = ''; break; } else { // 菱形 const rowIndex = i - (4 * patternSize + 4); const midPos = patternSize - 1; const starOffset = rowIndex < midPos ? rowIndex : 2 * midPos - rowIndex; currentLine += j >= midPos - starOffset && j <= midPos + starOffset ? '*' : ' '; } } console.log(currentLine.trimEnd()); // 去掉行尾多余空格,输出更整洁 }
代码说明:
- 核心逻辑:只用两个
for循环——外层循环遍历所有需要输出的行(包括各个图案的行和分隔空行),内层循环负责构建每行的字符内容。 - 图案切换:通过判断外层循环的
i值区间,切换到对应图案的打印逻辑,每个图案之间用空行分隔,看起来更清晰。 - 可扩展性:修改
patternSize变量就能一键调整所有图案的大小,不用改逻辑。
运行这段代码,你就能看到矩形、左三角、右三角、等腰三角、菱形依次打印出来啦~
内容的提问来源于stack exchange,提问作者Rohit Ghodake
相关产品推荐
相关产品推荐

