跳转至

控制流

原文: https://zetcode.com/lang/visualbasic/flowcontrol/

在 Visual Basic 教程的这一部分中,我们将讨论流控制。 我们将定义几个关键字,使我们能够控制 Visual Basic 程序的流程。

在 Visual Basic 语言中,有几个关键字可用于更改程序的流程。 当程序运行时,语句从源文件的顶部到底部执行。 逐一。 可以通过特定的关键字更改此流程。 语句可以执行多次。 一些语句称为条件语句。 仅在满足特定条件时才执行它们。

If语句

If语句具有以下一般形式:

If (expression)
    statement
End If

If关键字用于检查表达式是否为真。 如果为true,则执行一条语句。 该语句可以是单个语句或复合语句。 复合语句由If/End If块包围的多个语句组成。

Option Strict On

Module Example

    Dim num As Byte = 31

    Sub Main()

        If (num > 0)
            Console.WriteLine("num variable is positive")
        End If

    End Sub

End Module

我们有一个num变量。 它被分配为 31。If关键字检查布尔表达式。 表达式放在方括号之间。 31 > 0true,因此将执行块内的语句。

$ ./ifstatement.exe 
num variable is positive

满足条件,并将消息写入控制台。

Option Strict On

Module Example

    Dim num As Byte = 31

    Sub Main()

        If (num > 0)
            Console.WriteLine("num variable is positive")
            Console.WriteLine("num variable equals {0}", num)
        End If

    End Sub

End Module

可以在由IfEnd If关键字创建的块内执行更多语句。

我们可以使用Else关键字来创建一个简单的分支。 如果If关键字后方括号内的表达式的值为假,则将自动执行Else关键字后方的语句。

Option Strict On

Module Example

    Dim sex As String 

    Sub Main()

        sex = "female"

        If (sex = "male") 
          Console.WriteLine("It is a boy")
        Else 
          Console.WriteLine("It is a girl")
        End If

    End Sub

End Module

我们有性别变量。 它具有"female"字符串。 布尔表达式的计算结果为false,我们在控制台中得到"It is a girl"

$ ./branch.exe 
It is a girl

我们可以使用Else If关键字创建多个分支。 仅当不满足先前条件时,Else If关键字才会测试其他条件。 请注意,我们可以在测试中使用多个Else If关键字。

Option Strict On

Module Example

    Dim a As Byte = 0

    Sub Main()

        If (a < 0) 
          Console.WriteLine("a is negative")
        Else If (a = 0) 
          Console.WriteLine("a equals to zero")
        Else
          Console.WriteLine("a is a positive number")
        End If

    End Sub

End Module

我们有一个数值变量,并测试它是否为负数或正数或等于零。 第一个表达式的计算结果为false。 满足第二个条件。 程序在控制台上输出a equals to zero。 分支的其余部分将被跳过。

Select语句

Select语句是选择控制流语句。 它允许变量或表达式的值通过多路分支控制程序执行的流程。 与使用IfElse If语句的组合相比,它以更简单的方式创建多个分支。

我们有一个变量或一个表达式。 Select关键字用于根据值列表测试变量或表达式中的值。 值列表用Case关键字显示。 如果值匹配,则执行Case之后的语句。 有一个可选的Case Else语句。 如果找不到其他匹配项,则执行该命令。

Option Strict On

Module Example

    Dim domain As String

    Sub Main()

        domain = Console.ReadLine()

        Select domain
            Case "us"
                Console.WriteLine("United States")
            Case "de"
                Console.WriteLine("Germany")
            Case "sk"
                Console.WriteLine("Slovakia")
            Case "hu"
                Console.WriteLine("Hungary")
            Case Else
                Console.WriteLine("Unknown")
        End Select

    End Sub

End Module

在我们的程序中,我们有一个域变量。 我们从命令行读取变量的值。 我们使用Case语句测试变量的值。 有几种选择。 例如,如果该值等于"us",则将"United States"字符串打印到控制台。

$ ./selectcase.exe 
hu
Hungary

我们在控制台输入了"hu"字符串,程序以"Hungary"作为响应。

使用Select关键字可以验证一系列数字个案。

Option Strict On

Module Example

    Dim age As Byte

    Sub Main()

        Try
            age = Console.ReadLine()
        Catch
            Console.WriteLine("Invalid value")
            End
        End Try

        Select age
            Case 0 To 21
                Console.WriteLine("Junior")
            Case 22 To 60
                Console.WriteLine("Adult")
            Case Else
                Console.WriteLine("Senior")
        End Select

    End Sub

End Module

前面的程序使用数值范围来标识一个人的年龄组。

Try
    age = Console.ReadLine()
Catch
    Console.WriteLine("Invalid value")
    End
End Try

从控制台读取一个值。 我们只能使用数值数据。 TryCatchEnd Try关键字用于异常处理。 如果引发异常,则执行Catch关键字之后的语句。 End语句终止程序。

Case 0 To 21
    Console.WriteLine("Junior")

在这里,我们指定一个值范围。 如果用户输入的值在 0 到 21 之间(包括 0 和 21),则程序将在控制台上打印"Junior"

$ ./agerange.exe 
43
Adult

我们输入了 43,程序以Adult字符串作为响应。

While语句

While语句是一个控制流语句,它允许根据给定的布尔条件重复执行代码。

这是While循环的一般形式:

While (expression):
    statement
End While

While关键字在WhileEnd While关键字包围的块内执行语句。 每次将表达式求值为true时都会执行这些语句。

Option Strict On

Module Example

    Sub Main()

        Dim i As Integer = 0
        Dim sum As Integer = 0

        While i < 10

            i = i + 1
            sum += i

        End While

        Console.WriteLine(sum)

    End Sub

End Module

在代码示例中,从一系列数字计算值的总和。

While循环包含三个部分:初始化,测试和更新。 语句的每次执行都称为循环。

Dim i As Integer = 0

我们启动i变量。 它用作计数器。

While i < 10
...
End While

While关键字后面的表达式是第二阶段,即测试。 执行主体中的语句,直到表达式的计算结果为false

i = i + 1

While循环的最后一个第三阶段。 正在更新。 我们增加计数器。 请注意,对While循环的不正确处理可能会导致循环不断。

可以至少运行一次该语句。 即使不满足条件。 为此,我们可以使用DoLoop While关键字。

Option Strict On

Module Example

    Sub Main()

        Dim count As Integer = 0

        Do 
            Console.WriteLine(count)
        Loop While (count <> 0)

    End Sub

End Module

首先执行迭代,然后求值真值表达式。

For Next语句

如果在启动循环之前知道周期数,则可以使用For Next语句。 在此构造中,我们声明一个计数器变量,该变量在每次循环重复期间都会自动增加或减少值。

Option Strict On

Module Example

    Sub Main()

        For i As Integer = 0 To 9
            Console.WriteLine(i)
        Next

    End Sub

End Module

在此示例中,我们将数字0..9打印到控制台。

For i As Integer = 0 To 9
    Console.WriteLine(i)
Next

我们将计数器 i 初始化为零。 Next语句将计数器增加一,直到计数器等于 9。

Visual Basic 具有可选的Step关键字。 它控制计数器变量如何增加或减少。

Option Strict On

Module Example

    Sub Main()

        For i As Integer = 9 To 0 Step -1
            Console.WriteLine(i) 
        Next

    End Sub

End Module

在上面的示例中,我们以相反的顺序打印数字 0..9。

For i As Integer = 9 To 0 Step -1
    Console.WriteLine(i) 
Next

该步骤也可以是负数。 我们将计数器初始化为 9。每次迭代,计数器都将减小步长值。

For Each语句

For Each构造简化了遍历数据集合的过程。 它没有明确的计数器。 For Each语句一个接一个地遍历数组或集合,并将当前值复制到构造中定义的变量中。

Option Strict On

Module Example

    Sub Main()

        Dim planets() As String = { "Mercury", "Venus", _
            "Earth", "Mars", "Jupiter", "Saturn", _
            "Uranus", "Neptune" }

        For Each planet As String In planets
            Console.WriteLine(planet)
        Next 

    End Sub

End Module

在此示例中,我们使用For Each语句遍历一系列行星。

For Each planet As String In planets
    Console.WriteLine(planet)
Next

For Each语句的用法很简单。 planets是我们迭代通过的数组。 planet是一个临时变量,具有数组中的当前值。 For Each语句遍历所有行星并将它们打印到控制台。

$ ./planets.exe 
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune

运行上面的 Visual Basic 程序将给出此输出。

ExitContinue语句

Exit语句可用于终止由WhileForSelect语句定义的块。

Option Strict On

Module Example

    Dim val As Integer

    Sub Main

        While (True)

            val = CType((30 * Rnd), Integer) + 1
            Console.Write(val.ToString & " ")
            If (val = 22)
                Exit While
            End If        

        End While

        Console.Write(vbNewLine)

    End Sub

End Module

我们定义了一个无限的While循环。 只有一种方法可以跳出这样的循环。 我们必须使用Exit While语句。 我们从 1 到 30 中选择一个随机值。我们打印该值。 如果该值等于 22,则结束无穷的while循环。

$ ./exitstm.exe 
30 12 13 20 19 4 2 9 6 9 22 

我们可能会得到这样的东西。

Continue语句用于跳过循环的一部分,并继续循环的下一个迭代。 它可以与DoForWhile语句结合使用。

在下面的示例中,我们将打印一个数字列表,这些数字不能除以 2 而没有余数。

Option Strict On

Module Example

    Dim num As Integer = 0

    Sub Main()

        While (num < 1000)

            num = num + 1

            If ((num Mod 2) = 0)
                Continue While
            End If        

            Console.Write(num.ToString() + " ") 

        End While

        Console.Write(vbNewLine)

    End Sub

End Module

我们使用While循环遍历数字1..999

If ((num Mod 2) = 0)
    Continue While
End If  

如果表达式num Mod 2返回 0,则可以将所讨论的数字除以 2。执行Continue语句,并跳过循环的其余部分。 在我们的例子中,循环的最后一条语句将被跳过,并且数字不会输出到控制台。 下一个迭代开始。

在 Visual Basic 教程的这一部分中,我们讨论的是控制流结构。



回到顶部