首页 > 代码库 > Visual Basic快捷教程——流程控制

Visual Basic快捷教程——流程控制

美籍匈牙利数学家冯·诺依曼于1946年提出“程序存储,顺序执行”的观念,为现代计算机奠定了重要基础。这一观点认为:应该把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。电子计算机的数制宜采用二进制;计算机应该按照程序顺序执行。所以现在开发人员在编写的程序代码时,其实都隐含地认为计算机将来会一行一行按顺序来执行这些指令。但是在顺序执行的过程中,有时我们希望计算机根据条件判断来选择性地执行(或者不执行)一些代码——这时就需要用到选择结构(或称分支结构)。另外一些时候,我们希望计算机能够(有条件地)重复地执行某一段代码——这时就需要用到循环结构。


这里所说的顺序执行、选择结构,以及循环结构统称为程序的流程控制。本文主要介绍在Visual Basic中与流程控制有关的一些语法规则。顺序执行是程序执行的默认规则,本文对此将不多赘述。


一、选择结构


Visual Basic中用来实现选择结构的方式包括:If、Select/Case、Switch、Choose等4这种。


1. If 语句

基于 If 语句实现的选择结构主要有三种形式:

  • If ... Then ...
  • If ... Then ... Else ...
  • If ... ElseIf ... Else ...

下面我们逐个详解。

1)If ... Then ... 是属于单向选择结构,它会潘丹条件表达式(condition)是否为真,若条件表达式为真,则会执行该分支的语句块(statements);否则,就不执行任何操作。Visual Basic中If ... Then ...的语法规则如下:

If 条件表达式 Then
    语句块
End If
下面通过一个判定用户是否要退出程序的例子来演示 If ... Then ... 在实际中的使用。

Public Class Form1

    Private Sub Button_Exit_Click(sender As Object, e As EventArgs) Handles Button_Exit.Click

        Dim Result As MsgBoxResult
        Result = Interaction.MsgBox("您确定要退出本程序吗?", vbOKCancel+vbQuestion, "提示")

        If Result = vbOK Then
            End
        End If

    End Sub

End Class
执行上述代码,所得之结果如下所示。当用户单击【退出程序】按钮时,程序会弹出一个消息对话框询问用户是否真的要退出程序。如果用户选择【确定】,那么程序将随机退出。如果用户选择【取消】,程序将继续执行。

技术分享

2)If ... Then ... Else 是一种双向选择结构,它会判断条件表达式是否为真,如果条件表达式为真,则程序会执行为真的分支语句块。否则若条件表达式为假,那么程序便会执行为假的分支语句块。Visual Basic中If ... Then ... Else 的语法规则如下:

If 条件表达式 Then
    条件表达式为真的语句块
Else
    条件表达式为假的语句块
End If
下面通过一个判定用户输入的年份是否为闰年的示例程序来演示 If ... Then ... Else 在实际中的使用。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If TextBox_Year.Text Mod 4 = 0 Then
            MsgBox("公元" + TextBox_Year.Text + "年是闰年。",
                   MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "判定结果")
        Else
            MsgBox("公元" + TextBox_Year.Text + "年不是闰年。",
                   MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "判定结果")
        End If

    End Sub
End Class
执行上述代码,所得之结果如下所示。如果用户输入的年份确实为闰年,那么随后弹出的消息对话框就会反馈说这一年确实是闰年。

技术分享

否则如果用户输入的年份不是闰年,那么随后弹出的消息对话框就会反馈说这一年并非是闰年。

技术分享

3)If ... ElseIf ... Else 是一种多重嵌套选择结构,当紧跟在 If 后面的判断条件为假时,程序再多做一次判定,即执行ElseIf后面的判定。而且ElseIf后面还可以嵌套多层ElseIf判断。如果所有的判断条件都为假时,那么程序才会执行Else后面的分支语句块。Visual Basic中If ... ElseIf ... Else 的(多重嵌套判断)语法规则如下:

If 第1次条件判断表达式 Then
    第1次条件判断表达式为真的语句块
ElseIf 第2次条件判断表达式 Then
    第2次条件判断表达式为真的语句块

... ...

ElseIf 第n次条件判断表达式 Then
    第n次条件判断表达式为真的语句块
Else
    当前n次判断条件表达式都为假时所执行的语句块
End If

下面通过一个多项选择题小测验程序的例子来演示基于ElseIf ... Else 多重嵌套选择结构在实际中的使用。

Public Class Form1

    Private Sub Button_Submit_Click(sender As Object, e As EventArgs) Handles Button_Submit.Click

        If CheckBox_A.Checked Then
            MsgBox("很遗憾!答错了。", MsgBoxStyle.Critical, "判定结果")
        ElseIf CheckBox_B.Checked Xor CheckBox_C.Checked Then
            MsgBox("还差一点!加油。", MsgBoxStyle.Critical, "判定结果")
        ElseIf CheckBox_B.Checked And CheckBox_C.Checked Then
            MsgBox("恭喜你!答对了。", MsgBoxStyle.Information, "判定结果")
        Else
            MsgBox("你还没有做出选择哦~", MsgBoxStyle.Exclamation, "提示")
        End If

    End Sub
End Class
执行上述代码,所得之结果如下所示。只有当用户给出正确的选择答案时,程序才会判定回答正确。其他执行结果请自行测试,此处略去。

技术分享

4) 最后我们还要补充一种基于 IIf 函数的双向选择结构。这其实非常类似C语言中的三元运算符“: ?”。IIf 函数选择结构的语法规则如下:

IIf(Expression, TruePart, FalsePart)
其中表达式(Expression)最终的结果为布尔型,TruePart 与 FalsePart 均为对象类型。其规则如下:

  • 假如表达式为真,则返回真时的对象。
  • 假如表达式为假,则返回假时的对象。

可见基于IIf 函数选择结构会判断表达式是否为真,并据此选择要返回的对象。而且因为其返回类型是对象,所以返回值可以包含各种数据类型,如数字,字符串或布尔类型等等。

下面我们用基于IIf 函数选择结构来重写前面的用于判断年份是否为闰年的程序,代码如下:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        MsgBox(IIf(TextBox_Year.Text Mod 4 = 0,
                   "公元" + TextBox_Year.Text + "年是闰年。", "公元" + TextBox_Year.Text + "年不是闰年。"),
               MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "判定结果")

    End Sub
End Class
执行上述程序将会得到与之前一样的结果,这里不再赘述。

此外,如果在IIf 的函数中又包含有IIf 函数,便可以形成嵌套的选择结构,从而实现更加复杂的分支判断条件。例如下面这个示例程序。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        MsgBox("您要的是一杯" +
            IIf(RButton_Milk_Y.Checked, IIf(RButton_Suger_Y.Checked, "加奶加糖", "加奶不加糖"),
                IIf(RButton_Suger_N.Checked, "不加奶不加糖", "不加奶加糖")) + "的咖啡。",
            vbInformation, "您的选择")

    End Sub
End Class
执行上述代码,所得之结果如下所示。其他执行结果请自行测试,此处略去。

技术分享

2. Select... Case语句

Select ... Case 是仍然是属于多重选择的结构。Select后面跟着的一个选择条件,不同的Case后面跟的是选择条件可能满足的取值。当某个Case后面跟的可能取值刚好满足选择条件时,就执行对应的语句块。Select ... Case 与If ... Then... Else的作用很相似,但是当判断条件超多3个时,通常使用Select ... Case会比较方便。


基于Select ... Case的选择结构一般采用如下语法形式:

Select 
    Case 条件1
        语句块1
    Case 条件2
        语句块2
... ...

    Case 条件n
        语句块n
    Case Else 
        当Case Else之前的Case条件都不成立时所执行的语句块
End Select
其中Case Else部分也可以省略,但为了程序的鲁棒性,通常会设置一个缺省条件。

下面这个程序演示了使用Select ... Case 的一般方法。

Public Class Form1

    Dim pic_Aston As Image = Image.FromFile(Application.StartupPath & "\pic\Aston.jpg")
    Dim pic_Holden As Image = Image.FromFile(Application.StartupPath & "\pic\Holden.jpg")
    Dim pic_Jeep As Image = Image.FromFile(Application.StartupPath & "\pic\Jeep.jpg")
    Dim pic_Hyundai As Image = Image.FromFile(Application.StartupPath & "\pic\Hyundai.jpg")
    Dim pic_Lucid As Image = Image.FromFile(Application.StartupPath & "\pic\Lucid.jpg")

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Select Case ComboBox1.Text
            Case "Aston Martin Vanquish S"
                PictureBox_Car.Image = pic_Aston
            Case "Holden Commodore"
                PictureBox_Car.Image = pic_Holden
            Case "Jeep Grand Cherokee"
                PictureBox_Car.Image = pic_Jeep
            Case "Hyundai Santa Fe"
                PictureBox_Car.Image = pic_Hyundai
            Case "Lucid Air"
                PictureBox_Car.Image = pic_Lucid
        End Select

    End Sub
End Class
执行上述代码,所得之结果如下所示。当用户选择不同的车型时,右侧的图像框就会展示对应的图片。上面的程序中我们并没有设置缺省选项,读者可以试着加上一个缺省选项。

技术分享


技术分享

这里需要提醒读者注意的是,Select ... Case本质上是等同于If ... Then... Else的一种分支结构。既然是分支结构,我们就应该保证各个分支条件之间不能相互包含。因为在Select ... Case的结构中,如果分支选择被多个Case后面带的条件所满足,它也仅会执行第一次满足条件的Case对应的语句块。例如下面这个例子:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim value As Double
        value = http://www.mamicode.com/TextBox1.Text>显然一个大于1000的数也必然会大于100和0,但是你执行程序并在文本框中输入1999时,也只会得出下图所示之结果。因为当第一个Case使得分支条件得以满足时,后续若干Case所带的判断就都不会被执行。

技术分享

3. Switch语句


Switch(在Visual Basic中使用时应该写为Microsoft.VisualBasic.Switch)属于多重选择结构。它的作用与Select ... Case非常类似,但是代码会更为精简。其语法规则如下:

Microsoft.VisualBasic.Switch(表达式1, 结果1, _
    表达式2, 结果2, _
    ... ...
    表达式n, 结果n)
若表达式1判断为真,则返回结果1;若表达式2判断为真,则返回结果2;以此类推,表达式n判断为真,则返回结果n。其返回结果的类型为对象,所以返回值可以包含各种数据类型,例如数值、字符或布尔类型等等。

下面这个例子演示了用Switch语句重写上面的汽车图库小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。可见,利用Switch语句,我们的代码得以更加精简。

Public Class Form1

    ‘此处代码有省略,可参考之前用于载入图像的代码

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        PictureBox_Car.Image = Microsoft.VisualBasic.Switch(
            ComboBox1.Text = "Aston Martin Vanquish S", pic_Aston, _
            ComboBox1.Text = "Holden Commodore", pic_Holden, _
            ComboBox1.Text = "Jeep Grand Cherokee", pic_Jeep, _
            ComboBox1.Text = "Hyundai Santa Fe", pic_Hyundai, _
            ComboBox1.Text = "Lucid Air", pic_Lucid)

    End Sub
End Class
上述代码的执行结果与前图所示一致,这里不再赘述。

4. Choose语句


Choose(在Visual Basic中使用时应该写为Microsoft.VisualBasic.Choose)属于多重选择结构。它主要根据索引值(Index)来选择并返回从参数列表中的对象。它的语法规则如下:

Microsoft.VisualBasic.Choose(Index, 对象1, 对象2, ..., 对象n)
Choose 函数将从对象参数列表“对象1, 对象2, ..., 对象n”中,根据Index 的,返回列表中的指定成员。 选择列表的第一个成员时 Index 为 1。 如果 Index 超出这些限制 Choose 返回 Nothing。如果 Index 不是整数,它将被舍入为最接近的整数作为索引。


下面这个例子演示里用Choose语句重写上面的汽车图库小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。可见,利用Choose语句,与之前的代码相比,现在的版本变得更加精简。

Public Class Form1

    ‘此处代码有省略,可参考之前用于载入图像的代码

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        PictureBox_Car.Image = Microsoft.VisualBasic.Choose(ComboBox1.SelectedIndex + 1,
                                     pic_Aston, pic_Holden, pic_Jeep, pic_Hyundai, pic_Lucid)

    End Sub
End Class
上述代码的执行结果与前图所示一致,这里不再赘述。

二、循环结构


Visual Basic中用于实现循环结构的方式主要有For、While、Loop等3种此外本部分内容还涉及一些用于跳槽循环的关键字。


一、For语句

For 循环结构主要形式有以下两种:

  • For ... Next
  • For Each ... Next

下面我们逐个详解。

1)For ... Next 是最常用的一般循环语句。它主要通过设计计数器(Counter)的起始值、终止值和递增值三个部分,来决定循环执行的规则与次数。在正常的执行的情况下,只有当计数器的值等于“终止值”时,才会跳出循环。

For ... Next的语法规则如下:

For 计数器变量(counter)As 数据类型 = 起始值 To 终止值 Step 递增值
    语句块(statements)
Next i

下面这个示例程序演示了使用
For ... Next 循环结构的基本方法。这个程序实现了一个简单的幻灯片放映功能。

Public Class Form1

    ‘此处代码有省略,可参考之前用于载入图像的代码

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim index As Integer
        Static start As Single
        Button1.Enabled = False

        For index = 1 To 5 Step 1
            PictureBox_Car.Image = Microsoft.VisualBasic.Choose(index,
                                             pic_Aston, pic_Holden, pic_Jeep, pic_Hyundai, pic_Lucid)

            start = Microsoft.VisualBasic.Timer()
            Do While Microsoft.VisualBasic.Timer() < start + 2
                System.Windows.Forms.Application.DoEvents()
            Loop
        Next

        Button1.Enabled = True

    End Sub
End Class
执行上述代码,所得之结果如下所示。当用户单击【放映幻灯片】按钮后,图像对话框中将以2秒为间隔的速度逐个播放图库中的图片。

技术分享

2)For Each ... Next 是在一个集合中针对其中的每一个元素逐个执行的循环结构。这种语法在Python中也有类似的实现。它的处理对象通常是数组、对象集合等,通过For Each来取出集合中的单个元素(或对象)。在正常情况下,当集合中每一个对象都被取出时,才会跳出循环。其语法规则如下:

For Each 对象变量 As 数据类型 In 集合数组
    语句块(statements)
Next 对象变量

下面这个例子演示了用For Each ... Next 语句重写上面的幻灯片放映小程序,注意其中略去了定义及载入图片文件的部分代码(因为这部分代码与之前用到过的并无差别)。

Public Class Form1

     ‘此处代码有省略,可参考之前用于载入图像的代码

    Dim pics() As Image = {pic_Aston, pic_Holden, pic_Jeep, pic_Hyundai, pic_Lucid}

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Static start As Single
        Button1.Enabled = False

        For Each pic As Image In pics

            PictureBox_Car.Image = pic

            start = Microsoft.VisualBasic.Timer()
            Do While Microsoft.VisualBasic.Timer() < start + 2
                System.Windows.Forms.Application.DoEvents()
            Loop
        Next

        Button1.Enabled = True

    End Sub
End Class
上述代码的执行结果与前图所示一致,这里不再赘述。


二、While语句

以While为基础的循环结构,主要根据条件表达式(condition)的值来判断是否跳出循环,若条件表达式为真,则会继续执行循环体中的语句段,否则若条件表达式为假,则跳出循环。与For结构不同,While结构不需要确定循环所需执行的次数,只要知道结束条件即可。While结构的基本语法规则如下:

While 条件表达式(condition)
    语句块(statements)
End While
下面这个例子演示了While结构的基本使用方法。该示例程序的作用是统计某段文本中特定单词出现的次数。

Public Class Form1

    Dim str As String = "Pick up one basketball from the basket which contains basketballs."
    Dim subStr As String = "basket"

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim counter As Integer
        Dim pos As Integer = str.IndexOf(subStr)
        counter = 0

        While pos > 0
            counter += 1
            pos = str.IndexOf(subStr, pos + 1)
        End While

        MsgBox("The word ‘" & subStr & "‘ is found " & counter.ToString & " times.")

    End Sub
End Class
执行上述代码,所得之结果如下所示。当用户单击【计数】按钮时,程序会统计出指定单词在文段中出现的次数。应该注意到循环继续执行的条件是仍然可以找到新出现的指定单词,言下之意也就是如果指定单词已经找不到了就可以结束循环了。
技术分享

三、Loop语句

