290 likes | 575 Views
第 6 章 迴圈結構. 6-1 計數迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-5 跳出與繼續迴圈 6-6 錯誤處理. 6-1 計數迴圈. 6-1-1 For To/Next 迴圈 6-1-2 For Step/Next 迴圈. 6-1-1 For To/Next 迴圈 - 語法. For To/Next 迴圈可以執行固定次數的迴圈,預設每次增加 1 ,如果到達結束條件,就結束迴圈執行。其語法如下所示: For 變數 = 起始值 To 終止值 程式區塊 Next 變數
E N D
第6章 迴圈結構 • 6-1 計數迴圈 • 6-2 條件迴圈 • 6-3 巢狀迴圈 • 6-4 While/End While迴圈 • 6-5 跳出與繼續迴圈 • 6-6 錯誤處理
6-1 計數迴圈 • 6-1-1 For To/Next迴圈 • 6-1-2 For Step/Next迴圈
6-1-1 For To/Next迴圈-語法 • For To/Next迴圈可以執行固定次數的迴圈,預設每次增加1,如果到達結束條件,就結束迴圈執行。其語法如下所示: For 變數 = 起始值 To 終止值 程式區塊 Next 變數 • 上述迴圈的「變數」是計數器變數,其範圍是從「起始值」到「終止值」,每次增加1,執行迴圈的次數是:「終止值」-「起始值」+1次,其中Next關鍵字後的「變數」可以省略。
6-1-1 For To/Next迴圈-語法 • 例如:計算6加到15總和的迴圈,如下所示: Dim intI, intTotal As Integer For intI = 6 To 15 intTotal = intTotal + intI Next intI • 上述程式碼是從6加到15以計算總和,變數intI值依序為6、7、8、9、..和15,總共執行15-6+1共10次迴圈。
6-1-2 For Step/Next迴圈 • For/Next迴圈的增量如果不是1,我們可以使用Step關鍵字指定每次增加或減少的量。如果使用負數值,表示每次是將計數器變數減掉Step值,此時For Step/Next迴圈,如下所示: For intI = 100 To 1 Step -1 intTotal = intTotal + intI Next intI • 上述程式碼倒過來從100加到1,變數intI值依序100、99、98、97、…、3、2、1共執行100次迴圈,其流程圖和上一節圖例相似,只是每次增加量改為-1。
6-2 條件迴圈 • 6-2-1 Do While/Loop迴圈 • 6-2-2 Do Until/Loop迴圈 • 6-2-3 Do/Loop While迴圈 • 6-2-4 Do/Loop Until迴圈
6-2-1 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
6-2-2 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
6-2-3 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
6-2-4 Do/Loop Until迴圈-說明 • Do/Loop迴圈如果使用Until條件在迴圈結尾檢查,迴圈也一樣至少執行一次。例如:計算1萬元5年複利18%的本利和,如下所示: intI = 1 dblTotal = 10000 dblRate = 0.18 Do dblTotal += dblTotal * dblRate intI = intI + 1 Loop Until intI > 5
6-3 巢狀迴圈 • 6-3-1 For/Next巢狀迴圈 • 6-3-2 混合的巢狀迴圈
6-3-1 For/Next巢狀迴圈-說明 • For/Next巢狀迴圈是在For/Next迴圈中,擁有其他For/Next迴圈(因為不用自行處理計數器變數),例如:二層巢狀迴圈,如下所示: ' 第一層 For intI = 1 To 9 ' 第二層 For intJ = 1 To 9 ……… Next intJ ……… Next intI
6-3-1 For/Next巢狀迴圈-執行次數 • 巢狀迴圈共有兩層,在第1層的For/Next迴圈執行9次,第二層For/Next迴圈如果都執行9次,兩層迴圈總共可執行81次,如下表所示:
6-3-2 混合的巢狀迴圈 • 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
6-4 While/End While迴圈-說明 • While/End While迴圈源於舊版VB6的While/Wend迴圈,它是一種在迴圈開頭檢查的迴圈,例如:從1加到10的程式碼,如下所示: Dim total As Integer = 0 Dim counter As Integer = 1 While counter <= 10 total += counter counter += 1 End While
6-4 While/End While迴圈-階層函數 • 在本節的範例程式是說明迴圈在數學運算的運用,可以計算階層函數的值,階層函數N!,例如:準備計算4!的值,從上述定義N>0,可以使用N!定義的第二條計算階層函數4!的值,如下所示: 4!=4*3*2*1=24
6-4 While/End While迴圈-階層函數的迴圈 • 換句話說,我們可以使用迴圈來計算階層函數的值,以While/End While迴圈為例,如下所示: Dim total As Integer = 1 Dim counter As Integer = 4 While counter >= 1 total *= counter counter = counter - 1 End While
6-5 跳出與繼續迴圈 • 6-5-1 Exit For跳出迴圈 • 6-5-2 Exit Do跳出迴圈 • 6-5-3 Continue繼續迴圈
6-5-1 Exit For跳出迴圈 • For/Next迴圈如果尚來到達結束條件時,就可以使用Exit For強迫跳出For/Next迴圈,馬上結束迴圈的執行,如下所示: For intI = 1 To 100 Step 1 … If amount <= 0 Then Exit For End If … Next
6-5-2 Exit Do跳出迴圈 • 對於Do/Loop迴圈來說,我們需要自行確認迴圈能夠結束。換句話說,如果沒有使用While或Until在迴圈頭尾測試條件,單純Do/Loop迴圈是一個無窮迴圈。 • 如果Do/Loop迴圈沒有不指定終止條件,我們可以使用Exit Do來結束迴圈,如下所示: Do …. If str = "" Then Exit Do End If …. Loop
6-5-3 Continue繼續迴圈 • Visual Basic 2005新增Continue關鍵字,可以讓我們不用執行完整個迴圈的程式碼,就可以馬上執行下一次迴圈。Continue For可以馬上執行下一次For/Next迴圈;Continue Do繼續下一次Do While/Loop迴圈的執行。例如:計算指定範圍的奇數和,如下所示: Do While i < intMax i = i + 1 If i Mod 2 = 0 Then Continue Do End If total = total + i Loop
6-6 錯誤處理-說明 • 錯誤處理是指在程式執行時,如果發生不正常執行狀態時,我們可以在程式碼處理這些錯誤。錯誤處理的目的是為了讓程式能夠更「強壯」(Robust)。 • 當程式遇到不尋常情況,也不會造成程式「崩潰」(Crashing),進而導致整個系統當機的情況。
6-6 錯誤處理-架構 • Visual Basic 2005提供結構化的錯誤處理敘述,即Try/End Try,其語法如下所示: Try ' 測試的錯誤程式碼 程式區塊 Catch e As Exception ' 錯誤處理的程式碼 程式區塊 Finally 程式區塊 End Try
6-6 錯誤處理-架構說明 • Try程式區塊:在Try和Catch關鍵字間的程式區塊是Visual Basic需要執行錯誤處理的程式碼,也就是預期可能產生錯誤的程式碼。 • Catch程式區塊:如果Try程式區塊的程式碼發生錯誤,在Catch到Finally關鍵字間的程式區塊將會傳入參數e的Exception例外物件,可以在此區塊顯示錯誤資訊,或是建立錯誤處理的補救程式碼。 • Finally程式區塊:選擇性的程式區塊,不論錯誤是否產生,都會執行此區塊的程式碼,通常是用來作為善後用途的程式碼。