For...Next — Instrukcja (Visual Basic)
Powtarza grupę poleceń określoną liczbę razy.
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Części
Część |
Opis |
---|---|
counter |
Wymagane w For instrukcji.Zmienna numeryczna.Zmienna kontrolna pętli for.Aby uzyskać więcej informacji, zobacz Argument licznika w dalszej części tego tematu. |
datatype |
Opcjonalne.Typ danych z counter.Aby uzyskać więcej informacji, zobacz Argument licznika w dalszej części tego tematu. |
start |
Wymagane.Wyrażenie liczbowe.Początkowa wartość pola counter. |
end |
Wymagane.Wyrażenie liczbowe.Wartość końcową counter. |
step |
Opcjonalne.Wyrażenie liczbowe.Wartość, o którą counter jest zwiększany o jeden przy każdym przejściu pętli. |
statements |
Opcjonalne.Jeden lub więcej instrukcji między For i Next , które uruchomić określoną liczbę razy. |
Continue For |
Opcjonalne.Przekaże kontrolę następnej iteracji pętli. |
Exit For |
Opcjonalne.Przekazuje sterowanie z For pętli. |
Next |
Wymagane.Kończy definicję For pętli. |
[!UWAGA]
To Słowa kluczowego w tej instrukcji jest używany do określania zakresu dla licznika.Można również użyć tego słowa kluczowego w Select...Case — Instrukcja (Visual Basic) i w deklaracji tablicy.Aby uzyskać więcej informacji na temat deklaracje tablic, zobacz Dim — Instrukcja (Visual Basic).
Proste przykłady
You use a For...Next struktury, kiedy mają być powtarzane zestaw instrukcje okreoloną liczbę razy.
W poniższym przykładzie index zmiennej rozpoczyna się od wartości 1 i jest zwiększana przy każdej iteracji pętli, kończące się po wartość index osiągnie 5.
For index As Integer = 1 To 5
Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
W poniższym przykładzie number zmiennej zaczyna się 2 i zmniejsza się o 0,25 w każdej iteracji pętli, kończące się po wartość number będzie wynosić 0.Step Argumentu -.25 powoduje zmniejszenie wartości o 0,25 w każdej iteracji pętli.
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
Porada |
---|
A While...End While — Instrukcja (Visual Basic) lub Do...Loop — Instrukcja (Visual Basic) działa dobrze, jeśli nie wiesz z wyprzedzeniem ile razy, aby uruchomić instrukcji w pętli.Jednak przypadku oczekiwania na uruchomienie pętli określoną liczbę razy, For...Next pętla jest lepszym rozwiązaniem.Aby określić liczbę iteracji, należy przy pierwszym pętli. |
Zagnieżdżanie pętli
Można zagnieździć For pętli poprzez umieszczenie jednej pętli w innym.W poniższym przykładzie zademonstrowano zagnieżdżonych For...Next struktur, które mają wartości różnych krok.Zewnętrzna pętla tworzy ciąg dla każdej iteracji pętli.Wewnętrzna pętla zmniejsza zmienną licznika pętli dla każdej iteracji pętli.
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
Gdy zagnieżdżanie pętli, każdej pętli musi mieć wyjątkowy counter zmiennej.
Można także zagnieżdżać różne rodzaje struktur sterujących w sobie zagnieżdżone.Aby uzyskać więcej informacji, zobacz Zagnieżdżone struktury sterujące (Visual Basic).
Exit dla i kontynuuj przez
Exit For Instrukcja natychmiast zamyka For...Next pętli i transfery sterowania do instrukcji następującej Next instrukcji.
Continue For Instrukcji przekazuje sterowanie od razu do następnej iteracji pętli.Aby uzyskać więcej informacji, zobacz Continue — Instrukcja (Visual Basic).
Poniższy przykład ilustruje użycie Continue For i Exit For instrukcji.
For index As Integer = 1 To 100000
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 And 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
Można umieścić dowolną liczbę Exit For instrukcji w For...Next loop.Użyto zagnieżdżone wewnątrz For...Next pętli, Exit For kończy działanie pętli znajdujące się najniżej i przekazuje sterowanie do następnego wyższego poziomu zagnieżdżenia.
Exit Forczęsto jest używany po ocenić niektóre stan (na przykład w If...Then...Else struktury).Być może chcesz użyć Exit For w następujących warunkach:
Chwili jest niemożliwe lub niepotrzebne.Błędna wartość lub żądanie przerwania może utworzyć ten warunek.
A Try...Catch...Finally instrukcji wyjątek zostanie przechwycony.Można użyć Exit For na koniec Finally bloku.
Masz nieskończonej pętli, czyli pętlę, która może uruchomić dużych lub nawet nieskończoną liczbę razy.Jeśli wykryje taki warunek, można użyć Exit For Aby uniknąć pętli.Aby uzyskać więcej informacji, zobacz Do...Loop — Instrukcja (Visual Basic).
Techniczna realizacja
When a For...Next rozpoczyna pętlę, Visual Basic ocenia start, end, i step.Visual Basic ocenia te wartości tylko w tym czasie, a następnie przypisuje start do counter.Przed instrukcją bloku działa, porównuje języka Visual Basic counter do end.Jeśli counter już jest większy niż end wartość (lub, jeśli mniejszy step jest liczbą ujemną), For kończy się w pętli i kontrola przechodzi do instrukcji następującej Next instrukcji.W przeciwnym razie jest uruchamiany bloku instrukcji.
Za każdym razem spotkania języka Visual Basic Next instrukcji, powiększa on counter przez step i powraca do For instrukcji.Ponownie porównuje counter do end, i ponownie go uruchamia bloku lub kończy działanie pętli, w zależności od wyniku.Ten proces jest kontynuowany aż do counter przechodzi end lub Exit For napotkania instrukcji.
Pętla nie kończy się aż do counter przeszło end.Jeśli counter jest równa end, Pętla kontynuuje.Porównanie, która określa, czy do uruchomienia tego bloku jest counter < = end Jeśli step jest pozytywny i counter > = end Jeśli step jest liczbą ujemną.
Jeżeli zmienisz wartość counter a wewnątrz pętli, może być trudniejszy do odczytywania i debugowania kodu.Zmiana wartości start, end, lub step nie ma wpływu na wartości iteracji, które zostały określone podczas pierwszego wprowadzania pętli.
Jeśli możesz zagnieździć pętli, kompilator sygnalizuje błąd, jeśli napotka Next instrukcji zewnętrzny poziom zagnieżdżenia przed Next oświadczenie o poziomie wewnętrznym.Jednakże kompilator może wykryć to nakładających się błąd, tylko, jeśli określisz counter w każdym Next instrukcji.
Argument krok
Wartość step mogą być dodatnie lub ujemne.Ten parametr określa przetwarzanie pętli zgodnie z następującą tabelą:
Wartość kroku |
Wykonuje pętlę, jeśli |
---|---|
Dodatnią lub zerem |
counter< =end |
Ujemne |
counter> =end |
Wartość domyślna step ma wartość 1.
Argument licznika
Poniższa tabela wskazuje, czy counter definiuje nowej zmiennej lokalnej, który jest objęty zakresem się na całą For…Next pętli.Ustalenie to zależy, czy datatype jest obecny i czy counter jest już zdefiniowany.
Jest datatype obecny? |
Jest counter już zdefiniowane? |
Wynik (czy counter definiuje nowej zmiennej lokalnej, który jest objęty zakresem się na całą For...Next pętli) |
---|---|---|
Nie |
Tak |
Nie, ponieważ counter jest już zdefiniowany.Jeśli zakres counter nie jest lokalne do procedury, pojawia się ostrzeżenie kompilacji. |
Nie |
Nie |
TakTyp danych jest wywnioskować z start, end, i step wyrażenia.Aby uzyskać informacje na temat wnioskowanie, zobacz Option Infer — Instrukcja i Wnioskowanie o typie lokalnym (Visual Basic). |
Tak |
Tak |
Tak, ale tylko wtedy, gdy istniejące counter zmienna jest zdefiniowana poza procedurą.Tej zmiennej pozostanie oddzielona.Jeśli zakres istniejących counter zmienna jest lokalne do procedury, wystąpi błąd kompilacji. |
Tak |
Nie |
Tak |
Typem danych counter określa typ iteracji, które należy wybrać jedną z następujących typów:
A Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, or Double.
Wyliczenie, który został zadeklarowany za pomocą Enum — Instrukcja (Visual Basic).
An Object.
Typ T , który ma następujące operatory, gdzie B typ wskazuje że mogą być używane w Boolean wyrażenie.
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
Opcjonalnie można określić counter zmienna in Next instrukcji.Ta składnia zwiększa czytelność tego programu, zwłaszcza w przypadku, gdy posiadać zagnieżdżonych For pętli.Należy określić zmienną, która pojawia się w odpowiednim For instrukcji.
start, end, I step wyrażenia mogą być dowolnego typu danych, który rozszerza się do rodzaju counter.Jeśli używany jest typ zdefiniowany przez użytkownika dla counter, może być konieczne zdefiniowanie CType operatora konwersji do konwersji typów z start, end, lub step do rodzaju counter.
Przykład
W następującym przykładzie usunięto wszystkie elementy z listy rodzajowy.Zamiast For Each...Next — Instrukcja (Visual Basic), w przykładzie pokazano For...Next instrukcji, która dokonuje iteracji w kolejności malejącej.W przykładzie użyto tej techniki, ponieważ removeAt metoda powoduje, że elementy po elemencie usunięto mieć niższe wartości indeksu.
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
Poniższy przykład wykonuje iterację przez wyliczenie, która jest zadeklarowana za pomocą Enum — Instrukcja (Visual Basic).
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
W poniższym przykładzie parametry instrukcji, należy użyć klasy, która ma przeciążeń operatora dla +, -, >=, i <= podmiotów gospodarczych.
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
Zobacz też
Informacje
While...End While — Instrukcja (Visual Basic)
Do...Loop — Instrukcja (Visual Basic)
Exit — Instrukcja (Visual Basic)
Koncepcje
Struktury pętli (Visual Basic)
Zagnieżdżone struktury sterujące (Visual Basic)