Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(ebook) Visual Studio .NET Mastering Visual Basic.pdf
Скачиваний:
120
Добавлен:
17.08.2013
Размер:
15.38 Mб
Скачать

146 Chapter 3 VISUAL BASIC: THE LANGUAGE

You may also see an odd loop statement like the following one:

While True

{ statements }

End While

This seemingly endless loop must be terminated from within its own body with an Exit statement, which is called when a condition becomes True or False. The following loop terminates when a condition is met in the loop’s body:

While True

{ statements }

If condition Then Exit While { more statements }

End While

Nested Control Structures

You can place, or nest, control structures inside other control structures (such as an If…Then block within a For…Next loop). Control structures in Visual Basic can be nested in as many levels as you want. It’s common practice to indent the bodies of nested decision and loop structures to make the program easier to read.

When you nest control structures, you must make sure that they open and close within the same structure. In other words, you can’t start a For…Next loop in an If statement and close the loop after the corresponding End If. The following pseudocode demonstrates how to nest several flow-control statements:

For a = 1 To 100

{ statements }

If a = 99 Then

{statements } End If

While b < a

{statements }

If total <= 0 Then { statements }

End If End While

For c = 1 to a

{ statements } Next

Next

I’m not showing the names of the count variables after the Next statement, because it’s not necessary. To find the matching closing statement (Next, End If, or End While), move down from the opening statement until you hit a line that starts at the same column. This is the matching closing statement. Notice that you don’t have to align the nested structures yourself. The editor reformats

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

FLOW-CONTROL STATEMENTS 147

the code automatically as you edit. It also inserts the matching closing statement—the End If statement is inserted automatically as soon as you enter an If statement, for example.

Listing 3.16 shows the structure of a nested For…Next loop that scans all the elements of a twodimensional array.

Listing 3.16: Iterating through a Two-Dimensional Array

Dim Array2D(6, 4) As Integer

 

Dim iRow, iCol As Integer

 

For iRow = 0 To Array2D.GetUpperBound(0)

 

For iCol = 0 To Array2D.GetUpperBound(1)

 

Array2D(iRow, iCol) = iRow * 100 + iCol

 

Console.Write(iRow & “, “ & iCol & “ = “ & Array2D(iRow, iCol) & “

“)

Next iCol

 

Console.WriteLine()

 

Next iRow

 

 

 

The outer loop (with the iRow counter) scans each row of the array, and the inner loop scans each column in the current row. At each iteration, the inner loop scans all the elements in the row specified by the counter of the outer loop (iRow). After the inner loop completes, the counter of the outer loop is increased by one and the inner loop is executed again, this time to scan the elements of the next row. The loop’s body consists of two statements that assign a value to the current array element and then print it in the Output window. The current element at each iteration is Array2D(iRow, iCol).

Part of the output produced by this code segment is shown here. The pair of values separated by a comma are the indices of an element, and its value follows the equal sign:

0, 0 = 0

0, 1 = 1

0, 2 = 2

0, 3 = 3

 

0, 4 = 4

 

 

1, 0 = 100

1, 1 = 101

1, 2 = 102

1,

3 = 103

1, 4 = 104

2, 0 = 200

2, 1 = 201

2, 2 = 202

2,

3 = 203

2, 4 = 204

3, 0

= 300

3, 1

= 301

3, 2 = 302

3,

3 = 303

3, 4

= 304

4, 0

= 400

4, 1

= 401

4, 2

= 402

4,

3

= 403

4, 4

= 404

5, 0

= 500

5, 1

= 501

5, 2

= 502

5,

3

= 503

5, 4

= 504

6, 0

= 600

6, 1

= 601

6, 2

= 602

6,

3

= 603

6, 4

= 604

Tip The presence of the counter names iCol and iRow aren’t really required after the Next statement. Actually, if you supply them in the wrong order, Visual Basic will catch the error. In practice, few programmers specify counter values after a Next statement because Visual Basic matches each Next statement to the corresponding For statement. If the loop’s body is lengthy, you can improve the program’s readability by specifying the corresponding counter name after each Next statement.

You can also nest multiple If statements. The structure shown in Listing 3.17 tests a user-sup- plied value to determine whether it’s positive and, if so, determines whether the value exceeds a certain limit.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

148 Chapter 3 VISUAL BASIC: THE LANGUAGE

Listing 3.17: Simple Nested If Statements

Income = InputBox(“Enter your income”)

If Income > 0 Then

If Income > 10000 Then

MsgBox “You will pay taxes this year”

Else

MsgBox “You won’t pay any taxes this year”

End If

Else

MsgBox “Bummer”

End If

The Income variable is first compared with zero. If it’s negative, the Else clause of the If…Then statement is executed. If it’s positive, it’s compared with the value 10,000, and depending on the outcome, a different message is displayed.

The Exit Statement

The Exit statement allows you to exit prematurely from a block of statements in a control structure, from a loop, or even from a procedure. Suppose you have a For…Next loop that calculates the square root of a series of numbers. Because the square root of negative numbers can’t be calculated (the Sqrt() function will generate a runtime error), you might want to halt the operation if the array contains an invalid value. To exit the loop prematurely, use the Exit For statement as follows:

For i = 0 To UBound(nArray)

If nArray(i) < 0 Then Exit For

nArray(i) = Math.Sqrt(nArray(i))

Next

If a negative element is found in this loop, the program exits the loop and continues with the statement following the Next statement.

There are similar Exit statements for the Do loop (Exit Do) and the While loop (Exit While), as well as for functions and subroutines (Exit Function and Exit Sub). If the previous loop was part of a function, you might want to display an error and exit not only the loop, but the function itself:

For i = 0 To nArray.GetUpperBound()

If nArray(i) < 0 Then

MsgBox “Negative value found, terminating calculations”

Exit Function

End If

nArray(i) = Sqr(nArray(i))

Next

If this code is part of a subroutine procedure, you use the Exit Sub statement. The Exit statements for loops are Exit For, Exit While, and Exit Do. There is no way (or compelling reason) to exit prematurely from an If or Case statement.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com