Loop循环结构主要形式大致可以分为如下四种:

  • Do Until ... Loop(条件表达式不成立时才会进入循环,循环不一定会执行)
  • Do While ... Loop(条件表达式成立时才会进入循环,循环不一定会执行)
  • Do ... Loop Until(条件表达式不成立时才会进入循环,循环至少会执行一次)
  • Do ... Loop While(条件表达式成立时才会进入循环,循环至少会执行一次

下面我们逐个详解。

1)Do Until ... Loop 属于循环结构中的“前测试循环”,即当条件表达式(condition)不成立时,才会进入循环体执行语句块。其语法规则如下:

Do Until 条件表达式(condition)
    语句块(statements)
Loop
下面这个例子演示了Do Until ... Loop 结构的基本使用方法。该示例程序的作用是求使得前n项自然数之和不大于某个预设上限的最大之n值。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim upperBound As Integer

        Try
            upperBound = TxtBox_upbound.Text
        Catch ex As Exception 
            MsgBox("请在文本框中输入一个正整数作为求和的上限!", vbExclamation, "提示")
            Return
        End Try

        Dim sum As Integer = 0
        Dim num As Integer = 0

        Do Until sum > upperBound
            num += 1
            sum += num
        Loop

        MsgBox("使得前n项自然数之和不大于" & upperBound.ToString & "的最大之n为" & (num - 1).ToString)

    End Sub
End Class
执行上述代码,所得之结果如下所示。注意到本例还使用了Visual Basic中的异常处理机制来规避用户误输入上限值时可能引起的问题。
技术分享

2)Do While ... Loop 依然属于循环结构中的“前测试循环”,但与Do Until ... Loop 结构相反,使用Do While ... Loop时只有当条件表达式(condition)成立时,才会进入循环体执行语句块。其语法规则如下:

Do While 条件表达式(condition)
    语句块(statements)
Loop
这里同样采用前面“求使得前n项自然数之和不大于某个预设上限的最大之n值”问题来作为示例。易见,由于Do While ... LoopDo Until ... Loop的循环执行条件是相反的。所以两个程序的唯一不同就在于把之前的条件表达式“sum > upperBound”改成了“sum <= upperBound”。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim upperBound As Integer

        Try
            upperBound = TxtBox_upbound.Text
        Catch ex As Exception 
            MsgBox("请在文本框中输入一个正整数作为求和的上限!", vbExclamation, "提示")
            Return
        End Try

        Dim sum As Integer = 0
        Dim num As Integer = 0

        Do While sum <= upperBound
            num += 1
            sum += num
        Loop

        MsgBox("使得前n项自然数之和不大于" & upperBound.ToString & "的最大之n为" & (num - 1).ToString)

    End Sub
End Class
上述代码的执行结果与前图所示一致,这里不再赘述。

3)Do ... Loop Until 属于循环结构中的“后测试循环”,“后测试循环”的特点是不论条件表达式是否为真,循环都会至少被执行一次。从关键字“Until”中,想必读者也能猜到,该种语句表示只有当表达式不成立时,才会继续执行循环体中的语句段。Do ... Loop Until的语法规则如下:

Do 
    语句块(statements)
Loop Until 条件表达式(condition)
下面仍然以之前给出的“统计某段文本中特定单词出现次数”问题为例来编写示例程序,从中读者可以清晰地了解到使用Do ... Loop Until 语句的基本方法。

Public Class Form1

    Dim str As String = "Pick up one basketball from the basket which contains basketballs."
    Dim subStr As String = "basket"

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim counter As Integer = 0
        Dim pos As Integer = -1

        Do
            pos = str.IndexOf(subStr, pos + 1)
            If pos <> -1 Then
                counter += 1
            End If
        Loop Until (pos = -1)

        MsgBox("The word ‘" & subStr & "‘ is found " & counter.ToString & " times.")

    End Sub
End Class
上述代码的执行结果与前图所示一致,这里不再赘述。


4)Do ... Loop While 依然属于循环结构中的“后测试循环”,即不论条件表达式是否为真,循环都会至少被执行一次但与Do ... Loop Until 不同,使用Do ... Loop While 时只有当条件表达式(condition)成立时,才会继续执行循环体中的语句段。Do ... Loop While 的语法规则如下:

Do 
    语句块(statements)
Loop While 条件表达式(condition)

下面我们通过一个例子来演示Do ... Loop While结构的用法。这个例子实现了基于欧几里得算法(又称辗转相除法)求解最大公因数的功能。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim v1 As Integer = TextBox_v1.Text
        Dim v2 As Integer = TextBox_v2.Text
        Dim tmp As Integer

        Do
            tmp = v1 Mod v2
            v1 = v2
            v2 = tmp
        Loop While (v2 <> 0)

        MsgBox("A与B的最大公因数=" & v1)
    End Sub
End Class

执行上述代码,所得之结果如下所示。当用户输入两个整数,并单击【求最大公因数】按钮后,程序将在弹出的消息对话框中给出这两个整数的最大公因数。

技术分享


四、Continue语句

现在大家所熟知的高级语言(例如C、C++、Python等)一般都提供有continue关键字,Visual Basic也不例外。它可以在执行循环时增加更多的逻辑变化,使得循环体完成更加复杂的功能。具体而言,当执行一个循环体时,如果遇到

continue语句,那么程序就是终止本次循环执行(也就是不再执行循环体中位于continue之后的语句段),继而进入下一轮循环的执行。Continue语句的基本语法规则如下:

Continue {Do | For | While}
例如在下面这个程序中,Students数组中每个数组元素都表示的一名学生的信息,每名学生的信息是一个二元组,包含其性别和身高。程序根据用户的指令来选择计算男生的平均身高或者女生的平均身高。因为使用了continue语句,所以在遍历整个数组时,对于性别不符合的元素,程序就会跳过不予计算。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim Students() As Tuple(Of String, Integer) = {Tuple.Create("M", 180),
                Tuple.Create("M", 175), Tuple.Create("F", 165), Tuple.Create("M", 183),
                Tuple.Create("M", 178), Tuple.Create("F", 168), Tuple.Create("F", 171)}

        Dim sum As Integer = 0
        Dim num As Integer = 0

        For Each student In Students
            If (student.Item1 = IIf(RButton_F.Checked, "M", "F")) Then Continue For
            sum += student.Item2
            num += 1
        Next student

        MsgBox(IIf(RButton_F.Checked, "女", "男") & "生的平均身高为" & (sum / num).ToString & "cm.")

    End Sub
End Class
执行上述代码,所得之结果如下所示。当用户选择是要计算男生的平均身高还是女生的平均身高后,单击【确定】按钮,弹出的消息对话框就会给出相应的计算结果。

技术分享


五、Exit 语句

Continue语句只能跳出当前正在执行的本轮循环,但是如果要退出整个循环过程就需要用到Exit语句。Exit语句的主要作用是跳出程序当前执行的程序结构块。跳出对象有For、While、Do、Sub、Function、Property、Select和Try等。Exit For就是跳出For循环的循环结构;Exit While就是跳出While循环的循环结构。其他情况与此类似。

下面来看一个例子。我们希望编写一个程序来判定用户输入的自然数是否是素数。素数是只能被1和其自身整除的数字。例如991是一个素数,通常我们要从2开始尝试,直到991折半取整,即495,检验从2到495之间的整数有否能够被991整除的,如果没有我们才能断定它确实是一个素数。但是对于一个非素数,例如1000,检验到2就已经可以确定它不是素数了。为了避免后续多余的计算,就需要使用Exit语句来跳出循环。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim value As Integer
        Dim remainder As Integer
        Dim i As Integer
        Dim result As Boolean = False

        Try
            value = http://www.mamicode.com/(TxtBox_Input.Text) / 2>执行上述代码,所得之结果如下所示。当用户输入一个素数,例如991时,程序弹出对话框给出该数是素数的结论。

技术分享

用户输入一个非素数,例如327时,程序弹出对话框给出该数不是素数的结论。

技术分享

就当前这个问题而言,我们其实还有另外一种实现方法,就是跳出整个Sub。事实上,这种方法在之前的示例中已经用过了。在 Sub 过程中,Return 语句等效于 Exit Sub。下面的示例代码中,Try...Catch块主要用来规避用户误输入所导致的问题(这个方法之前的例子也用过)。而在For循环中,也使用了Exit Sub,这与Try...Catch块中的Return是一样的

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim value As Integer
        Dim remainder As Integer
        Dim i As Integer

        Try
            value = http://www.mamicode.com/(TxtBox_Input.Text) / 2>上述代码的执行结果与前图所示一致,这里不再赘述。



*本文中所使用的Visual Studio版本为2013。


??(本文完)
??

Visual Basic快捷教程——流程控制