수색…


For ... 다음

For ... Next 루프는 유한 한 횟수만큼 동일한 동작을 반복하는 데 사용됩니다. 다음 루프 내의 명령문은 11 회 실행됩니다. 처음 i 값이 0이 값 1은 값 10를 가질 것이다 마지막 시간을 가질 것이다 번째 시간을 가질 것이다.

For i As Integer = 0 To 10
    'Execute the action
    Console.Writeline(i.ToString)
Next

모든 정수 표현식을 사용하여 루프를 매개 변수화 할 수 있습니다. 제어 변수 (이 경우 i )가 Next 나오는 경우에도 허용되어야하지만 필수는 아닙니다. 제어 변수는 For 문에서보다는 미리 선언 할 수 있습니다.

Dim StartIndex As Integer = 3
Dim EndIndex As Integer = 7
Dim i As Integer

For i = StartIndex To EndIndex - 1
    'Execute the action
    Console.Writeline(i.ToString)
Next i

시작 및 끝 정수를 정의 할 수 있으면 다음과 같이 다른 객체를 직접 참조하는 루프를 만들 수 있습니다.

For i = 0 to DataGridView1.Rows.Count - 1
    Console.Writeline(DataGridView1.Rows(i).Cells(0).Value.ToString)
Next

그러면 DataGridView1 모든 행을 반복하여 열 1 값을 콘솔에 쓰는 작업을 수행합니다. (-1은 카운트 된 행의 첫 번째 행이 0이 아닌 1이되기 때문입니다)

제어 변수가 증가해야하는 f}을 정의 할 수도 있습니다.

For i As Integer = 1 To 10 Step 2
    Console.Writeline(i.ToString)
Next 

이 결과는 다음과 같습니다.

1 3 5 7 9

제어 변수를 감소시킬 수도 있습니다 (카운트 다운).

For i As Integer = 10 To 1 Step -1
    Console.Writeline(i.ToString)
Next

이 결과는 다음과 같습니다.

10 9 8 7 6 5 4 3 2 1

루프 외부에서 제어 변수를 사용 (읽기 또는 갱신)하지 마십시오.

For Each ... 항목 컬렉션을 반복하는 다음 루프

For Each...Next 루프를 사용하여 IEnumerable 형식을 반복 할 수 있습니다. 여기에는 배열, 목록 및 IEnumerable 유형이거나 IEnumerable을 반환하는 기타 항목이 포함됩니다.

DataTable의 Rows 속성을 반복하는 예제는 다음과 같습니다.

For Each row As DataRow In DataTable1.Rows
    'Each time this loops, row will be the next item out of Rows
    'Here we print the first column's value from the row variable.
    Debug.Print(Row.Item(0))
Next 

주목할 점은 For Each 루프에서 컬렉션을 수정하면 안됩니다. 그렇게하면 메시지와 함께 System.InvalidOperationException 이 발생합니다.

컬렉션이 수정되었습니다. 열거 연산이 실행되지 않을 수 있습니다.

조건이 참인 동안 루프를 반복합니다.

While 루프는 조건을 평가하여 시작합니다. 참이면 루프의 본문이 실행됩니다. 루프 본문이 실행 된 후 While 조건이 다시 계산되어 본문을 다시 실행할지 여부를 결정합니다.

Dim iteration As Integer = 1
While iteration <= 10
  Console.Writeline(iteration.ToString() & " ")

  iteration += 1
End While

이 결과는 다음과 같습니다.

1 2 3 4 5 6 7 8 9 10

경고 : While 루프는 무한 루프로 이어질 수 있습니다. iteration 을 증가시키는 코드 줄이 제거되면 어떻게 될지 생각해보십시오. 이 경우 조건은 결코 True가 아니며 루프는 무한정 계속됩니다.

할 ... 루프

Do...Loop 을 사용하여 문 블록을 반복합니다. While 또는 조건이 true가 Until 루프의 시작 또는 끝에서 조건을 확인합니다.

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
Loop While x < 10

또는

Dim x As Integer = 0
Do While x < 10
    Console.Write(x & " ")
    x += 1
Loop

0 1 2 3 4 5 6 7 8 9

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
Loop Until x = 10

또는

Dim x As Integer = 0
Do Until x = 10
    Console.Write(x & " ")
    x += 1
Loop

0 1 2 3 4 5 6 7 8 9

Continue Do 는 루프의 다음 반복으로 건너 뛰는 데 사용할 수 있습니다.

Dim x As Integer = 0
Do While x < 10
    x += 1
    If x Mod 2 = 0 Then
        Continue Do
    End If
    Console.Write(x & " ")
Loop

1 3 5 7 9

Exit Do 하여 루프를 Exit Do 할 수 있습니다.이 예에서 조건이 없으면 무한 루프가 발생합니다.

Dim x As Integer = 0
Do
    Console.Write(x & " ")
    x += 1
    If x = 10 Then
        Exit Do
    End If
Loop

0 1 2 3 4 5 6 7 8 9

단락 회로

ExitContinue 문을 사용하여 루프가 종료되거나 어느 시점에서든 일찍 계속 될 수 있습니다.

종료 중

루프를 빠져 나갈 수 있습니다. 이렇게하려면 Exit 라는 키워드를 루프의 이름과 함께 사용할 수 있습니다.

고리 출구 명령문
에 대한 Exit For
각각 Exit For
해야 할 일 Exit Do
동안 Exit While

루프를 조기에 종료하는 것은 응용 프로그램의 요구를 충족시키기 위해 필요한 횟수 만 반복함으로써 성능을 향상시키는 좋은 방법입니다. 다음은 숫자 2 찾으면 루프가 종료되는 예제입니다.

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SoughtValue As Integer = 2
Dim SoughtIndex
For Each i In Numbers
    If i = 2 Then 
        SoughtIndex = i
        Exit For
    End If
Next
Debug.Print(SoughtIndex)

계속하기

일찍 끝내는 것뿐만 아니라 다음 루프 반복으로 넘어갈 필요가 있다고 결정할 수도 있습니다. 이는 Continue 문을 사용하여 쉽게 수행 할 수 있습니다. Exit 와 마찬가지로 루프 이름으로 진행됩니다.

고리 계속 진술서
에 대한 Continue For
각각 Continue For
해야 할 일 Continue Do
동안 Continue While

다음은 짝수가 합계에 추가되는 것을 방지하는 예입니다.

Dim Numbers As Integer() = {1,2,3,4,5}
Dim SumOdd As Integer = 0
For Each i In Numbers
    If Numbers(i) \ 2 = 0 Then Continue For
    SumOdd += Numbers(i)
Next

사용법 조언

Exit 또는 Continue 를 사용하는 대신 사용할 수있는 두 가지 대체 기술이 있습니다.

새 Boolean 변수를 선언하고 하나의 값으로 초기화 한 다음 조건부로 루프 내의 다른 값으로 설정할 수 있습니다. 이후의 반복에서 루프 내부의 명령문 실행을 피하기 위해 해당 변수에 기초한 조건문 (예 : If )을 사용합니다.

Dim Found As Boolean = False
Dim FoundIndex As Integer
For i As Integer = 0 To N - 1
    If Not Found AndAlso A(i) = SoughtValue Then
        FoundIndex = i
        Found = True
    End If
Next

이 기술에 대한 반대 의견 중 하나는 비효율적 일 수 있다는 것입니다. 예를 들어 위의 예제에서 N 이 1000000이고 배열 A 의 첫 번째 요소가 SoughtValue 와 같은 경우 루프는 유용한 작업을 수행하지 않고 추가 999999 번 반복합니다. 그러나이 기술은 경우에 따라 선명도를 높일 수 있습니다.

루프에서 튀어 나오려면 GoTo 문을 사용할 수 있습니다. GoTo 를 사용하여 루프 안으로 이동할 수 없습니다.

    Dim FoundIndex As Integer
    For i As Integer = 0 To N - 1
        If A(i) = SoughtValue Then
            FoundIndex = i
            GoTo Found
        End If
    Next
    Debug.Print("Not found")
Found:
    Debug.Print(FoundIndex)

이 기술은 때로는 루프에서 벗어나서 루프의 자연스러운 끝 직후에 실행되는 하나 이상의 명령문을 피하는 가장 깔끔한 방법 일 수 있습니다.

효율성, 코드 작성 속도 및 가독성 (유지 보수성)을 고려하여 모든 대안을 고려하고 요구 사항에 가장 적합한 것을 사용하십시오.

가장 좋은 대안 인 경우 그 자리에서 GoTo 를 사용하지 마십시오.

중첩 루프

A nested loop is a loop within a loop, an inner loop within the body of an outer one. How this works is that the first pass of the outer loop triggers the inner loop, which executes to completion. Then the second pass of the outer loop triggers the inner loop again. This repeats until the outer loop finishes. a break within either the inner or outer loop would interrupt this process.

다음 중첩 루프의 구조는 다음과 같습니다.

For counter1=startNumber to endNumber (Step increment)

    For counter2=startNumber to endNumber (Step increment)

        One or more VB statements

    Next counter2

Next  counter1

예 :

    For  firstCounter = 1 to 5

      Print “First Loop of ” + firstCounter

    For   secondCounter= 1 to 4

      Print “Second Loop of ” + secondCounter

    Next secondCounter

  Next firstCounter


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow