Java 程式設計(一)  第五章 重複性流程  上一頁    下一頁

 

5-5 多重迴圈敘述

內容:

  • 5-5-1 多重迴圈流程

  • 5-5-2 範例研討:畫矩形圖程式

  • 5-5-3 自我挑戰:畫三角形程式

  • 5-5-4 自我挑戰:畫各種等邊三角形

  • 5-5-5 自我挑戰:畫菱形圖形

  • 5-5-6 範例研討:for 列印九九乘法表

  • 5-5-7 自我挑戰:while 列印九九乘法表

5-5-1 多重迴圈流程

多重迴圈表示迴圈內還有子迴圈,依此延伸下去。圖 5-8 是利用兩個 for 敘述構成了雙重迴圈,外迴圈利用變數 a 作為迴圈條件變數並由 1 10,迴圈執行一次,則累增加 1。內迴圈的條件變數是 b。也是迴圈執行一次,由 1 10 每次累增加 1。然而,外迴圈執行一次,則內迴圈必須由 1 10 執行 10 次迴圈實體。其運作情況如下:

5-8 利用 for 敘述建構雙重迴圈

外迴圈執行順序

內迴圈執行順序

a = 1

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 2

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 3

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 4

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 5

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 6

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 7

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 8

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 9

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

a = 10

b= 1, 2, 3, 4, 5, 6, 7, 8, 9 10

由此範例可以看出,外迴圈實體需執行 10 次才結束,而相對的,內迴圈實體已執行了 100 次。同樣的結構敘述三重迴圈的話,最內層迴圈必須執行 1000 次、中層迴圈 100 次、而外層迴圈 10 次。利用 for 敘述建構雙重迴圈的語法與範例如下。

語法:

範例:

for (a=1; a<=10; a++) {

       statement 1;

       statement 2;

       for( b=1; b<=10; b++) {

              statement 3;

              statement 4;

        }

}

for (j = 1; j <= 10; j++) {

System.out.printf("    ");

      for (k = 1; k <= 10; k++) {

          System.out.printf("*");

      }

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

}

5-5-2 範例研討:畫矩形圖程式

A)程式功能:Ex5_8.java

請編寫一個利用星號(*)畫出矩形圖程式,使用者可以輸入選擇長與寬星號的數量,系統再畫出此大小的矩形圖;期望操作介面如下:

請輸入矩形參數:

請輸入矩形高度 =>5

請輸入矩形寬度 =>10

     **********

     **********

     **********

     **********

     **********

B)製作技巧研討:

如果沒有透過特殊繪圖介面(如 Swing Applet),利用文字終端機繪圖的話,僅能一行接一行,由左至右的繪製,就好像鍵盤輸入文字一樣。圖 5-9 為繪製本系統要求矩形的程序。首先採用兩變數作為高與寬的指標,又電腦是一行接一行繪出,因此外迴圈需利用矩形高的指標(int i);內迴圈利用寬的指標(int j)。每行開始繪製時,先畫出 4 個空格,接著再畫 8 個星號(輸入要求),完成之後,再輸出一個跳行的控制字元(\n);如此重複畫 5 行(輸入要求)。

5-9 矩形繪製程序

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//Ex5_7.java

 

import java.util.*;

public class Ex5_7 {

    public static void main(String args[]) {

        /* 宣告相關物件與變數 */

        Scanner keyin = new Scanner(System.in);

        int height;             // 矩形的高度

        int wide;               // 矩形的寬度

 

        /* 要求輸入矩形高與寬 */

        System.out.printf("請輸入矩形高度 =>");

        height = keyin.nextInt();

        System.out.printf("請輸入矩形寬度 =>");

        wide = keyin.nextInt();

 

        /* 繪製矩形圖形 */

        for(int i=1; i<=height; i++) {

            System.out.printf("     ");

            for(int j=1; j<=wide; j++) {

                System.out.printf("*");

            }

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

        }

    }

}

(D) 程式重點分析:

(1) 20~26 for(int i=1; i<=height, i++) { …}。指定矩形高度的外迴圈,每執行一次迴圈,則繪出一行,共計執行 height= 5)次。

(2) 21 System.out.printf("    ");。每行起頭繪出 4 個空格。

(3) 22~24 for (int j=1; j<wide; j++){ ..};。指定矩形寬度的內迴圈;每執行一次迴圈,畫出一個星號(*),共計執行 wide= 8)次。

(4) 25 System.out.printf("\n");。一行畫製完成之後,送出一個跳行控制字元,準備畫製下一行。

5-5-3 自我挑戰:畫三角形程式

A)程式功能:PM5_5.java

請製作畫右邊等齊的三角形,高度可以由使用者輸入指定,期望操作介面如下:

請輸入等邊三角形高度 =>10

         *

        **

       ***

      ****

     *****

    ******

   *******

  ********

 *********

**********

B)製作技巧提示:

還是需要利用雙重迴圈來製作此程式,外迴圈決定三角形的高度,但需要兩個內迴圈來製作三角形的寬度,一則畫空白格;另一迴圈輸出星號,如圖 5-10 所示。虛擬碼提示如下:

5-10 三角形繪製程序

…..

讀入使用者輸入高度(height);

for(int i=1; i<=height; i++) {        // 外迴圈,指定高度

for(int j=1; j<=(height -i); j++)  // 1 個內迴圈,輸出空格

System.out.printf(" ");

for(int k=1; k<=i; k++)        // 2 個內迴圈,輸出星號

System.out.printf("*");

System.out.printf("\n");       // 換行

}

