如何在列和行中打印正确数量的星号?

时间:2018-02-23 14:59:49

标签: java

我想打印等于行数的asterix - (它们应该从右侧开始)。它应该从第一行的9个空格和1 *开始,然后在第二行以2 *和8个空格开始,依此类推,直到第十行应该有10 *和0个空格,如下图所示:

enter image description here

我可以在每一行打印正确数量的空格,在正确的位置打印1 *。例如,它在第一行打印9个空格和1 *。但是在第二行,它在第九个位置打印8个空格和1 *而不是两个?我无法在代码中看到错过的内容:

for (int row = 1; row <= 10; row++) {
    for (int col = 10; col > row; col--) {
        System.out.print(" ");
        if (col <= row) {
            System.out.print("*");
        }
    }
    System.out.println("*");
}

2 个答案:

答案 0 :(得分:1)

有几种解决方案:

1)要么为每一行创建两个内部循环:一个用于写入空格,另一个用于写入星形

    final int rows = 10;
    for(int row = 1; row <= rows; row++) {
        for(int i = 0; i < (rows - row); i++) {
             System.out.print(" ");
        }
        for(int i = 0; i < (row); i++) {
             System.out.print("*");
        }
        System.out.println();
    }

2)或者为每一行创建一个内部循环并检查索引以考虑是否必须打印星形或空白。

final int rows = 10;
for(int row = 1; row <= rows; row++) {
    for(int col = 1; col <= rows; col++) {
         System.out.print((col <=(rows - row))? " " : "*");
    }
    System.out.println();
}

3)或者你可以对subString使用字符串操作(这很难看,但为什么不呢):

final int rows = 10;
final String stars = "************************";
final String blanks = "                        ";
for(int row = 1; row <= rows; row++) {
    System.out.print(blanks.substring(0, rows - row));
    System.out.println(stars.substring(0, row));
}

答案 1 :(得分:0)

这可能也有帮助:

    int n = 10;
    int k = 2 * n - 2; // number of spaces
    // outer loop to handle number of rows
    for (int i = 1; i <= n; i++) {
        // inner loop to handle number spaces
        for (int j = 1; j <= k; j++) {
            System.out.print(" "); // printing spaces
        }
        k = k - 2; // decrementing k after each loop
        // inner loop to handle number of columns
        for (int j = 1; j <= i; j++) {
            System.out.print("* "); // printing stars
        }
        // ending line after each row
        System.out.println();
    }