Условные циклы
Существует несколько способов повторить блок кода при выполнении определенного условия. В этом разделе мы узнаем, как это сделать с помощью двух циклов: while
и do...while
. Разница между ними заключается в порядке повторения и проверки условия.
Цикл While
Цикл while
включает в себя блок кода и условие, которое является boolean выражением. Если условие true
, цикл инициирует инструкции. Они повторяются до тех пор, пока условие не станет false
. Этот цикл проверяет условие перед выполнением, поэтому он также известен как цикл предварительного тестирования. Взгляните на пример:
while (condition) {
// сделать что-то циклично
}
Блок цикла может содержать инструкции любого типа: объявление переменных, чтение данных из стандартного ввода, условные выражения и даже вложенные циклы.
Вы также можете написать бесконечный цикл, если условие остается true
:
while (true) {
// бесконечно что-то делать
}
Позже мы подробнее рассмотрим бесконечные циклы.
А пока рассмотрим приведенный ниже пример. Программа использует цикл while
для печати целых чисел только в том случае, если переменная меньше 5
.
fun main() {
var i = 0
while (i < 5) {
println(i)
i++
}
println("Завершено")
}
Позвольте нам объяснить работу, стоящую за этим циклом. Во-первых, изменяемой переменной i
присваивается значение 0
. Перед первым выполнением цикла программа проверяет, равно ли выражение i < 5
значению true
. Поскольку i
равно 0
, цикл активируется. Тело цикла содержит две инструкции: во-первых, оно отображает текущее значение i
, а во-вторых, увеличивает его на 1
. После этого выражение i < 5
вычисляется снова. i
становится 1
. Это так же равно true
, поэтому процесс повторяется. Это продолжается до тех пор, пока i
не станет 5
. i < 5
становится false
, поэтому выполнение этого цикла завершается. Программа переходит к следующей команде и выводит "Завершено". Вот вывод этой программы:
0
1
2
3
4
Завершено
Циклы могут использоваться для обработки символов, строк и любых других типов данных. Приведенная ниже программа отображает английские буквы в одной строке.
fun main() {
var letter = 'A'
while (letter <= 'Z') {
print(letter)
letter++
}
}
Программа берет первую букву A
, а затем выполняет цикл до тех пор, пока буква не станет Z
. Программа также печатает текущий символ и переходит к следующему. Таким образом, вывод таков:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Следующий символ (в соответствии с таблицей Юникода) можно получить с помощью оператора инкремента.
Циклы do..while
Сначала выполняется цикл do...while
, после чего программа проверяет условие. Если условие true
, цикл повторяется до тех пор, пока условие не станет false
. Поскольку цикл do...while
проверяет условие после выполнения, он также известен как цикл пост-тестирования. В отличие от цикла while
, который проверяет условие перед выполнением, цикл do..while
представляет собой цикл с условием выхода. Таким образом, тело всегда выполняется по крайней мере один раз.
Этот цикл содержит три части: ключевое слово do
, блок кода и while(condition)
:
do {
// сделать что-то
} while (condition)
Приведенная ниже программа считывает целое число из стандартного ввода и отображает это число. Если пользователь вводит 0
, программа печатает его, а затем останавливается. Приведенный ниже пример показывает работу цикла:
fun main() {
do {
val n = readln().toInt()
println(n)
} while (n > 0)
}
?> Вы можете установить переменную в блоке цикла, а затем использовать ее в условии.
Ввод:
1
2
4
0
3
Вывод:
1
2
4
0
Цикл do...while
также может быть бесконечным, как и цикл while
.
Заключение
В этом разделе мы рассмотрели два основных, но очень полезных цикла: while
и do...while
. У них обоих есть блок кода и условие, разница лишь в порядке их выполнения. Цикл while
проверяет условие перед выполнением блока, цикл do...while
проверяет его после первого выполнения.
На практике программисты не используют do..while
так часто, как while
. Хорошим примером использования этого цикла является программа, которая считывает данные из стандартного ввода до тех пор, пока пользователь не введет определенное число или строку. Теперь вы знаете основы этих циклов.
Last updated