For...Next 문(Visual Basic)For...Next Statement (Visual Basic)

지정 된 횟수 만큼 문 그룹을 반복 합니다.Repeats a group of statements a specified number of times.

구문Syntax

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Continue For ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

요소Parts

파트Part 설명Description
counter @No__t_0 문에 필요 합니다.Required in the For statement. 숫자 변수입니다.Numeric variable. 루프의 제어 변수입니다.The control variable for the loop. 자세한 내용은이 항목의 뒷부분에 나오는 Counter 인수 를 참조 하세요.For more information, see Counter Argument later in this topic.
datatype (선택 사항)Optional. @No__t_0 데이터 형식입니다.Data type of counter. 자세한 내용은이 항목의 뒷부분에 나오는 Counter 인수 를 참조 하세요.For more information, see Counter Argument later in this topic.
start 필수 요소.Required. 숫자 식입니다.Numeric expression. counter의 초기 값입니다.The initial value of counter.
end 필수 요소.Required. 숫자 식입니다.Numeric expression. @No__t_0 최종 값입니다.The final value of counter.
step (선택 사항)Optional. 숫자 식입니다.Numeric expression. 루프를 통해 매번 counter 증가 하는 양입니다.The amount by which counter is incremented each time through the loop.
statements (선택 사항)Optional. @No__t_0와 Next 사이에 있는 하나 이상의 문 (지정 된 횟수 만큼 실행)One or more statements between For and Next that run the specified number of times.
Continue For (선택 사항)Optional. 제어를 다음 루프 반복으로 전송 합니다.Transfers control to the next loop iteration.
Exit For (선택 사항)Optional. @No__t_0 루프에서 제어를 전달 합니다.Transfers control out of the For loop.
Next 필수 요소.Required. @No__t_0 루프의 정의를 종료 합니다.Terminates the definition of the For loop.

참고

이 문에서는 To 키워드를 사용 하 여 카운터 범위를 지정 합니다.The To keyword is used in this statement to specify the range for the counter. Select ...에서이 키워드를 사용할 수도 있습니다. Case 문과 배열 선언에 있습니다.You can also use this keyword in the Select...Case Statement and in array declarations. 배열 선언에 대 한 자세한 내용은 Dim 문을 참조 하십시오.For more information about array declarations, see Dim Statement.

간단한 예Simple Examples

@No__t_0를 사용 합니다. 일련의 문 집합을 반복 하려는 경우에 Next 구조입니다.You use a For...Next structure when you want to repeat a set of statements a set number of times.

다음 예제에서 index 변수는 1 값으로 시작 하 고 루프가 반복 될 때마다 증가 하 고 index 값이 5에 도달 하면 끝납니다.In the following example, the index variable starts with a value of 1 and is incremented with each iteration of the loop, ending after the value of index reaches 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에 도달 하면 끝납니다.In the following example, the number variable starts at 2 and is reduced by 0.25 on each iteration of the loop, ending after the value of number reaches 0. @No__t_1의 Step 인수는 루프가 반복 될 때마다 0.25 값을 줄입니다.The Step argument of -.25 reduces the value by 0.25 on each iteration of the loop.

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 

잠시 ... End While 문 또는 Do ... Loop 문은 루프에서 문을 실행 하는 횟수를 미리 알 수 없는 경우에 잘 작동 합니다.A While...End While Statement or Do...Loop Statement works well when you don't know in advance how many times to run the statements in the loop. 그러나 루프를 특정 횟수 만큼 실행 하려는 경우 For ... Next 루프를 선택 하는 것이 좋습니다.However, when you expect to run the loop a specific number of times, a For...Next loop is a better choice. 루프를 처음 시작할 때 반복 횟수를 결정 합니다.You determine the number of iterations when you first enter the loop.

중첩 루프Nesting Loops

루프 하나를 다른 루프에 배치 하 여 For 루프를 중첩할 수 있습니다.You can nest For loops by putting one loop within another. 다음 예제에서는 중첩 된 For를 보여 줍니다. 단계 값이 다른 구조체를 Next 합니다.The following example demonstrates nested For...Next structures that have different step values. 외부 루프는 루프의 모든 반복에 대 한 문자열을 만듭니다.The outer loop creates a string for every iteration of the loop. 내부 루프는 루프의 모든 반복에 대해 루프 카운터 변수를 감소 시킵니다.The inner loop decrements a loop counter variable for every iteration of the loop.

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 변수가 있어야 합니다.When nesting loops, each loop must have a unique counter variable.

서로 다른 종류의 제어 구조를 중첩할 수도 있습니다.You can also nest different kinds control structures within each other. 자세한 내용은 중첩 컨트롤 구조를 참조 하세요.For more information, see Nested Control Structures.

종료 및 계속Exit For and Continue For

@No__t_0 문은 즉시 For를 끝냅니다 NextThe Exit For statement immediately exits the ForNext 루프를 실행 하 고 제어를 Next 문 다음에 오는 문으로 전달 합니다.loop and transfers control to the statement that follows the Next statement.

@No__t_0 문은 루프의 다음 반복으로 제어를 즉시 전달 합니다.The Continue For statement transfers control immediately to the next iteration of the loop. 자세한 내용은 Continue 문을 참조 하세요.For more information, see Continue Statement.

다음 예에서는 Continue ForExit For 문을 사용 하는 방법을 보여 줍니다.The following example illustrates the use of the Continue For and Exit For statements.

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

@No__t_1에 원하는 수의 Exit For 문을 넣을 수 있습니다. NextYou can put any number of Exit For statements in a ForNext 실행.loop. 중첩 된 For 내에서 사용 하는 경우 NextWhen used within nested ForNext 루프, Exit For 가장 안쪽의 루프를 종료 하 고 다음으로 높은 중첩 수준으로 제어를 전달 합니다.loops, Exit For exits the innermost loop and transfers control to the next higher level of nesting.

Exit For은 일부 조건을 평가한 후에 자주 사용 됩니다 (예: If ... Then ... Else 구조체).Exit For is often used after you evaluate some condition (for example, in an If...Then...Else structure). 다음 조건에 Exit For를 사용 하는 것이 좋습니다.You might want to use Exit For for the following conditions:

  • 계속 반복은 불필요 하거나 불가능 합니다.Continuing to iterate is unnecessary or impossible. 잘못 된 값 또는 종료 요청은이 조건을 만들 수 있습니다.An erroneous value or a termination request might create this condition.

  • @No__t_0 ... Catch ... Finally 문이 예외를 catch 합니다.A Try...Catch...Finally statement catches an exception. @No__t_1 블록의 끝에 Exit For를 사용할 수 있습니다.You might use Exit For at the end of the Finally block.

  • 무한 하거나 무한 한 횟수를 실행 하는 루프 인 무한 루프를 사용할 수 있습니다.You have an endless loop, which is a loop that could run a large or even infinite number of times. 이러한 조건을 감지 하면 Exit For를 사용 하 여 루프를 이스케이프할 수 있습니다.If you detect such a condition, you can use Exit For to escape the loop. 자세한 내용은 다음 을 참조 하세요. Loop 문.For more information, see Do...Loop Statement.

기술 구현Technical Implementation

@No__t_0 하는 경우 ... Next 루프가 시작 되 고 Visual Basic start, endstep 평가 됩니다.When a For...Next loop starts, Visual Basic evaluates start, end, and step. Visual Basic는 현재이 값을 평가한 다음 counterstart를 할당 합니다.Visual Basic evaluates these values only at this time and then assigns start to counter. 문 블록을 실행 하기 전에 Visual Basic counterend와 비교 합니다.Before the statement block runs, Visual Basic compares counter to end. @No__t_0 이미 end 값 보다 크거나 step가 음수인 경우 더 작은 경우 For 루프가 종료 되 고 Next 문 다음에 오는 문으로 제어가 전달 됩니다.If counter is already larger than the end value (or smaller if step is negative), the For loop ends and control passes to the statement that follows the Next statement. 그렇지 않으면 문 블록이 실행 됩니다.Otherwise, the statement block runs.

Visual Basic에서 Next 문을 발견할 때마다 step으로 counter 증가 하 고 For 문으로 돌아갑니다.Each time Visual Basic encounters the Next statement, it increments counter by step and returns to the For statement. 다시 end counter를 비교한 다음 결과에 따라 블록을 실행 하거나 루프를 종료 합니다.Again it compares counter to end, and again it either runs the block or exits the loop, depending on the result. 이 프로세스는 counter end 전달 되거나 Exit For 문이 발생할 때까지 계속 됩니다.This process continues until counter passes end or an Exit For statement is encountered.

@No__t_0가 end를 전달할 때까지 루프가 중지 되지 않습니다.The loop doesn't stop until counter has passed end. @No__t_0 end와 같으면 루프가 계속 됩니다.If counter is equal to end, the loop continues. 블록을 실행할지 여부를 결정 하는 비교는 step가 양수인 경우 end <= counter 하 고 counter가 음수인 경우 >= end step 합니다.The comparison that determines whether to run the block is counter <= end if step is positive and counter >= end if step is negative.

루프 내에서 counter 값을 변경 하는 경우 코드를 읽고 디버그 하기가 더 어려울 수 있습니다.If you change the value of counter while inside a loop, your code might be more difficult to read and debug. @No__t_0, end 또는 step 값을 변경 해도 루프가 처음 입력 될 때 결정 된 반복 값에는 영향을 주지 않습니다.Changing the value of start, end, or step doesn't affect the iteration values that were determined when the loop was first entered.

루프를 중첩 하는 경우 컴파일러는 내부 수준의 Next 문 앞에 있는 외부 중첩 수준의 Next 문을 발견 하면 오류를 표시 합니다.If you nest loops, the compiler signals an error if it encounters the Next statement of an outer nesting level before the Next statement of an inner level. 그러나 컴파일러는 모든 Next 문에서 counter 지정 하는 경우에만 이러한 중복 오류를 감지할 수 있습니다.However, the compiler can detect this overlapping error only if you specify counter in every Next statement.

