Java - 打印菱形

By sunwc 2023-03-18 Practice
 public static void main(String[] args) {

        /*
        內層迴圈每次執行10次
        第1行(i=5) 印星號 j=5
        第2行(i=4) 印星號 j=4、6
        第3行(i=3) 印星號 j=3、5、7
        第4行(i=2) 印星號 j=2、4、6、8
        第5行(i=1) 印星號 j=1、3、5、7、9
        j其餘情況印一個空白

        輸出上半部:
            *
           * *
          * * *
         * * * *
        * * * * *

         */
        for (int i = 5; i > 0; i--) {

        // 計算當前是第幾行,第0行即不用找下一個印星號的位置
        int line = 5 - i;
        int nextPosition = 0;
            for (int j = 1; j < 10; j++) {

                // 當 內層迴圈 第一次 i == j 的時候,就先去找下一個印*號的位置
                // j == nextPosition(下一個印星號的位置),就印星號
                if (line >= 0 && (j == i || nextPosition == j)) {
                    System.out.print("*");
                    if (line > 0) {
                        // 當印出當前星號後,就開始找到再下個印星號的位置
                        nextPosition = j + 2;
                        // 當line=0,代表當前這行的星號已經印完了
                        line--;
                    }
                } else {
                    // 印空白
                    System.out.print(" ");
                }
            }
            // 換行
            System.out.println();
        }

        /*
        內層迴圈每次執行7次
        第1行(i=5) 印星號 j=8、6、4、2
        第2行(i=4) 印星號 j=7、5、3
        第3行(i=3) 印星號 j=6、4
        第4行(i=2) 印星號 j=5
        j其餘情況印一個空白

        輸出下半部:
         * * * *
          * * *
           * *
            *

         */
        for (int i = 5; i > 1; i--) {
            // 每行開頭先印一個空白
            System.out.print(" ");

            // 計算當前是第幾行,第0行即不用找下一個印星號的位置
            int line = i - 2;
            int nextPosition = 0;
            for (int j = 8; j > 1; j--) {

                // 當 內層迴圈 第一次(i+3) == j 的時候,就先去找下一個印*號的位置
                // j == nextPosition(下一個印星號的位置),就印星號
                if (line >= 0 && (j == (i+3) || nextPosition == j)) {
                    System.out.print("*");
                    if (line > 0) {
                        // 當印出當前星號後,就開始找到再下個印星號的位置
                        nextPosition = j - 2;
                        // 當line=0,代表當前這行的星號已經印完了
                        line--;
                    }
                } else {
                    // 印空白
                    System.out.print(" ");
                }
            }
            // 換行
            System.out.println();
        }
    }

輸出結果:

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