Еще одним видом управляющих конструкций являются циклы. В VB.NET используется несколько видов циклов.
For...Next
For Each...Next
While
Do
В этом цикл выполняется определенное число раз, причем это число задается счетчиком:
For i As Integer = 1 To 9 Console.WriteLine("Квадрат числа {0} равен {1}", i, i * i) Next
Здесь переменная i выполняет роль счетчика. После слова To мы помещаем максимальное значение счетчика. При каждом цикле значение счетчика увеличивается на единицу. И это значение сравнивается со значением после To. Если эти два значения равны, то цикла прекращает свою работу.
При работе с циклами мы можем увеличивать значение счетчика при каждом проходе не только на единицу, но и вообще на любое число. Для этого нужно либо использовать ключевое слово Step и после него указать шаг цикла, на который будет увеличиваться значение счетчика, либо можно увеличивать счетчик непосредственно в цикле:
For i As Integer = 1 To -9 Step -1 For j As Integer = 1 To 9 Console.WriteLine("Произведение чисел i и j равно {0}", i * j) j += 1 Next Next
Обратите внимание, что в качестве шага в первом цикле выбрано отрицательное значение и значение счетчика с каждым проходом уменьшается на единицу. Во внутреннем цикле счетчик j при каждом проходе увеличивается на 2, так как он по умолчанию увеличивается на единицу, и еще мы явным образом увеличиваем его в цикле на единицу. В итоге внутренний цикл отрабатывает пять раз, а внешний девять, то есть фактически получается 45 циклов.
Цикл For Each осуществляет перебор элементов в определенной группе, например, в массиве или в коллекции. Предположим у нас есть некоторый массив типа Integer и нам надо инициализировать этот массив случайными значениями и затем вывести все его элементы на экран:
'Создаем массив из пяти чисел Dim nums(4) As Integer Dim r As New Random() 'инициализируем массив For i As Integer = 0 To nums.Length - 1 nums(i) = r.Next(100) Next 'Выводим элементы массива For Each i As Integer In nums Console.Write("{0} ", i) Next
В выражении For Each мы сначала указываем переменную, которая будет принимать значения элементов массива. А после ключевого слова In указываем группу, в которой надо перебрать все элементы.
В цикл While выполняется до тех пор, пока соблюдается определенное условие, указанное после слова While:
Dim j As Integer = 10 While j > 0 Console.WriteLine(j) j -= 1 End While
Цикл Do, также как и цикл While, выполняется, пока соблюдается определенное условие. Однако он имеет разные формы. Так, в следующем примере сначала проверяется условие, а затем выполняется блок кода, определенный в цикле:
Dim j As Integer = 10 Do While j > 0 Console.WriteLine(j) j -= 1 Loop
В данном случае цикл выполняется, пока значение j больше нуля. Но есть еще одна запись, где вместо слова While используется слово Until, а цикл выполняется пока не соблюдено определенное условие, то есть пока значение j не станет меньше нуля:
Dim j As Integer = 10 Do Until j < 0 Console.WriteLine(j) j -= 1 Loop
Если изначально условие, заданное в цикле, неверно, то цикл не будет работать. Но мы можем определить проверку в конце цикла, и таким образом, наш цикл как минимум один раз отработает:
Dim j As Integer = -1 Do Console.WriteLine(j) j -= 1 Loop Until j < 0 'либо Do Console.WriteLine(j) j -= 1 Loop While j > 0
Нередко возникает необходимость не дожидаться окончания цикла, а сразу же выйти из цикла, в случае соблюдения определенного условия. Для
этого используют оператор Exit, после которого указывают тип цикла, из которого осуществляется выход, например, Exit Do (Exit While)
:
Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 100 num -= 1 If num < 50 Then Exit For Next Console.WriteLine(num)
Существует и другая задача - осуществить выход не из цикла, а из текущего прохода или итерации и перейти к следующему. Для этого используют
оператор Continue, после которого указывают тип цикла, из которого осуществляется выход, например, Continue While
:
Dim r As New Random() Dim num As Integer = r.Next(100) For i As Integer = 0 To 10 num -= 7 If num < 50 AndAlso num > 25 Then Continue For End If Console.WriteLine(num) Next
В данном случае мы в каждом проходе цикла вычитаем из num число 7 и затем смотрим, не принадлежит ли число num интервалу от 25 до 50. И если принадлежит, переходим к новой итерации цикла, а если нет, то выводим его на экран.