使用星型Java打印星

时间:2016-10-11 02:19:12

标签: java

我想打印下面的图案

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

我可以使用以下代码在模式中打印两个外部金字塔:

    public static void main(String[] args) {
    int n = 8;
    int i, j;

    for (i = 1; i <= n; i++) {
        for (j = i; j < n; j++) {
            System.out.print(" ");
        }
        for (j = 1; j <= (2 * i - 1); j++) {
            if (i == n || j == 1 || j == (2 * i - 1)) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }

        System.out.print("\n");

    }
    for (i = n; i >= 1; i--) {
        for (j = i; j < n; j++) {
            System.out.print(" ");
        }
        for (j = 1; j <= (2 * i - 1); j++) {
            if (i == n || j == 1 || j == (2 * i - 1)) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }
        System.out.print("\n");
    }
}

将图案打印为

       *               
      * *              
     *   *             
    *     *             
   *       *           
  *         *              
 *           *
***************
***************
 *           *
  *         *
   *       *
    *     *
     *   *
      * *
       *``

但如何将这两者结合起来形成星形呢?

3 个答案:

答案 0 :(得分:2)

既然你没有说明你的限制是什么......

public static void main(String[] args) {
    System.out.println("       *       ");
    System.out.println("***************");
    System.out.println(" *   *   *   * ");
    System.out.println("  * *     * *  ");
    System.out.println("   *       *   ");
    System.out.println("  * *     * *  ");
    System.out.println(" *   *   *   * ");
    System.out.println("***************");
    System.out.println("       *       ");
}

现在很明显这不是你打算做的,但下次如果你对你的要求更具体一点会有所帮助,例如:“我必须只使用for循环“,”我不允许一次打印多个字符“,”代码必须能够打印给定宽度的任何星号“等。
因为如果没有这些限制,那么最好的方法就是打印如上所述的ASCII行。

答案 1 :(得分:1)

您可以暂时将打印存储在2D char数组中并修改两次,然后使用for循环打印数组。

public static void main(String[] args) {
int n = 8;
char[][] temp = new char[][];
Arrays.fill(temp, ' ');
int i, j;

for (i = 1; i <= n; i++) {
    for (j = 1; j <= (2 * i - 1); j++) {
        if (i == n || j == 1 || j == (2 * i - 1)) {
            temp[i][j] = '*';
        }
    }
}
for (i = n; i >= 1; i--) {
    for (j = 1; j <= (2 * i - 1); j++) {
        if (i == n || j == 1 || j == (2 * i - 1)) {
            temp[i][j] = '*';
        }
    }
}

for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++)
        System.out.print(temp[i][j]);
    System.out.println();
}

}

答案 2 :(得分:0)

在我看来,你的循环是相同的,除了一个代码块是递增的,一个代码块正在下降。您可以组合twp代码块,并使用第三个整数k来处理其他模式。

public static void main(String[] args) {
    int n = 8;
    int i, j, k;

    for (i = 1; i <= n; i++) {
        k = n - i;

        for (j = i; j < n; j++) {
            if (/* TODO: handle k case */) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }

        for (j = 1; j <= (2 * i - 1); j++) {
            if (i == n || j == 1 || j == (2 * i - 1)) {
                System.out.print("*");
            } else if (/* TODO: handle k case */) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }

        System.out.print("\n");
    }
}

有意义吗?