Sdílet prostřednictvím


For...Next – příkaz (Visual Basic)

Skupiny příkazů se opakuje podle zadaného počtu opakování.

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

Části

Část

Description

counter

Vyžaduje For prohlášení.Číselné proměnné.Řídicí proměnná smyčky.Další informace naleznete v části Čítač Argument uvedeném dále v tomto tématu.

datatype

Nepovinné.Datový typ counter.Další informace naleznete v části Čítač Argument uvedeném dále v tomto tématu.

start

Povinné.Číselný výraz.Počáteční hodnota counter.

end

Povinné.Číselný výraz.Výsledná hodnota counter.

step

Nepovinné.Číselný výraz.Hodnota, o kterou counter je zvýšen při každém průchodu smyčkou.

statements

Nepovinné.Jeden nebo více příkazů mezi For a Next , spustit zadaným počtem opakování.

Continue For

Nepovinné.Předává řízení na další opakování smyčky.

Exit For

Nepovinné.Převede ovládací prvek z For smyčky.

Next

Povinné.Ukončí definici For smyčky.

[!POZNÁMKA]

To k určení rozsahu čítače v tomto výrazu použít klíčové slovo.Můžete také použít klíčové slovo this Select...Case – příkaz (Visual Basic) a deklarace polí.Další informace o deklarace polí naleznete v tématu Dim – příkaz (Visual Basic).

Jednoduché příklady

You use a For...Next struktury pro určený sadu příkazů nastavit počet opakování.

V následujícím příkladu index proměnné začíná hodnotou 1 a je zvýšen při každé iteraci smyčky, končí po hodnotu index dosáhne 5.

For index As Integer = 1 To 5
    Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5

V následujícím příkladu number proměnné začíná 2 a je snížena o 0,25 při každém opakování smyčky, končí po hodnotu number dosáhne hodnoty 0.Step Argumentu -.25 snižuje hodnotu 0,25 při každém opakování smyčky.

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 

Tip

A While...End While – příkaz (Visual Basic) nebo Do...Loop – příkaz (Visual Basic) funguje dobře, pokud si nejste jisti předem kolikrát chcete-li spustit příkazy ve smyčce.Pokud očekáváte však spuštění smyčky konkrétní počet opakování, For...Next smyčka je lepší volbou.Při prvním zadání smyčky, určete počet iterací.

Vnořené smyčky

Můžete vnořovat For smyčky vložením jedné smyčky v rámci jiného.Následující příklad ukazuje vnořený For...Next struktury, které mají hodnoty různých krok.Vnější smyčka vytvoří řetězec pro každé opakování smyčky.Vnitřní smyčka snížení hodnoty proměnné čítače smyčky pro každé opakování smyčky.

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

Při vnoření smyčky, každé smyčce musí mít jedinečné counter proměnné.

Můžete také vnořit struktury řízení různých druhů do sebe.Další informace naleznete v tématu Vnořené řídicí struktury (Visual Basic).

Pro ukončení a pokračovat

Exit For Prohlášení okamžitě ukončí For...Next smyčky a kdy řízení příkazu, který následuje Next prohlášení.

Continue For Příkaz předá řízení bezprostředně následující iteraci smyčky.Další informace naleznete v tématu Continue – příkaz (Visual Basic).

Následující příklad ukazuje použití Continue For a Exit For příkazy.

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

Můžete umístit libovolný počet Exit For prohlášení v For...Next loop.Při použití v rámci vnořené For...Next smyčky, Exit For ukončí vnitřní smyčka a převede ovládací prvek na nejbližší vyšší úrovně vnoření.

Exit Forje často používán po vyhodnocení některé podmínky (například v If...Then...Else struktury).Můžete chtít použít Exit For pro následující podmínky:

  • Pokračováním iterace je zbytečné nebo nemožné.Tato podmínka může vytvořit zadání chybné hodnoty nebo požadavek na ukončení.

  • A Try...Catch...Finally příkaz zachytí výjimku.Můžete použít Exit For na konci Finally bloku.

  • Máte nekonečné smyčce, což je smyčky, která by mohla spustit velký nebo dokonce nekonečné udává, kolikrát.Pokud odhalíte takové podmínky můžete použít Exit For k návratu smyčky.Další informace naleznete v tématu Do...Loop – příkaz (Visual Basic).

Technická implementace