5-5-4 自我挑戰:畫各種等邊三角形

A)程式功能:PM5_6.java

請製作畫四種等邊三角形的圖型,高度可以由使用者輸入指定,期望操作介面如下:

請輸入等邊三角形高度 =>10

畫出左邊的等邊三角形高度:

          *

         **

        ***

       ****

      *****

     ******

    *******

   ********

  *********

 **********

畫出反向左邊的等邊三角形高度:

**********

 *********

  ********

   *******

    ******

     *****

      ****

       ***

        **

         *

畫出右邊的等邊三角形高度:

*

**

***

****

*****

******

*******

********

*********

**********

畫出反向右邊的等邊三角形高度:

**********

*********

********

*******

******

*****

****

***

**

*

B)製作技巧提示:

01

02

03

04

05

06

07

08

09

10

11

12

….

        System.out.printf("畫出反向左邊的等邊三角形高度:\n");

        for(int i=0; i<height; i++) {

            for(int j=0; j<i; j++) {

                System.out.printf(" ");

            }

            for(int k=0; k<(height-i); k++) {

                System.out.printf("*");

            }

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

        }

….

5-5-5 自我挑戰:畫菱形圖型

A)程式功能:PM5_7.java

請製作畫菱形的圖型,高度可以由使用者輸入指定,期望操作介面如下:

請輸入等邊三角形高度 =>10

畫出左邊的等邊三角形高度:

          * *

         ** **

        *** ***

       **** ****

      ***** *****

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

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

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

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

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

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

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

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

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

      ***** *****

       **** ****

        *** ***

         ** **

          * *

B)製作技巧提示:(請自行思考)

5-5-6 範例研討:for 列印九九乘法表

A)程式功能:Ex5_9.java

請利用 for 雙重迴圈,製作九九乘法表,期望輸出格式如下:

2*1= 2      3*1= 3      4*1= 4      5*1= 5      6*1= 6      7*1= 7      8*1= 8      9*1= 9     

2*2= 4      3*2= 6      4*2= 8      5*2=10     6*2=12     7*2=14     8*2=16     9*2=18    

2*3= 6      3*3= 9      4*3=12     5*3=15     6*3=18     7*3=21     8*3=24     9*3=27    

2*4= 8      3*4=12     4*4=16     5*4=20     6*4=24     7*4=28     8*4=32     9*4=36    

2*5=10     3*5=15     4*5=20     5*5=25     6*5=30     7*5=35     8*5=40     9*5=45    

2*6=12     3*6=18     4*6=24     5*6=30     6*6=36     7*6=42     8*6=48     9*6=54    

2*7=14     3*7=21     4*7=28     5*7=35     6*7=42     7*7=49     8*7=56     9*7=63    

2*8=16     3*8=24     4*8=32     5*8=40     6*8=48     7*8=56     8*8=64     9*8=72    

2*9=18     3*9=27     4*9=36     5*9=45     6*9=54     7*9=63     8*9=72     9*9=81    

B)製作技巧研討:

列印九九乘法表,最能表現出雙重迴圈的特性,幾乎所有初學者都必須學會此程式。

習慣上,九九乘法表大多是直列式排序,這剛好與電腦顯示方法相反。除非是繪圖程式,否則一般文字模式都是一行顯示完再接著顯示下一行,無法做到顯示下一行後再回到上一行。因此,列印九九乘法表時也須依照表內文字,一行接一行列印。

5-11 為此程式的概要說明,每行由 2 9,共有 8 句文字,我們利用 i 做為指標變數(j = 2, 3, 4, …, 9);相對的,每列有 9 句文字,我們利用 j 做為指標變數(i = 1, 2, …, 9)。程式必須一行接一行列印,總共有 9 行,因此,必須外迴圈須以 i 做為指標;每行列印 8 句,因此內迴圈變數為 j;每句文字是 j * i = ij

5-11 九九乘法表製作技巧

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

//Ex5_9.java

 

public class Ex5_9 {

    public static void main(String args[]) {

        for (int i=1; i<=9; i++) {

             for (int j=2; j<=9; j++)

                System.out.printf("%d*%d=%2d\t", j, i, i*j);

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

        }

     }

}

(D) 程式重點分析:

(1) 5~9 for (i=1; i<=9; i++) { …}。外迴圈指定九九乘法表的行數。

(2) 6~7 for (j=2; j<=9; j++) System.out.printf( …)。內迴圈。

(3) 7 System.out.printf("%d*%d=%2d\t", j, i, i*j)。製作九九乘法語句的格式,其中 %2d 表示利用兩個字元格式印出整數。

(4) 8 System.out.printf(“\n”);。每行最後加入跳行的控制字元。

5-5-7 自我挑戰:while 列印九九乘法表

A)程式功能:PM5_8.java

請利用 while 敘述句製作列印九九乘法表程式。

B)製作技巧提示:

無論採用何種敘述句(forwhiledo/while)製作九九乘法表,技巧都是相同的,如圖 5-# 所示。利用 while 敘述句的提示如下:

int i = 1;

while (i <= 9) {

int j = 2;

while (j <= 9 ) {

System.out.printf("%d*%d=%2d\t", j, i, i*j);

j++;

}

i++;

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

}

C)腦力激盪:

請利用 do/while 敘述句,製作列印九九乘法的程式。

翻轉工作室:粘添壽

 

Java 程式設計(一) 含程式邏輯

 

 

翻轉電子書系列: