現我們嘗試利用 for 迴圈來寫一個可印出金字塔三角圖形,如我們要印出有六層金字塔三角圖形,則如下:

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

*

*

*

 

 

 

 

 

 

 

*

*

*

*

*

 

 

 

 

 

*

*

*

*

*

*

*

 

 

 

*

*

*

*

*

*

*

*

*

 

*

*

*

*

*

*

*

*

*

*

*

 

方法一:

首先,我們來分析一下該圖的邏輯特性,由圖我們可知道 * 是由三角形中軸線向左右二邊逐一擴展,第一層只有一個 *,而每增加一層,就向左右再各加一個 *,至最底層時左邊和右邊各增加了 (層數-1) *,所以最底層的總 * 數為 ((總層數-1)X2-1) 個,亦即為 (總層數X2-1) 個,在此,我們可把整張圖看作橫向有(總層數X2-1)個格子,縱向有(總層數)個格子。中軸線位置即是在第(總層數)格子。

 

1

2

3

4

5

6

7

8

9

10

11

 

*

開始

結束

 

 

 

 

 

*

 

 

 

 

 

 

1

1

6

6

 

 

 

 

*

*

*

 

 

 

 

 

2

3

5

7

 

 

 

*

*

*

*

*

 

 

 

 

3

5

4

8

 

 

*

*

*

*

*

*

*

 

 

 

4

7

3

9

 

*

*

*

*

*

*

*

*

*

 

 

5

9

2

10

*

*

*

*

*

*

*

*

*

*

*

 

6

11

1

11

 

 

 

 

中軸

 

 

L:總層數

i

iX2-1

L-i+1

L+i-1

 

由上分析,這是一個2D的圖形,要產生這圖形必須有二個迴圈,第一個迴圈控制層數,第二個迴圈則控制每一層的點輸出,並判斷在那一格子該印出空白,那一格子該印出 * 。假設總層數為 L,則第一層印出 * 的格子位置即第 L 格,第二層印出 * 的格子位置即第則由 L-1 L+1 的格,第三層印出 * 的格子位置即第則由 L-2 L+2 的格,餘類推。現我們再把印到第幾層以 i 來表示那一層,放入要印出 * 的格子位置的判斷中,在第二層 (i=2) 原向左邊擴展的起始格子為L-1,加入 i 層的考量時可修改為 L-i+1,原向右邊擴展的結束格子為L+1,加入 i 層的考量時可修改為 L+i-1

各層 * 格數 = (i X 2) - 1

各層 * 開始位置 = L - i + 1

各層 * 結束位置 = L + i - 1

 

依此我們即可撰寫如下程式,執行結果會如我們的需求。

 

/* For 迴圈練習

 * 利用 for 迴圈來寫一個可印出金字塔三角形圖形 */

import java.util.Scanner;

 

public class For01 {

     public static void main(String[] args) {

           System.out.println("請輸入一正整數");

           Scanner scan = new Scanner(System.in);

           int level = scan.nextInt();

           String str;

           if (level < 0)

           {

                System.err.println("輸入的數值必須大於 0");

                System.exit(1);

           }

           for (int i=1; i<=level; i++)  // 層數,縱向掃描

           {

                for (int j=1; j<=level*2-1; j++)  // 橫向掃描

                {

                     // level-i+1 為印 * 左向的起始點

                     // level+i-1 為印 * 右向的結束點

                     if ((j >= level-i+1) & (j <= level+i-1))

                           str = "*";

                     else

                           str = " ";

                     System.out.print(str);

                }

                System.out.println();

           }

     }

}

 

方法二:

 

 

 

 

 

 

 

 

 

 

 

 

空白

*

總格數

 

 

 

 

 

*

 

 

 

 

 

 

1

5

1

6

 

 

 

 

*

*

*

 

 

 

 

 

2

4

3

7

 

 

 

*

*

*

*

*

 

 

 

 

3

3

5

8

 

 

*

*

*

*

*

*

*

 

 

 

4

4

7

9

 

*

*

*

*

*

*

*

*

*

 

 

5

1

9

10

*

*

*

*

*

*

*

*

*

*

*

 

6

0

11

11

 

由上圖及表格的分析,我們可得知,若為一個六層的三角圖形,用格子數來表示,由左邊到有*的最右邊的格數關係為,第一層會有5個空白格再加1 * 總格數有6格,第二層會有4個空白格再加3個 * 總格數有7格,第三層會有3個空白格再加5個 * 總格數有8格,以此規則可得知,若總層數為 L,第幾層以i表示,則各層總格數、各層空白格數和各層 * 格數的關係,可用如下數學式表示:

各層總格數 = L + i - 1

各層空白格數 = L - i

各層 * 格數 = (i X 2) - 1

 

我們用此方法的主要程式如下:

static void method02(int level)

{

     for (int i=1; i<=level; i++)

     {

          System.out.print(repeatStr(' ', level - i));  // 印空白

          System.out.print(repeatStr('*', i * 2 - 1));  // *

          System.out.println();

     }

}

    

static String repeatStr(char c, int n)

{

     String s = "";

     for (int i=0; i<n; i++)

          s = s + c;

     return s;

}

arrow
arrow
    文章標籤
    Java for 金字塔 三角形
    全站熱搜
    創作者介紹
    創作者 Gino的家 的頭像
    Gino的家

    Gino的家

    Gino的家 發表在 痞客邦 留言(0) 人氣()