Java 程式設計(一) :第 五章 重複性流程 下一頁 |
第五章 重複性流程 5-1 重複性流程簡介
重複性流程表是在符合某一條件下,重複的執行特定『敘述區塊』(Body),又稱之為『迴圈』。執行方法是,首先判斷條件是否成立,如成立則執行迴圈一次;否則跳過迴圈而不執行。迴圈與選擇敘述之間最大不同是,條件成立的話,選擇敘述僅執行一次;迴圈敘述則不然,執行『敘述區塊』之後,會再回來測試條件是否再成立,如成立則再執行迴圈一次,如此重複執行迴圈,一直到條件不成立才結束。如果條件一直都成立的話,則程式可能永遠無法離開迴圈敘述,一般程式語言都有下列三種迴圈: (1) for 迴圈(for loop)。 (2) while 迴圈(while loop)。 (3) do/while 迴圈(do/while loop)。 雖然以上三種迴圈都可以達到一般重複敘述的功能,但之間還是有稍微不同的地方,並沒有孰好孰壞的問題,完全看程式設計師自己喜好決定。 5-2 for 迴圈控制 5-2-1 for 迴圈敘述 最典型的迴圈功能莫過於 for 迴圈(for loop)了,它明確表示迴圈可能出現的狀況。圖 5-1 為 for 迴圈的流程圖,首先設定初始條件,接著再測試條件是否成立,條件不成立(no)則立即結束該敘述;成立(yes)的話,則執行 for 敘述區塊。執行完畢後,則計算條件參數的『增減量』,接著再次測試條件是否成立(yes/no);如此重複執行 for 敘述區塊,一直到條件不成立(no)才結束該 for 敘述。
圖 5-1 for 敘述的流程圖 為了達成條件敘述的演算功能,在 for 敘述內必須指定一個或一個以上的條件變數,並初始設定條件變數內容、測試內容是否滿足條件、以及增減變數內容的數值。For 敘述句的語法與範例如下:
For 敘述的小括號內包含 3 個敘述句,之間以『分號』(;)分隔。第一個敘述句為條件變數的初值設定(如 k = 1);第二個為測試變數內容是否滿足條件(如 k < =10);第三個敘述句為執行 for 區塊敘述(如 sum = sum + k)後,再針對條件變數做增量或減量的變動(如 k = k +1)。另一重點,如果區塊敘述超過一行的話,則必須利用左右大掛號包起來({ ….})。 在上述範例中,變數 k 作為 for 迴圈的計數基數,此變數有僅運用於 for 迴圈內,完成迴圈敘述後,該變數即失效了。許多情況下,為了減少變數宣告數量,期望宣告判斷變數僅存活於迴圈內就好,離開迴圈該變數自動消失,而將計數(或判斷)變數宣告成迴圈區域變數(本書第 6-3 節介紹)。宣告方法是在 for 迴圈控制敘述的小掛號內指定,如 for(int k=0; k<=10; k++) { …}。 5-2-2 範例研討:連續累加程式 (A)程式功能: 請製作一只由 1 累加到 10(sum = 1 + 2 +3 + … + 10)的程式,並輸出其運算結果;期望操作介面如下:
(B)製作技巧研討: 計算大串無聊複雜的數字,是『計算機』(Computer)最主要的能耐,由 1 加到 10、100、1000、10000...等,對自然人來說有差別,對程式設計師來講卻都是一樣的,只要下對指令,電腦會不厭其煩地默默工作,絕不偷懶。累加程式需準備一個稱之為『累積器』(Accumulator,如 sum)的箱子,將連續數字累積加進去(sum = sum + count),如圖 5-2 所示。
圖 5-2 累積器功能 吾人可利用 for 敘述句來製作連續由 1 到 10 重複運作,宣告產生一個整數變數 sum 作為累加器,並設定初始值為 0(sum = 0)。再利用 count 變數作為計數指標(count = 1, 2, …, 10),也作為條件判斷數值。首先將指標設定初始值 1(count = 1)、運作到 10 為止,表示滿足 count <= 10 條件,需重複執行迴圈,指標每次增值 1(count = count + 1);條件成立則執行『敘述區塊』,其內容為 sum = sum + count。將上述技巧套入 for 敘述句內,如圖 5-3 所示。
圖 5-3 連續累加流程圖 吾人將圖 5-3 運作流程,製表如下所示: 吾人將圖 5-3 運作流程,製表如下所示:
(C)程式範例:Ex5_1.java
(D)程式重點分析:
5-2-3 自我挑戰:累加程式變化 累加程式最能表現出程式設計的特性。在現實環境中,資料越多或數值越大的情況下,處理事物起來就會越困難;但利用電腦處理則不然,無論處理資料多寡,都是一樣的,只不過時間較長一點而已(如電腦速度過快,也不會有很大的感覺)。以銀行查詢哪些客戶存款不足為範例,如利用人工查詢,當然客戶越多則越困難;但如利用電腦查詢,無論客戶有 100、1000、或 10000 筆,對程式設計師而言都沒什麼分別。我們利用 Ex5_1 範例,增加一點變化,吾人就可以瞭解其中奧妙。 (A)程式變化(一):PM5_1_1.java 功能:修改 Ex5_1.java 程式中一個地方,使其功能為 sum = 1 + 2, …, 1000,執行結果如下:
(B)程式變化(二):PM5_1_2.java 功能:修改 Ex5_1.java,使其功能為 sum = 100 + 99 …, + 1,執行結果如下: sum = 100 + 99 …, + 1,執行結果如下:
(C)程式變化(三):PM5_1_3.java 功能:修改 Ex5_1.java,使其功能為 sum = 0 + 2 + 4+ ,…, 1000,其結果如下: 其結果如下:
(D)程式變化(四):PM5_1_4.java 功能:修改 Ex5_1.java,使其功能為 sum = 1 + 3 + 5 +,…, 999,執行結果如下:
5-2-4 範例研討:連續累乘程式 (A)程式功能:Ex5_2.java 請編寫一個 total = 1 * 2 * 3 * … *10(10!)程式,並顯示每次累乘的計算結果。期望操作介面模式如下:
(B)製作技巧研討: 其實,連續累乘程式與累加程式非常相同,都是利用一個累積器,連續累積或累乘進入;兩者之間最大不同是,累加程式的累積器初始值必須設定為 0(sum = 0);累乘程式的累積器必須設定為 1(total = 1),否則任何數與 0 相乘結果都是 0。另外,累乘計算的敘述句為 total = total * count。吾人利用虛擬碼規劃程式設計概要,如下:
(C)程式範例:
(D)程式重點分析:
5-2-5 自我挑戰:九九乘法評分系統 (A)程式功能:PM5_2.java 請幫國民小學老師製作一套九九乘法的測試系統,系統會連續出現 10 題兩個 1 ~ 9 之間亂數,學生輸入自己計算相乘的結果,最後評定學生得分多寡(每題 10 分)。期望操作介面如下:
(B)製作技巧提示: 系統要求連續出現 10 次九九乘法練習題,這方面可利用 for 迴圈達成,其中,計數器(count)由 1 到 10,每次增量 1(count++,或 count = count + 1)。迴圈內必須產生兩個 1 ~ 9 的亂數,如此需要導入 java.util.Random 套件;另外,也需要導入鍵盤輸入套件,吾人可選用 java.util.Scanner 套件。兩套件都是屬於 java.util 套件底下,因此只要導入該套件即可,即是『import java.util.*;』。系統虛擬碼如下:(參考 Ex4_3.java)
|
翻轉工作室:粘添壽
Java 程式設計(一) 含程式邏輯
翻轉電子書系列:
|