如何用JS循环输出带两个均匀下方小金字塔的星号菱形,解决else if逻辑覆盖问题
实现两个并排均匀星号菱形的方法
要实现两个均匀排列的星号菱形,核心需要调整3个点:
- 拓宽
j的循环范围,预留足够的列数容纳第二个菱形 - 为第二个菱形设置独立的中心坐标,避免和第一个的星号范围重叠
- 调整判断逻辑,把两个菱形的星号匹配条件设为并列的或关系,而非嵌套的分支
原有代码的问题说明
- 原来的
j循环仅遍历1-9列,宽度仅够放下一个菱形,没有多余空间放置第二个 - 单菱形的中心固定在第5列,未定义第二个菱形的中心坐标,新增分支的匹配范围无意义
- 原有分支的判断优先级是“先匹配第一个菱形条件就输出
*”,如果把第二个菱形的条件加在原有else if分支,会被第一个菱形的匹配逻辑阻塞,无法触发
优化后可直接运行的代码
var str5 = ""; for (let i = 1; i < 10; i++) { // 计算当前行的菱形半宽:上半逐行变宽,下半逐行变窄 const halfWidth = i <= 5 ? i - 1 : 9 - i; // 总宽度设为19列,足够容纳两个中心分别在第5、15列的菱形 for (let j = 1; j < 20; j++) { // 只要匹配任意一个菱形的星号范围,就输出* if ( (j >= 5 - halfWidth && j <= 5 + halfWidth) || (j >= 15 - halfWidth && j <= 15 + halfWidth) ) { str5 += "*"; } else { str5 += " "; } } str5 += "\n"; } console.log(str5);
自定义调整说明
如果要修改两个菱形的间距,只需调整第二个菱形的中心坐标(即代码里的15这个值):
- 数值越大,两个菱形的间隔越宽
- 保持两个中心的坐标差为整数,就能保证两个菱形的大小完全一致、排列均匀
内容的提问来源于stack exchange,提问作者user14882773
相关产品推荐
相关产品推荐

