第8章 迴圈與訊息視窗 [利息計算程式和猜數字遊戲]
Contents 8-1 For/Next計數迴圈 8-2 訊息視窗與對話方塊 8-3 Do/Loop條件迴圈 8-4 巢狀迴圈 8-5 跳出與繼續迴圈
8-1 For/Next計數迴圈-語法 Visual Basic語言的For/Next迴圈是一種計數迴圈, 在迴圈本身語法就可自行維護計數器變數,只需指 定範圍和增量,就可重複執行固定次數的程式碼, 直到到達結束條件。其語法如下所示: For 變數 = 起始值 To 終止值 Step 增量值 程式區塊 Next 變數 上述迴圈「變數」是計數器變數,其範圍是從「起 始值」到「終止值」,每次增加「增量值」的值, 預設值是1,其執行迴圈次數以增量值1來說就是: 「終止值」-「起始值」+ 1次,其中Next關鍵字後 的「變數」可以省略。
8-1 For/Next計數迴圈-範例 例如:使用For/Next迴圈來計算1萬元5年複利18%的本利和,如下所示: Dim intI, intYear As Integer Dim dblTotal As Double = 10000 Dim dblRate As Double = 0.18 intYear = 5 For intI = 1 To intYear dblTotal += dblTotal * dblRate Next intI
8-1 For/Next計數迴圈-Visual Basic專案 Visual Basic專案:Ch8-1\利息計算程式 在Windows應用程式使用TextBox控制項輸入本金、利率和年限後,即可使用For/Next迴圈計算到此年限複利的本利和,然後在下方Label控制項顯示本利和。其執行結果如下圖所示:
8-2 訊息與輸入視窗-MsgBox訊息視窗(語法) Visual Basic語言的MsgBox()函數可以顯示訊息視窗,提供使用者錯誤訊息或是非題的選擇。例如:確認操作,函數的語法如下所示: MsgBox(提示訊息, [樣式, 視窗標題]) 上述函數參數的最後2個並非必須參數,可以不用指定。各參數的說明,如下所示: 提示訊息:顯示在訊息視窗的訊息字串,MsgBox()函數至少需要提供此參數。 樣式:指定訊息視窗顯示哪些按鈕、圖示和預設按鈕的樣式,這是MsgBoxStyle列舉常數。 視窗標題:顯示在訊息視窗上方標題列的字串,如果沒有指定,預設就是專案名稱。
8-2 訊息與輸入視窗-MsgBox訊息視窗(範例) ret = MsgBox(dblTotal.ToString("C"), _ msgStyle, "本利和") 第1個參數是文字方塊的內容,第2個參數msgStyle 是顯示樣式的整數值,使用的是列舉常數,如果不 只一個,請使用加法來計算樣式值,如下所示: msgStyle = MsgBoxStyle.OKCancel + _ MsgBoxStyle.Information 上述樣式值是顯示「確定」和「取消」鈕和「!」 圖示,最後1個參數是訊息視窗的標題文字。
8-2 訊息與輸入視窗-MsgBox訊息視窗(傳回值) MsgBox()函數如果有傳回值,傳回值就是使用者按下的哪一個按鈕,即MsgBoxResult列舉常數,其說明如下表所示:
8-2 訊息與輸入視窗-InputBox輸入視窗(語法) InputBox輸入視窗可彈出一個視窗來讓使用者輸入資料,在功能上如同文字方塊控制項。InputBox()函數的語法如下所示: InputBox(提示訊息, [標題文字, 預設值, 位置x, 位置y]) 上述函數的最後4個參數並非必須參數,可以不用指定。各參數的說明,如下所示: 提示訊息:顯示在輸入視窗的字串,InputBox()函數至少需要提供此參數。 標題文字:顯示在標題列的文字內容。 預設值:輸入資料的預設值。 位置x、位置y:輸入視窗在螢幕上顯示的位置,沒有指定,預設值是桌面正中央。
8-2 訊息與輸入視窗-InputBox輸入視窗(範例) strValue = InputBox("請輸入金額?", "輸入金額") 上述程式碼的InputBox()函數只有前2個參數,傳回 值是使用者輸入的資料,按下「確定」鈕傳回輸入 字串;「取消」鈕傳回空字串。
8-2 訊息與輸入視窗- Visual Basic專案 Visual Basic專案:Ch8-2\利息計算程式 這Windows應用程式是修改第8-1節的【利息計算程式】,改為使用InputBox()函數輸入本金,MegBox()函數顯示本利和。其執行結果如下圖所示:
8-3 Do/Loop條件迴圈-說明 在Visual Basic語言的條件迴圈結構就是Do/Loop迴圈,以條件測試的位置分成兩種,如下所示: 前測式重複結構:在迴圈開始使用While或Until測試迴圈條件。其語法如下所示: Do [While | Until] 條件 程式區塊 Loop 後測式重複結構:在迴圈結尾使用While或Until測試迴圈條件,因為是在結尾測試條件,所以迴圈至少會執行一次。其語法如下所示: Do Loop [While | Until] 條件
8-3 Do/Loop條件迴圈-Do While/Loop迴圈 Do/Loop迴圈可以使用While條件在迴圈開頭檢查,開頭檢查的目的是檢查是否允許進入迴圈,當While的測試條件成立才允許進入迴圈。例如:計算1萬元5年複利18%的本利和,如下所示: intI = 1 dblTotal = 10000 dblRate = 0.18 Do While intI <= 5 dblTotal += dblTotal * dblRate intI = intI + 1 Loop
8-3 Do/Loop條件迴圈-Do Until/Loop迴圈 Do/Loop迴圈如果使用Until條件在迴圈開始檢查,迴圈是執行到條件成立為止,如果條件不成立就進入迴圈。例如:計算1萬元5年複利18%的本利和,如下所示: intI = 1 dblTotal = 10000 dblRate = 0.18 Do Until intI > 5 dblTotal += dblTotal * dblRate intI = intI + 1 Loop
8-3 Do/Loop條件迴圈- Do/Loop While迴圈 Do/Loop迴圈可以使用While條件在迴圈結尾檢查,此時Do/Loop迴圈至少會執行一次。例如:計算1萬元5年複利18%的本利和,如下所示: intI = 1 dblTotal = 10000 dblRate = 0.18 Do dblTotal += dblTotal * dblRate intI = intI + 1 Loop While intI <= 5
8-3 Do/Loop條件迴圈- Do/Loop Until迴圈 intI = 1 dblTotal = 10000 dblRate = 0.18 Do dblTotal += dblTotal * dblRate intI = intI + 1 Loop Until intI > 5
8-3 Do/Loop條件迴圈-Visual Basic專案 Visual Basic專案:Ch8-3\利息計算程式 這個Windows應用程式是修改第8-1節的【利息計算程式】,改為使用Do/Loop迴圈來計算本利和。其執行結果如下圖所示:
8-4 巢狀迴圈-說明 巢狀迴圈是在迴圈之中擁有其他迴圈結構,例如:在For/Next迴圈內擁有For/Next和Do/Loop迴圈。 同樣的,Do/Loop迴圈內也可以擁有For/Next和Do/Loop迴圈。
8-4 巢狀迴圈-範例 Visual Basic語言的巢狀迴圈可以混合For/Next和 Do/Loop迴圈結構,例如:在For/Next迴圈內擁有 Do/Loop Until迴圈,如下所示: ‘ 第一層 For intI = 1 To 9 ' 第二層 intJ = 1 Do …………… intJ += 1 Loop Until intJ > 9 Next intI
8-4 巢狀迴圈-範例說明 巢狀迴圈共有兩層,在第1層的For/Next迴圈執行9次,第二層Do/Loop Until迴圈如果也執行9次,兩層迴圈總共可執行81次,如下表所示:
8-4 巢狀迴圈-再談利息的計算 本節前建立的【利息計算程式】屬於複利計算程式, 其每一年的利息會滾入本金來計算下一年的利息, 例如:信用卡或現金卡的循環利息,就是使用複利 方式來計算利息,所以利滾利的速度非常的快。 之前範例是使用迴圈來計算本利和,事實上,可以 將它改寫成指數運算的複利公式,如下所示: Total = Amount * (1 + Interest) ^ Years
8-4 巢狀迴圈-Visual Basic專案 Visual Basic專案:Ch8-4\利息計算程式 在Windows應用程式使用TextBox控制項輸入本金、利率範圍和年限範圍後,使用巢狀迴圈配合複利公式來計算不同年限和利率的本利和。其執行結果如下圖所示:
8-5 跳出與繼續迴圈 8-5-1 Exit跳出迴圈 8-5-2 Continue繼續迴圈
8-5-1 Exit跳出迴圈-說明 不論是For/Next或Do/Loop迴圈,都可使用Exit關鍵 字來結束迴圈的執行,就算尚未到達結束迴圈條件, 也一樣可強迫跳出迴圈,馬上結束迴圈執行。 以Do/Loop迴圈為例,因迴圈需要自行確認迴圈是 否能夠結束。換言之,如果沒有使用While或Until 在迴圈頭尾測試條件,單純Do/Loop迴圈就是一個 無窮迴圈,此時就可以使用Exit Do來結束迴圈。
8-5-1 Exit跳出迴圈-範例 Do While/Loop迴圈的If Then條件成立時,就可以執行Exit Do來中斷迴圈的執行,如下所示: Do While True …. If str = "" Then txtOutput.Text &= "使用者放棄..." & _ vbNewLine Exit Do End If Loop
8-5-1 Exit跳出迴圈-Visual Basic專案 Visual Basic專案:Ch8-5-1\猜數字遊戲 在Windows應用程式建立猜數字遊戲,程式使用亂數取得1~100間數值,使用者在InputBox輸入視窗輸入猜測的數字後,程式就會回應猜測數字太大或太小,直到使用者猜到數字為止。其執行結果如下圖所示:
8-5-2 Continue繼續迴圈-說明 Continue關鍵字可讓使用者不用執行完整個迴圈的 程式碼,就可以馬上執行下一次迴圈。 Continue For可以馬上執行下一次For/Next迴圈; Continue Do繼續下一次Do While/Loop迴圈的執行。
8-5-2 Continue繼續迴圈-範例 例如:在猜數字遊戲的Do While/Loop主迴圈,使用If Then條件來檢查數字是否在範圍中,如下所示: Do While True ……… If number < 1 Or number > 100 Then txtOutput.Text &= "範圍錯誤: " & _ number & vbNewLine Continue Do End If Loop
8-5-2 Continue繼續迴圈-Visual Basic專案 Visual Basic專案:Ch8-5-2\猜數字遊戲 這個Windows應用程式是修改第8-5-1節的【猜數字遊戲】,新增If Then條件來檢查輸入數字是否在範圍內,若非,則使用Continue Do馬上執行下一次迴圈。在執行結果按【開始遊戲】鈕開始猜數字遊戲,可以看到InputBox輸入視窗。