When a For...Next spuštění cyklu, je vyhodnocen jako Visual Basic start, end, a step.Visual Basic vyhodnocuje pouze na tento čas a potom přiřadí tyto hodnoty start na counter.Před příkaz blokovat spuštění porovná Visual Basic counter na end.Pokud counter je větší než end hodnotu (nebo menší, pokud step je negativní), For smyčky skončí a řízení průchodů na příkaz, který následuje Next prohlášení.Jinak se spustí příkaz blokovat.

Pokaždé, když dostal jazyka Visual Basic Next prohlášení, zvýší counter ve step a vrátí se For prohlášení.Znovu porovnává counter na end, a znovu ho bloku se spustí nebo ukončí smyčku, v závislosti na výsledku.Tento proces pokračuje, dokud counter předává end nebo Exit For zjistil prohlášení.

Smyčka nezastaví až do counter byl předán end.Pokud counter se rovná end, cyklus pokračuje.Porovnání, která určuje, zda spuštění bloku je counter < = end -li step je pozitivní a counter > = end -li step je negativní.

Pokud změníte hodnotu counter při uvnitř smyčky, váš kód může být obtížnější pro čtení a ladění.Změna hodnoty start, end, nebo step nemá žádný vliv na hodnoty iterace, které byly určeny při prvním zadání smyčky.

Je-li vnořit smyčky, kompilátor signalizuje chybu Pokud se setká Next příkazu vnější úroveň vnoření před Next prohlášení o vnitřní úroveň.Však kompilátor může zjistit to překrývající se chyba pouze v případě, že zadáte counter v každé Next prohlášení.

Argument krok

Hodnota step může být pozitivní nebo negativní.Tento parametr určuje smyčku zpracování podle následující tabulky:

Hodnotou kroku

Provede smyčku, pokud

Pozitivní nebo nula.

counter< =end

Negativní

counter> =end

Výchozí hodnota step je 1.

Čítač Argument

Následující tabulka udává, zda counter definuje nové místní proměnné, který je zaměřen na celou For…Next smyčky.Toto rozhodnutí závisí na tom, zda datatype je k dispozici a zda counter je již definován.

Je datatype současné?

Je counter již definován?

Výsledek (zda counter definuje nové místní proměnné, který je zaměřen na celou For...Next smyčky)

Ne

Ano

Ne, protože counter je již definován.Pokud rozsah counter není místní, postupu, dojde k upozornění v době kompilace.

Ne

Ne

Ano.Datový typ je odvozen z start, end, a step výrazy.Chcete-li zobrazit informace o odvození typu proměnné, viz Option Infer – příkaz a Odvození místního typu (Visual Basic).

Ano

Ano

Ano, ale pouze tehdy, pokud stávající counter proměnná je definována mimo danou proceduru.Tato proměnná zůstane samostatné.Pokud stávající rozsah counter proměnné je místní řízení, dojde k chybě kompilace.

Ano

Ne

Ano.

Datový typ counter Určuje typ iterace, která musí být jeden z následujících typů:

  • A Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single, or Double.

  • Výčet, který deklarujete pomocí technologie Enum – příkaz (Visual Basic).

  • An Object.

  • Typ T , který má následující operátory, kde B je typ, který lze použít v Boolean výrazu.

    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

Nepovinně lze uvést counter v proměnné Next prohlášení.Tato syntaxe zlepšuje čitelnost programu, zejména v případě, že můžete vnořovat For smyčky.Je nutné zadat proměnnou, která se zobrazí v odpovídajících For prohlášení.

start, end, A step výrazy mohou vyhodnotit na datový typ, který rozšiřuje typ counter.Pokud použijete uživatelem definovaný typ pro counter, bude pravděpodobně nutné definovat CType operátor převodu k převodu typů start, end, nebo step druhu counter.

Příklad

Následující příklad odebere všechny prvky z obecný seznam.Místo For Each...Next – příkaz (Visual Basic), příklad ukazuje For...Next prohlášení, která iteruje v sestupném pořadí.Příklad používá tuto techniku, protože removeAt metoda způsobí, že prvky po odebraný prvek, který chcete mít nižší hodnotu indexu.

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

Tento příklad prochází výčet, který je deklarován pomocí technologie Enum – příkaz (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

V následujícím příkladu parametry příkazu použít třídu, která má operátor přetížení +, -, >=, a <= operátory.

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

Viz také

Referenční dokumentace

While...End While – příkaz (Visual Basic)

Do...Loop – příkaz (Visual Basic)

Exit – příkaz (Visual Basic)

List

Koncepty

Struktury smyčky (Visual Basic)

Vnořené řídicí struktury (Visual Basic)

Další zdroje

Kolekce (C# and Visual Basic)