루프 카운터가 최종 값에 가까워지는 동안 명령문 그룹을 반복합니다.
문법
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
부분
부분 | 설명 |
---|---|
counter |
문장에 For 반드시 필요합니다. 숫자 변수입니다. 루프의 컨트롤 변수입니다. 자세한 내용은 이 항목의 뒷부분에 있는 Counter Argument 를 참조하세요. |
datatype |
선택 사항입니다. 의 데이터 형식입니다 counter . 자세한 내용은 이 항목의 뒷부분에 있는 Counter Argument 를 참조하세요. |
start |
필수 사항입니다. 숫자 식입니다.
counter 의 초기 값입니다. |
end |
필수 사항입니다. 숫자 식입니다. 의 최종 값입니다 counter . |
step |
선택 사항입니다. 숫자 표현 루프를 반복할 때마다 counter 가 증가하는 양입니다. |
statements |
선택 사항입니다. 지정된 횟수만큼 실행되는 For 와 Next 사이에 하나 이상의 문. |
Continue For |
선택 사항입니다. 제어를 다음 루프 반복으로 전송합니다. |
Exit For |
선택 사항입니다.
For 루프에서 제어를 벗어납니다. |
Next |
필수 사항입니다. 루프의 정의를 종료합니다 For . |
비고
이 To
문에서 키워드를 사용하여 카운터의 범위를 지정합니다. 이 키워드는 Select...Case 문 및 배열 선언에서 사용할 수도 있습니다. 배열 선언에 대한 자세한 내용은 Dim 문을 참조하세요.
간단한 예제
설정된 횟수만큼 문 집합을 반복하려는 경우 ...Next
구조체를 사용합니다For
.
다음 예제에서 변수는 index
값 1로 시작하고 루프의 각 반복에 따라 증가하며 값이 index
5에 도달한 후에 끝납니다.
For index As Integer = 1 To 5
Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
다음 예제 number
에서 변수는 2에서 시작하여 루프의 각 반복에서 0.25로 감소하고 값이 number
0에 도달한 후에 끝납니다. 인수는 Step
루프의 -.25
각 반복에서 값을 0.25씩 줄입니다.
For number As Double = 2 To 0 Step -0.25
Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0
팁 (조언)
While...End While 문 또는 Do...Loop 문은 루프에서 문장을 실행할 횟수를 미리 알지 못하는 경우에 잘 작동합니다. 그러나 루프를 특정 횟수 For
만큼 실행해야 하는 경우 ...Next
루프를 선택하는 것이 좋습니다. 루프를 처음 입력할 때 반복 횟수를 결정합니다.
중첩 루프
루프를 중첩하려면 하나의 루프를 다른 루프 내부에 배치할 수 있습니다. For
다음 예제에서는 단계 값이 다른 중첩된 For
구조Next
를 보여 줍니다. 외부 루프는 루프의 모든 반복에 대한 문자열을 만듭니다. 내부 루프는 루프를 반복할 때마다 루프 카운터 변수를 감소합니다.
For indexA = 1 To 3
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Append to the StringBuilder every third number
' from 20 to 1 descending.
For indexB = 20 To 1 Step -3
sb.Append(indexB.ToString)
sb.Append(" ")
Next indexB
' Display the line.
Debug.WriteLine(sb.ToString)
Next indexA
' Output:
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
' 20 17 14 11 8 5 2
루프를 중첩할 때 각 루프에는 고유한 counter
변수가 있어야 합니다.
서로 다른 종류의 컨트롤 구조를 중첩할 수도 있습니다. 자세한 내용은 중첩된 컨트롤 구조를 참조하세요.
For 루프 종료 및 계속 실행
Exit For
문장은 즉시 For
을(를) 종료합니다.
Next
루프를 종료하고 제어를 Next
문 다음의 문으로 전송합니다.
다음 반복으로 즉시 제어를 넘기는 Continue For
문입니다. 자세한 내용은 Continue 문을 참조하세요.
다음 예제에서는 Continue For
및 Exit For
문의 사용을 보여 줍니다.
For index As Integer = 1 To 100000
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 AndAlso index <= 8 Then
Continue For
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit For
End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10
당신은 For
에 임의의 수의 Exit For
구문을 넣을 수 있습니다...
Next
루프. 중첩 내에서 For
사용되는 경우 ...**
Next
루프를 Exit For
사용하여 가장 안쪽 루프를 종료하고 제어를 다음 상위 중첩 수준으로 전송합니다.
Exit For
는 몇 가지 조건을 평가한 후 자주 사용됩니다(예 If
: ...Then
...Else
structure). 다음 조건에 사용할 Exit For
수 있습니다.
반복을 계속하는 것은 불필요하거나 불가능합니다. 잘못된 값 또는 종료 요청이 이 조건을 만들 수 있습니다.
A
Try
...Catch
...Finally
문은 예외를 처리합니다. 블록의Finally
끝에서 사용할Exit For
수 있습니다.무한 루프가 있습니다. 이 루프는 횟수가 크거나 무한할 수 있습니다. 이러한 조건을 감지하는 경우 루프를 이스케이프하는 데 사용할
Exit For
수 있습니다. 자세한 내용은 Do...Loop 문을 참조하세요.
기술 구현
루프가 For
시작되면 Visual Basic은 start
, end
, 및 step
를 평가합니다. Next
Visual Basic은 이 시점에서만 이러한 값을 평가한 다음 start
을 counter
에 할당합니다. 문 블록이 실행되기 전에 Visual Basic은 counter
와 end
을 비교합니다.
counter
가 end
값보다 크거나 (step
가 음수인 경우 더 작을 때), For
루프가 종료되고 제어가 Next
문 다음의 문장으로 전달됩니다. 그렇지 않으면 코드 블록이 실행됩니다.
Visual Basic이 Next
구문을 만날 때마다 counter
을/를 step
만큼 증가시키고 For
구문으로 돌아갑니다. 다시 비교하고 counter
end
결과에 따라 블록을 실행하거나 루프를 종료합니다. 이 프로세스는 counter
가 end
를 통과하거나 Exit For
문이 발견될 때까지 계속됩니다.
루프는 counter
가 end
를 통과할 때까지 중지되지 않습니다.
counter
가 end
과 같으면 루프가 계속됩니다. 블록을 실행할지 여부를 결정하는 비교는 step
가 양수일 때 counter
<= end
이고, step
가 음수일 때 counter
>= end
입니다.
루프 내에 있는 동안의 counter
값을 변경하면 코드를 읽고 디버그하기가 더 어려울 수 있습니다. 값을 start
end
변경하거나 step
루프를 처음 입력할 때 결정된 반복 값에 영향을 주지 않습니다.
루프를 중첩하는 경우, 컴파일러는 내부 수준의 Next
문이 나오기 전에 외부 중첩 수준의 Next
문이 발생하면 오류를 신호합니다. 그러나 컴파일러는 counter
를 모든 Next
문에서 명시하는 경우에만 이 겹치는 오류를 검색할 수 있습니다.
단계 매개변수
값 step
은 양수 또는 음수일 수 있습니다. 이 매개 변수는 다음 표에 따라 루프 처리를 결정합니다.
단계 값 | 루프는 다음 경우에 실행됩니다. |
---|---|
양수 또는 0 |
counter
<= end |
부정 |
counter
>= end |
step
기본값은 1입니다.
반론
다음 표에서는 counter
가 전체 For…Next
루프에 대해 범위가 지정된 새 지역 변수를 정의하는지를 나타냅니다.
datatype
가 존재하는지 여부와 counter
가 이미 정의되었는지 여부에 따라 이 결정이 달라집니다.
datatype 존재합니까? |
이미 정의되어 있나요 counter ? |
결과(전체 For...Next 루프로 범위가 지정된 새 지역 변수를 정의하는지 여부counter ) |
---|---|---|
아니오 | 예 | 이미 counter 가 정의되어 있기 때문에 그렇지 않습니다. 범위 counter 가 프로시저에 로컬이 아닌 경우 컴파일 시간 경고가 발생합니다. |
아니오 | 아니오 | 예. 데이터 형식은 start , end , 및 step 식에서 유추됩니다. 형식 유추에 대한 자세한 내용은 Option Infer 문 및 로컬 형식 유추를 참조하세요. |
예 | 예 | 예, 하지만 기존 counter 변수가 프로시저 외부에서 정의된 경우에만 가능합니다. 해당 변수는 별개의 상태로 유지합니다. 기존 counter 변수의 범위가 프로시저에 로컬인 경우 컴파일 시간 오류가 발생합니다. |
예 | 아니오 | 예. |
데이터 형식 counter
은 반복 형식을 결정하며 다음 형식 중 하나여야 합니다.
A
Byte
,SByte
,UShort
,Short
,UInteger
,Integer
,ULong
,Long
,Decimal
,Single
또는Double
.Enum 문을 사용하여 선언하는 열거형입니다.
Object
입니다.다음의 연산자를 포함하는 형식
T
로,B
는Boolean
표현식에서 사용할 수 있는 형식입니다.Public Shared Operator >= (op1 As T, op2 As T) As B
Public Shared Operator <= (op1 As T, op2 As T) As B
Public Shared Operator - (op1 As T, op2 As T) As T
Public Shared Operator + (op1 As T, op2 As T) As T
필요에 따라 counter
문에서 Next
변수를 지정할 수 있습니다. 이 구문은 특히 중첩된 For
루프가 있는 경우 프로그램의 가독성을 향상시킵니다. 해당 For
문에 표시되는 변수를 지정해야 합니다.
start
, end
, 및 step
표현식은 counter
의 형식으로 확장되는 모든 데이터 형식으로 평가될 수 있습니다. 사용자 정의 형식을 counter
사용하는 경우, 형식 start
, end
, 또는 step
을(를) counter
형식으로 변환하기 위해 CType
변환 연산자를 정의해야 할 수 있습니다.
예제 1
다음 예제에서는 제네릭 목록에서 모든 요소를 제거합니다.
For Each...Next 문 대신에, 예제는 내림차순으로 반복하는 For
...Next
문을 보여 줍니다. 이 예제에서는 제거된 요소 뒤의 요소에 removeAt
인덱스 값이 낮아지므로 이 기술을 사용합니다.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
For index As Integer = lst.Count - 1 To 0 Step -1
lst.RemoveAt(index)
Next
Debug.WriteLine(lst.Count.ToString)
' Output: 0
예제 2
다음 예제에서는 Enum 문을 사용하여 선언된 열거형을 반복합니다.
Public Enum Mammals
Buffalo
Gazelle
Mongoose
Rhinoceros
Whale
End Enum
Public Sub ListSomeMammals()
For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros
Debug.Write(mammal.ToString & " ")
Next
Debug.WriteLine("")
' Output: Gazelle Mongoose Rhinoceros
End Sub
예제 3
다음 예제에서 문 매개 변수는 +
, -
, >=
, <=
연산자에 대한 연산자 오버로드가 있는 클래스를 사용합니다.
Private Class Distance
Public Property Number() As Double
Public Sub New(ByVal number As Double)
Me.Number = number
End Sub
' Define operator overloads to support For...Next statements.
Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number + op2.Number)
End Operator
Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
Public Sub ListDistances()
Dim distFrom As New Distance(10)
Dim distTo As New Distance(25)
Dim distStep As New Distance(4)
For dist As Distance = distFrom To distTo Step distStep
Debug.Write(dist.Number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 10 14 18 22
End Sub
참고하십시오
.NET