Step 인수Step Argument

@No__t_0의 값은 양수 또는 음수일 수 있습니다.The value of step can be either positive or negative. 이 매개 변수는 다음 표에 따라 루프 처리를 결정 합니다.This parameter determines loop processing according to the following table:

단계 값Step value 루프 실행Loop executes if
양수 또는 0Positive or zero counter <= end
음수Negative counter >= end

@No__t_0 기본값은 1입니다.The default value of step is 1.

Counter 인수Counter Argument

다음 표에서는 counter 전체 For…Next 루프로 범위가 지정 된 새 지역 변수를 정의할 지 여부를 나타냅니다.The following table indicates whether counter defines a new local variable that’s scoped to the entire For…Next loop. 이러한 결정은 datatype 있는지 여부와 counter 이미 정의 되어 있는지 여부에 따라 달라 집니다.This determination depends on whether datatype is present and whether counter is already defined.

@No__t_0 제공 되나요?Is datatype present? @No__t_0 이미 정의 되어 있나요?Is counter already defined? Result (counter에서 전체 For...Next 루프로 범위가 지정 된 새 지역 변수를 정의 하는지 여부)Result (whether counter defines a new local variable that’s scoped to the entire For...Next loop)
아니요No Yes 아니요. counter 이미 정의 되어 있기 때문입니다.No, because counter is already defined. @No__t_0 범위가 프로시저에 로컬인 경우 컴파일 타임 경고가 발생 합니다.If the scope of counter isn't local to the procedure, a compile-time warning occurs.
아니요No 아니요No 예.Yes. 데이터 형식은 start, endstep 식에서 유추 됩니다.The data type is inferred from the start, end, and step expressions. 형식 유추에 대 한 자세한 내용은 Option 유추 문지역 형식 유추를 참조 하세요.For information about type inference, see Option Infer Statement and Local Type Inference.
Yes Yes 예, 하지만 기존 counter 변수가 프로시저 외부에서 정의 된 경우에만 가능 합니다.Yes, but only if the existing counter variable is defined outside the procedure. 해당 변수는 분리 된 상태로 유지 됩니다.That variable remains separate. 기존 counter 변수의 범위가 프로시저에 로컬인 경우 컴파일 타임 오류가 발생 합니다.If the scope of the existing counter variable is local to the procedure, a compile-time error occurs.
Yes 아니요No 예.Yes.

@No__t_0 데이터 형식은 다음 형식 중 하나 여야 하는 반복의 유형을 결정 합니다.The data type of counter determines the type of the iteration, which must be one of the following types:

  • @No__t_0, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single 또는 0입니다.A Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, or Double.

  • Enum 문을사용 하 여 선언 하는 열거형입니다.An enumeration that you declare by using an Enum Statement.

  • Object입니다.An Object.

  • 다음 연산자를 포함 하는 T 형식입니다. 여기서 BBoolean 식에서 사용할 수 있는 형식입니다.A type T that has the following operators, where B is a type that can be used in a Boolean expression.

    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

@No__t_1 문에서 counter 변수를 선택적으로 지정할 수 있습니다.You can optionally specify the counter variable in the Next statement. 이 구문은 특히 For 루프가 중첩 된 경우 프로그램의 가독성을 향상 시킵니다.This syntax improves the readability of your program, especially if you have nested For loops. 해당 For 문에 표시 되는 변수를 지정 해야 합니다.You must specify the variable that appears in the corresponding For statement.

@No__t_0, endstep 식은 counter 형식으로 확대 되는 모든 데이터 형식으로 계산 될 수 있습니다.The start, end, and step expressions can evaluate to any data type that widens to the type of counter. @No__t_0에 사용자 정의 형식을 사용 하는 경우 CType 변환 연산자를 정의 하 여 start, end 또는 step 형식을 counter 형식으로 변환 해야 할 수 있습니다.If you use a user-defined type for counter, you might have to define the CType conversion operator to convert the types of start, end, or step to the type of counter.

예제Example

다음 예제에서는 제네릭 목록에서 모든 요소를 제거 합니다.The following example removes all elements from a generic list. For Each ... 다음 문에서 예제는 For을 보여 줍니다. 내림차순으로 반복 되는 Next 문입니다.Instead of a For Each...Next Statement, the example shows a For...Next statement that iterates in descending order. 이 예제에서는 removeAt 메서드로 인해 제거 된 요소 뒤의 요소가 더 낮은 인덱스 값을 갖도록 하기 때문에이 기술을 사용 합니다.The example uses this technique because the removeAt method causes elements after the removed element to have a lower index value.

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

예제Example

다음 예제에서는 Enum 문을사용 하 여 선언 된 열거형을 반복 합니다.The following example iterates through an enumeration that's declared by using an Enum Statement.

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

예제Example

다음 예제에서 문 매개 변수는 +, -, >=<= 연산자에 대 한 연산자 오버 로드가 있는 클래스를 사용 합니다.In the following example, the statement parameters use a class that has operator overloads for the +, -, >=, and <= operators.

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

참조See also