Поделиться через


Оператор For... Next (Visual Basic)

Повторяет группу операторов заданное количество раз.

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

Части

Компонент

Описание

counter

Требуется в операторе For. Числовая переменная. Управляющая переменная цикла.

datatype

Является обязательным, если counter еще не был объявлен. Тип данных counter.

start

Обязательный. Числовое выражение. Начальное значение counter.

end

Обязательный. Числовое выражение. Конечное значение counter.

step

Необязательный. Числовое выражение. Шаг, с которым counter увеличивается при каждом прохождении цикла.

statements

Необязательный. Одно или несколько выражений между For и Next, выполняемых указанное число раз.

Continue For

Необязательный. Передает управление следующей итерации цикла.

Exit For

Необязательный. Передает управление из цикла For.

Next

Обязательный. Завершает определение цикла For.

Примечание

Ключевое слово To используется здесь для задания диапазона счетчика.Оно также используется для задания диапазона значений в Оператор Select...Case (Visual Basic) и в объявлениях массива.Дополнительные сведения об объявлениях массивов см. в разделе Оператор Dim (Visual Basic).

Заметки

Структура For... Next используется при необходимости повторения набора инструкций несколько раз.

При начале цикла For...Next Visual Basic оценивает start, end и step. Это единственный раз, когда оцениваются эти значения. Затем назначается значение start переменной counter. Перед выполнением блока операторов сравниваются counter и end. Если значение counter превысило значение end (или меньше его при отрицательном значении step), цикл For завершается и управление передается оператору, следующему за оператором Next. В противном случае выполняется блок операторов.

Каждый раз при обнаружении оператора Next Visual Basic увеличивает counter на step и возвращается к оператору For. После этого сравниваются counter и end, и в зависимости от результата происходит либо выполнение блока, либо выход из цикла. Этот процесс продолжается до тех пор, пока counter не превысит end, или не встретится оператор Exit For.

Цикл не останавливается до тех пор, пока counter не превысит end. Если counter равен end, то цикл продолжается. Сравнением, определяющим, следует ли выполнять блок, является counter <= end для положительного step и counter >= end для отрицательного step.

Изменение значения counter внутри тела цикла может осложнить читаемость и отладку кода. Изменение значений start, end или step не влияет на значения итерации, определенные при первом входе в цикл.

Совет

Циклы Оператор While... End While (Visual Basic) или Оператор Do...Loop (Visual Basic) удобны, когда неизвестно необходимое число повторов выполнения операторов.Однако, если предполагается повторить цикл определенное число раз, то лучше использовать цикл For...Next.Число итераций определяется при первом входе в цикл.

Аргумент шага

Значение step может быть либо положительным, либо отрицательным. Оно определяет обработку цикла следующим образом:

Значение шага

Цикл выполняется, если

Положительное или нулевое

counter <= end

Отрицательное

counter >= end

Если не указано, step по умолчанию равен 1.

Аргумент счетчика

Если counter не был объявлен вне цикла, то его нужно объявить в операторе For. В этом случае областью действия counter является тело цикла. В то де время, нельзя определять counter и внутри, и снаружи цикла.

Можно дополнительно указать counter в инструкции Next. Это повышает удобочитаемость программы, особенно если имеются вложенные циклы For. Следует указать ту же переменную, что и в соответствующем операторе For.

Тип данных counter определяет тип итерации и должен быть одним из следующих:

  • Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single или Double.

  • Перечисление объявляется с использованием Оператор Enum (Visual Basic).

  • Object.

  • Тип T, имеющий следующие операторы, где тип, который может использоваться в выраженииBoolean — B .

    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

Выражения start, end и step могут быть приведены к любому большему по разрядности типу, чем тип counter. При использовании определяемого пользователем типа для counter это означает, что может потребоваться определить оператор преобразования CType для преобразования типов start, end или step к типу counter.

Вложенные циклы.

Циклы For могут вкладываться друг в друга. При этом каждый цикл должен иметь уникальную переменную counter.

Также можно вложить друг в друга различные виды управляющих структур. Дополнительные сведения см. в разделе Вложенные структуры управления (Visual Basic).

Если инструкция Next внешнего уровня вложенности встретилась раньше, чем Next внутреннего уровня, то компилятор сообщает об ошибке. При этом компилятор может обнаружить эту ошибку перекрывания только в том случае, если в каждой инструкции Next задан counter.

Exit For

Оператор Exit (Visual Basic) немедленно выходит из цикла For…Next и передает управления оператору, следующему за Next.

Любое число операторов Exit For можно разместить в цикле For…Next. При использовании вложенных циклов For…Next конструкция Exit For закрывает самый внутренний цикл и передает управление следующему уровню вложения.

Exit For часто используется после оценки некоторого условия, например в структуре If...Then...Else. Можно использовать Exit For при следующих условиях:

  • Продолжать выполнение итераций не нужно или невозможно. Это может быть вызвано ошибочным значением или запросом на прерывание.

  • Исключение перехватывается в Try...Catch...Finally. Можно использовать Exit For в конце блока Finally.

  • Там бесконечный цикл, то есть цикл, которые может быть запущен большое или даже бесконечное количество раз. При обнаружении таких условий для выхода из цикла можно использовать Exit For. Дополнительные сведения см. в разделе Оператор Do...Loop (Visual Basic).

Оператор Continue For передает управление непосредственно следующей итерации цикла. Дополнительные сведения см. в разделе Оператор Continue (Visual Basic).

Пример

В следующем примере показано использование оператора For…Next. Переменная счетчика цикла с каждой итерацией цикла увеличивается на единицу. Не указан аргументstep , поэтому по умолчанию 1.

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

В следующем примере аргументы counter step являются числами с плавающей запятой типа Double .

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 

В следующем примере демонстрируются вложенные структуры 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

В следующем примере показано удаление всех элементов из универсального списка. Вместо Оператор For Each... Next (Visual Basic), используется оператор 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

В следующем примере показано использование оператора 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 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

Следующий пример проходит через перечисление, объявленное с помощью Оператор Enum (Visual Basic).

Public Enum Mammals
    Buffalo
    Gazelle
    Mongoose
    Rhinocerous
    Whale
End Enum


Public Sub ListSomeMammals()
    For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinocerous
        Debug.Write(mammal.ToString & " ")
    Next
    Debug.WriteLine("")
    ' Output: Gazelle Mongoose Rhinocerous
End Sub

В следующем примере параметры оператора используют класс, имеющий перегрузки оператора для + -, >=и <= операторов.

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

См. также

Задачи

Практическое руководство. Улучшение быстродействия цикла (Visual Basic)

Ссылки

Оператор While... End While (Visual Basic)

Оператор Do...Loop (Visual Basic)

Оператор Exit (Visual Basic)

Оператор For Each... Next (Visual Basic)

List<T>

Основные понятия

Циклические структуры (Visual Basic)

Вложенные структуры управления (Visual Basic)

Журнал изменений

Дата

Журнал

Причина

Декабрь 2010

Реорганизованы примечания и добавлены примеры.

Улучшение информации.