繁体   English   中英

使用 for 循环打印

[英]Print using for-loop

尝试从 Java 导入形状(模式 23)(来源https://www.topjavatutorial.com/java/java-programs/25-java-programs-printing-number-character-patterns/并在控制台中打印:

我只能使用以下方法打印左侧形状:

for (let i = 1; i <= 8; i++) {
    let shape = '';

    for (var j = 1; j <= i; j++) {
        shape += '*';
    }
    console.log(shape);
}

关于我应该如何解决这个问题的任何想法都将不胜感激。

这是一种方法,可以根据您编写的代码构建:

function reverseString(str) {
    return str.split( '' ).reverse( ).join( '' );
}

// Build first 8 characters of each line.
lines = []
for (let i = 1; i <= 8; i++) {
    lines.push('')

    for (var j = 1; j <= i; j++) {
        lines[lines.length-1] += "*";
    }
    for (; j <= 8; j++) {
        lines[lines.length-1] += " ";
    }
}


// Append the vertical mirror to get the first 16 characters of each line.
lines_2 = []
for (let i = 1; i <= 8; i++) {
    lines_2.push(lines[i - 1] + lines[8-i]);
}

// Append the horizontal mirror to get the entire 32 characters of each line.
lines_3 = []
for (let i = 1; i <= 8; i++) {
    lines_3.push(lines_2[i-1] + reverseString(lines_2[i-1]));
}

// Output
for(let i = 0; i < 8; i++) {
    console.log(lines_3[i]);
}

结果:

*       ****************       *
**      *******  *******      **
***     ******    ******     ***
****    *****      *****    ****
*****   ****        ****   *****
******  ***          ***  ******
******* **            ** *******
*********              *********

这不一定是最简洁的方法。 但我希望您能看到我们如何通过逐步构建您开始使用的部分解决方案来实现这一目标。

一种选择是:

for (var i = 0; i < 8; i++) {
  let stars = "*".repeat(9 - i).padEnd(9, ' ');
  let leftSide = "*".repeat(i + 1).padEnd(8, ' ') + stars;
  let rightSide = leftSide.split("").reverse().join("");
  console.log(leftSide + rightSide);
}

结果:

*       ******************       *
**      ********  ********      **
***     *******    *******     ***
****    ******      ******    ****
*****   *****        *****   *****
******  ****          ****  ******
******* ***            *** *******
**********              **********

请注意,结果与您的原始形状略有不同。 这个形状的中间部分有 18 条线,但你的形状的中间部分有 17 条线。

最后, *和空格的纯 for 循环回答:

 for (let i = 1; i <= 8; i++) { let shape = ''; for (var j = 1; j <= i; j++) { shape += '*'; } for (var j = 8; j > i; j--) { shape += ' '; } for (var j = 9; j >= i; j--) { shape += '*'; } for (var j = 2; j <= i; j++) { shape += ' '; } for (var j = 2; j <= i; j++) { shape += ' '; } for (var j = 9; j >= i; j--) { shape += '*'; } for (var j = 8; j > i; j--) { shape += ' '; } for (var j = 1; j <= i; j++) { shape += '*'; } console.log(shape); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM