求助:使用嵌套循环实现控制台偶数位置打印*的代码错误排查
帮你搞定控制台打印的问题~
首先先明确你的需求:用嵌套循环实现在每个偶数位置打印'*',先看看你代码里的核心问题:
- 内层循环完全没发挥作用:你写的内层
for (j...)只是在打印i+j,但根本没把列位置j和你要构建的行字符串starsline关联起来——这就导致你的starsline最后只会是一个字符(1或2),完全不是一行n个对应位置的内容。 - 判断逻辑找错了对象:你现在是根据行号
i的奇偶来加1或2,但需求是“偶数位置”——这里的位置要么是列号j为偶数,要么是你之前打印i+j时想的“行列和为偶数”?我两种情况都给你修正方案。
方案1:每行的偶数列(第2、4...列)打印*
这是最直观的“偶数位置”理解,修正后的代码如下:
var n = 5; var stars = ''; for (var i = 1; i <= n; i++) { var starsline = ''; for (var j = 1; j <= n; j++) { // 判断当前列j是不是偶数 if (j % 2 === 0) { starsline += '*'; } else { // 奇数位置用空格占位,你也可以换成其他字符 starsline += ' '; } } // 每行结束加个换行,控制台显示才会是多行 stars += starsline + '\n'; } console.log(stars);
运行后控制台会输出:
* * * * * * * * * * * *
方案2:行列和(i+j)为偶数的位置打印*
看你原代码里打印i+j,猜你可能是想实现这种棋盘格效果?那代码调整成这样:
var n = 5; var stars = ''; for (var i = 1; i <= n; i++) { var starsline = ''; for (var j = 1; j <= n; j++) { // 判断i+j的和是不是偶数 if ((i + j) % 2 === 0) { starsline += '*'; } else { starsline += ' '; } } stars += starsline + '\n'; } console.log(stars);
运行后输出的棋盘格效果:
* * * * * * * * * * * * *
再给你捋捋原代码的问题根源
- 内层循环和行字符串构建完全脱节,白写了;
- 外层循环的判断只控制了一个字符,没有实现每行n个位置的逐个判断;
- 没加换行符,最后输出是一坨字符串,不是你要的多行效果。
内容的提问来源于stack exchange,提问作者Mariusz
相关产品推荐
相关产品推荐

