Exiting nested For loops

  • Thread starter Nathan Sokalski
  • Start date
N

Nathan Sokalski

I have several nested For loops, as follows:

For a As Integer = 0 To 255
For b As Integer = 0 To 255
For c As Integer = 0 To 255
If <Boolean Expression> Then <My Code> Else Exit For
Next
If Not <Boolean Expression> Then Exit For
Next
If Not <Boolean Expression> Then Exit For
Next

As you can see, I need to test the condition in each For, which in my case
is probably more costly than necessary. If I could simply say exit all For
loops or exit 3 For loops or something, not only would it be less costly,
but simpler code. Is there any way to do this (or maybe a nice workaround)?
Thanks.
 
H

Hal Rosser

cut-n-pasted from the help files...Looks like you would need to nest a for
loop in a while loop and would then be limited to exiting from only one
nesting.

Skipping from Within a Nested Loop. If you have Do, For, or While loops
nested one within another, you can skip immediately to the next iteration of
any level in the nesting. This is only true, however, when the loops are of
different types. If you have nested loops of the same type, for example
nested While loops, Continue While skips to the next iteration of the
innermost While loop.
To skip to the next iteration of a Do loop from within a nested For loop
1.. Write the nested loops in the normal way.

2.. Use Continue Do at any place that you want to terminate the current
iteration of the inner For loop and skip to the next iteration of the outer
Do loop.

Copy Code
Public Sub divideElements(ByRef matrix(,) As Double)
Dim i As Integer = -1
Do Until i > matrix.GetUpperBound(0)
i += 1
For j As Integer = 0 To matrix.GetUpperBound(1)
If matrix(j, j) = 0 Then Continue Do
matrix(i, j) /= matrix(j, j)
Next j
Loop
End Sub
 
S

Stephany Young

Try
For a As Integer = 0 To 255
For b As Integer = 0 To 255
For c As Integer = 0 To 255
If Not <Boolean Expression> Then Exit Try
<My Code>
Next
Next
Next
Catch
End Try
 
S

Stanimir Stoyanov

Hello Nathan,

I personally use labels and GoTo statements in such cases. Of course they
names are customizable.


For a As Integer = 0 To 255
For b As Integer = 0 To 255
For c As Integer = 0 To 255
If <Boolean Expression> Then <My Code> Else GoTo SkipOne
Next
SkipOne:
If Not <Boolean Expression> Then GoTo SkipTwo
Next
SkipTwo:
If Not <Boolean Expression> Then GoTo SkipThree
Next

SkipThree:
' Continue with your code here
 
C

Cor Ligthert[MVP]

Nathan,

Why are you using the second and thirth if, in the way you tell it, it
should never has to be reached?

Cor
 
F

Family Tree Mike

I think this is more understandable to the next person to maintain your
code:

a = 0
While (a < 256 And Not quit)
b = 0
While (b < 256 And Not quit)
c = 0
While (c < 256 And Not quit)

If (anotherbool) Then
quit = True
End If

c = c + 1
End While
b = b + 1
End While
a = a + 1
End While
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top