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

 

5-6 迴圈中斷與連續

內容:

  • 5-6-1 break 敘述的流程

  • 5-6-2 continue 敘述的流程

  • 5-6-3 範例研討:尋找質數程式

  • 5-6-4 自我挑戰:心算過五關遊戲

除了條件判斷是否繼續重複執行迴圈實體(body)外,在迴圈實體內也依照某些因素決定是否繼續執行實體敘述,或直接跳離開該迴圈敘述。一般程式語言都有提供 break continue 兩種敘述,執行到前者敘述時,則直接中斷該迴圈敘述;後者是立即再回到迴圈判斷式,再決定是否繼續執行迴圈實體。以下分別介紹這兩種敘述語法。

5-6-1 break 敘述的流程

無論在迴圈(forwhiledo/while)或『方法』(method)的實體區塊內,執行到 break 敘述後,立即停止繼續往下執行,並離開該迴圈或方法。如果是多重迴圈的話,僅會離開 break 敘述所屬迴圈,繼續下一個外圍迴圈敘述。圖 5-12 break 敘述的流程,我們以 while 迴圈為例,當程式執行到 break 敘述後則跳離開,繼續 while 敘述後的下一個敘述句。

5-12 break 敘述的流程圖

5-6-2 continue 敘述的流程

程式執行到 continue 敘述後,立即停止執行迴圈實體其他敘述,強迫回到迴圈的起頭,再測試條件判斷敘述,決定是否繼續重複執行迴圈。圖 5-13 是以 while 迴圈為例,當執行到 continue 後,立即回到 while 敘述起頭,再判斷是否繼續執行。(請參考本書 7-4-2 節(Ex7_3.java)範例介紹)

5-13 continue 敘述的流程圖

5-6-3 範例研討:尋找質數程式

A)程式功能:Ex5_10.java

請編寫能找出 100 以內質數的程式,期望操作介面如下:

列印出 1~100 間的質數如下:

1  2  3  5  7  11  13  17  19  23 

29  31  37  41  43  47  53  59  61  67 

71  73  79  83  89  97

B)製作技巧研討:

『質數』表示僅能 1 和自己整除的數,即是不能被其他小於自己的數整除。譬如:2 僅能被 1 2 整除,其為質數,357 皆是如此。

4 可以被 2 整除,所以不是質數。由此可見 68910...等偶數皆是如此,通通不是質數。

吾人編寫找出 1 ~ 100 之間(利用 while 迴圈達成)質數的方法是,利用一個旗號 prime 表示是否被測試數字是否為質數。首先假設被測試數字是質數,接著該數(如 7)再除以 2 到自己減 1 (如 6,利用 while 迴圈達成)其中任一個數可以整除則標示不是質數(prime=0)就離開;否則即為質數(prime=1)。離開回圈後,利用 prime 內容判斷該數是否為質數,如是則印出。

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

27

28

29

30

31

//Ex5_10.java

/* 請編寫能找出100以內質數的程式 */

 

public class Ex5_10 {

    public static void main(String args[]) {

        final int limit = 100;      // 設定尋找最高數值

        int prime;                  // 質數旗號

        int i=1;

        int count=0;

        System.out.printf("列印出 1~100 間的質數如下:\n");

        while (i <= limit) {

            prime = 1;

            int j = 2;

            while (j <= i-1 ) {

                if ((i%j) == 0) {     // 判斷是否可以整除

                    prime = 0;

                    break;

                }

                j++;

            }

            if (prime == 1){

                System.out.printf("%d  ", i);

                count = count + 1;

                if (count%10 == 0)            // 10 個數跳行

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

            }

            i++;

        }

     }

}

(D)程式重點說明:

(1) 7 ~ 22 int i=1; while(i < limit) { ….. i++;}。外回圈功能是,指定質數尋找範圍,由 1 limit=100)之間。

(2) 10~17 int j=2; while(j<=i-1) { … j++;}。內迴圈功能是所指定的數(i),除以由 2 到自己減一(i-1)。

(3) 12~15 if( i%j ) == 0{ …}。可以整除的話,則不是質數(prime=0),並中斷(break)往下繼續找。

(4) 18~19 if (prime == 1) System.out.printf(…)。如果是該數值(i)是質數的話,則印出。

5-6-4 自我挑戰:心算過五關遊戲

A)程式功能:PM5_9.java

心算教室為了鼓舞小朋友學習心算的興趣,期望製作一套『心算過五關遊戲』,讓小朋友自行測試心算程度如何。系統中包含 5 關兩數相加,學生輸入正確表示通過該關。第一關為兩個 0~5 之間數字相加、第二關為 0~25 之間數字相加、第三關為 0 ~ 5*5*5 之間、第四關是 0 ~ 5*5*5*5、第五關是 0 ~ 5*5*5*5*5,期望操作介面如下:

情況一:通過五關

== 歡迎進入心算過五關評量系統 ==

1 關輸入 2 + 0 = 2

2 關輸入 17 + 16 = 33

3 關輸入 120 + 84 = 204

4 關輸入 194 + 321 = 515

5 關輸入 2477 + 1769 = 4246

恭喜您 !! 已通過五關測試

情況二:僅通過第二關

== 歡迎進入心算過五關評量系統 ==

1 關輸入 1 + 3 = 4

2 關輸入 24 + 9 = 33

3 關輸入 117 + 90 = 205

錯了!! 答案是 207

您已完成第 2

加油 !! 再來一次

B)製作技巧提示:

吾人利用虛擬碼提示程式重點,如下所示:

導入相關套件(import java.util.*;;

….

設定亂數基數(base = 1);

設定通過五關旗號(flag = 1

for (count = 1; count <= 5; count++) {

累成亂數基數(base = base*5

產生第一個 0 ~ base 亂數(ran1 = random.nextInt(base);

產生第二個亂數(ran2;

計算正確答案(value = ran1 + value2

顯示兩亂數並要求輸入答案(ran1, ran2;

讀入學生答案(answer = keyin.nextInt();

if (answer != value)

顯示正確答案,及告知通過幾關(count-1);

取消通過旗號(flag = 0);

中斷程式(break;

}

if (flage == 1)

顯示 "恭喜通過五關測試"

else

顯示 "加油 !! 再來一次"

翻轉工作室:粘添壽

 

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

 

 

翻轉電子書系列: