3-3  巢狀迴圈敘述

        如果將迴圈的語法合併使用,例如「for()」敘述中再包含另一個「for()」,甚至是「while」敘述,程式就現成了巢狀迴圈的架媾了。現實生活中,不乏有巢狀迴圈的使用時機,例如:如果我們要計算某一公司的各月份,各部門的銷售金額的總和,參考下表:

 

部門1

部門2

部門3

一月份

205

502

420

二月份

286

588

411

…………………………………………………………………………………….......

十一月份

254

600

498

十二月份

267

550

432

        設計程式時,我們可以使用月份為單位,先依次將該月份中各部門的銷售金額加至總和之中,再以相同的方式計算下一個月份各部門的銷售金額。

       程式的寫作如同:

for  (month =1; month <= 12; month++)  {

     for (dept = 1;dept <= 3;dept ++)  {

          sum = sum + dept;

      }

}

        從上一個範例的判紹中,我們可以看出巢狀迴圈的使用模式。再來,讓我們以一個實際完成的範例程式來判紹巢狀迴圈的執行情形。數學運算中,使用巢狀迴圈的最典型的範例是列印九九乘法表的內容,以四是程式碼的內容:

程式3-17hap3\ NestFor1.java

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

public class NestFor1 {

        public static void main (String []ar       gs){        

          int i,j;

                for (i=1; i<= 9 ; i++) {   //注意執行後,i的值

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

                                System.out.print(i + "*" + j + "=" + i * j + "\t");

                        }

                        System.out.println();

                }

                System.out.println("程式執行完畢");

        }

}

程式的執行結果為:

         範例程式中共有兩層迴圈,程式的第6行進入外層迴圈,程式6789行是屬於外層迴圈的「重複執行運算式」。在這幾行的執行過程中,「i」的值都會保持不變,除非程式重新執行第5行的敘述,所以,執行結果中每一行「i」的值都是不變的。程式的第678行是內層迴圈的區段,程式的第7行將「i」、「j」值的變化情形,第7行程式中的「print」方法會顯示出內容,但不換行。

某些情況下,外層迴圈的變數值也可以用來控制內層迴圈的變數值。例如:假設我們要列印這樣的圖形:

 

*

**

***

****

*****

程式需要列山5行的圖形,每行需要列印出的「*」的個數和所在的行數的序號相同。這種情形下,我們可以使用外層迴圈的行數序號的值來控制內層迴圈的變數值,例如:

程式3-18hap3\ NestFor2.java

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

public class NestFor2 {

        public static void main (String []args) {

                int i, j;             //初始化i, j

 

                for (i=1; i<= 5 ; i++) {   //注意執行後,i的值

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

                                System.out.print("*");

                        }

                        System.out.println();

                }

                System.out.println("程式執行完畢");

        }

}

程式執行結果為:

         注意程中的第6行中「j」的結束條件是以「i」的值為依據,當「i」值為1時,該行只會顯示出一個「*」,而「i」值為2時,該行會顯示出兩個「*….