Цикл for в Kotlin 1.9: подробное руководство
Цикл for в Kotlin
Что такое цикл и зачем он нужен?
Представь, что тебе нужно написать на доске 10 раз одну и ту же фразу: "Я молодец!". Ты можешь писать её вручную 10 раз, но это долго и скучно. А что, если бы у тебя была волшебная ручка, которая сама повторяет действие нужное количество раз? В программировании такую "волшебную ручку" называют циклом.
Цикл for — это конструкция, которая позволяет выполнять один и тот же блок кода несколько раз подряд. Мы сами указываем, сколько раз это нужно сделать или по каким значениям нужно "пройтись".
Где это может пригодиться?
- Вывести на экран числа от 1 до 10
- Повторить фразу 5 раз (как в задаче с банкоматом)
- Посчитать сумму всех чисел от 1 до N
- Сымитировать подъём лифта по этажам
Основной синтаксис цикла for
В Kotlin цикл for чаще всего используется вместе с диапазоном (range). Диапазон — это последовательность чисел от одного до другого. Записывается он через две точки: 1..5 (числа 1, 2, 3, 4, 5).
Базовая структура цикла выглядит так:
for (переменная in диапазон) {
// код, который выполняется для каждого значения
}
Как это работает? Переменная по очереди принимает каждое значение из диапазона. Для каждого значения выполняется код внутри фигурных скобок.
Пример 1: Выведем числа от 1 до 5.
fun main() {
for (i in 1..5) {
println(i)
}
}
Результат в консоли:
1
2
3
4
5
Пример 2: Выведем фразу "Привет!" 3 раза.
fun main() {
for (i in 1..3) {
println("Привет!")
}
}
Результат в консоли:
Привет!
Привет!
Привет!
Разные виды диапазонов
Диапазон может быть не только возрастающим. Kotlin позволяет гибко настраивать последовательность:
1..10— от 1 до 10 включительно5..1— так писать нельзя! Диапазон должен идти от меньшего к большему5 downTo 1— от 5 до 1 (убывающий диапазон)1..10 step 2— от 1 до 10 с шагом 2 (будет: 1, 3, 5, 7, 9)10 downTo 1 step 3— от 10 до 1 с шагом 3 (будет: 10, 7, 4, 1)
Пример 3: Выведем числа от 10 до 1 в обратном порядке.
fun main() {
for (i in 10 downTo 1) {
println(i)
}
}
Пример 4: Выведем только чётные числа от 2 до 10.
fun main() {
for (i in 2..10 step 2) {
println(i)
}
}
Разбор типичных задач
Давай посмотрим, как цикл for помогает решать задачи, похожие на те, что тебе предстоят.
Задача "Лифт": Вы зашли в лифт на нулевом этаже и нажали кнопку 5-го этажа. Лифт показывает каждый этаж, мимо которого проезжает. Нужно вывести все этажи от 1 до 5.
fun main() {
val targetFloor = 5 // Этаж, на который нужно подняться
for (floor in 1..targetFloor) {
println("Лифт проезжает этаж №$floor")
}
println("Вы приехали на $targetFloor этаж!")
}
Результат:
Лифт проезжает этаж №1
Лифт проезжает этаж №2
Лифт проезжает этаж №3
Лифт проезжает этаж №4
Лифт проезжает этаж №5
Вы приехали на 5 этаж!
Задача "Банкомат": Банкомат просит повторить фразу "Код подтверждён" 3 раза. Напишем программу, которая выводит эту фразу нужное количество раз.
fun main() {
val repeatCount = 3 // Сколько раз нужно повторить
for (i in 1..repeatCount) {
println("Код подтверждён")
}
}
Результат:
Код подтверждён
Код подтверждён
Код подтверждён
Задача "Кибербезопасность": Нужно проверить 5 файлов на вирусы и вывести номер каждого проверяемого файла.
fun main() {
val totalFiles = 5
for (fileNumber in 1..totalFiles) {
println("Проверяю файл №$fileNumber... Вирусов не найдено.")
}
println("Проверка завершена!")
}
Частые ошибки новичков
- Забывают фигурные скобки. Если в цикле только одна команда, скобки можно опустить, но для начинающих лучше всегда их ставить — так код понятнее и безопаснее.
- Путают переменную цикла. Переменная (например,
i) существует только внутри цикла. Не пытайся использовать её после завершения цикла — это вызовет ошибку. - Неправильный диапазон. Если написать
5..1, цикл не выполнится ни разу, потому что диапазон пустой. ИспользуйdownToдля обратного порядка. - Путают
..иuntil.1..5включает 5, а1 until 5— не включает 5 (будет 1, 2, 3, 4). Для начинающих проще использовать... - Забывают про шаг. Если нужно вывести только чётные числа, не пиши
for (i in 1..10)и проверку внутри — используйstep 2.
Итоговый пример: "День рождения"
Представь, что ты принёс в класс 15 конфет и хочешь раздать их одноклассникам по одной. В классе 10 учеников. Напишем программу, которая показывает, кому и сколько конфет досталось.
fun main() {
val totalCandies = 15
val classmates = 10
var candiesLeft = totalCandies
println("Начинаем раздавать конфеты!")
for (student in 1..classmates) {
if (candiesLeft > 0) {
println("Ученик №$student получил 1 конфету. Осталось: ${candiesLeft - 1}")
candiesLeft--
} else {
println("Ученик №$student остался без конфеты. Конфеты закончились!")
}
}
println("Раздача завершена! Осталось конфет: $candiesLeft")
}
Результат (фрагмент):
Начинаем раздавать конфеты!
Ученик №1 получил 1 конфету. Осталось: 14
Ученик №2 получил 1 конфету. Осталось: 13
...
Ученик №10 получил 1 конфету. Осталось: 5
Раздача завершена! Осталось конфет: 5
Обрати внимание: мы использовали переменную candiesLeft, которая меняется с каждым шагом цикла. Это очень полезный приём — внутри цикла можно не только выводить данные, но и считать что-то, накапливать результат или проверять условия.
Цикл for — твой верный помощник, когда нужно сделать что-то много раз. Чем больше ты будешь практиковаться, тем быстрее научишься выбирать правильный диапазон и шаг для решения любой задачи!