Вы находитесь на странице: 1из 26

Циклы for и

while
На предыдущем уроке
• Массивы
• Списки
• Листы
• Индексы
• Доступ к элементам
• Изменение листа
• Методы листа
• Конкатенация листа
• Основные методы строк
Циклы
Представьте мы хотим сделать одну операцию ( вывести на экран каждое
число в квадрате)
Если у нас есть 1000 чисел, нам нужно будет написать код 1000 раз

println(list[0]*list[0])
println(list[0]*list[0])

print(list[999]*list[0])
Чтобы облегчить нашу жизнь, циклы были созданы
Цикл for
Цикл for пробегается по всем элементам коллекции. В этом плане цикл for
в Kotlin эквивалентен циклу for-each в рядедругих языков
программирования. Его формальная форма выглядит следующим образом:

for (переменная in последовательность){


выполняемые инструкции
}
Например
Выведем все числа от 1 до 9, используя цикл for

for(n in 1..9){
println(n)
}
Например
В данном случае перебирается последовательность чисел от 1 до 9. При
каждом проходе цикла (итерации цикла) из этой последовательности
будет извлекаться элемент и помещаться в переменную n. И через
переменную n можно манипулировать значением элемента. То есть в
данном случае мы получим следующий консольный вывод:
Диапазоны
Для перебора чисел в обратном порядке используйте функцию downTo
вместо ..

fun main() {
for (i in 4 downTo 1) println(i)
}
Диапазоны
Можно перебирать числа с произвольным шагом. Осуществляется это с
помощью функции step

fun main() {
for (i in 1..8 step 2) println(i)
for (i in 8 downTo 1 step 2) println(i)
}
Диапазоны
Если требуется перебрать диапазон чисел, исключая его последний
элемент, то используйте функцию until.

fun main() {
for (i in 1 until 10) { // i in [1, 10), 10 будет исключёна
print(i) // 123456789
}
}
Вложенные циклы
Циклы могут быть вложенными. Например, выведем таблицу умножения:

for(i in 1..9){
for(j in 1..9){
println("${i}x ${j} = ${i * j}")
}
}
Циклы и массивы
Циклы можно использовать для работы с массивами/списками/строками.
Например:

val list: Array<Int> = arrayOf(1,2,3,4,5,6,7)

for (i in 0..6){

println(list[i])

}
>>>?
Циклы и массивы
Старайтесь вручную не писать конечный индекс массива в цикле. При
работе с индексами можно неправильно записать индекс (находится вне
диапазона).

val list: Array<Int> = arrayOf(1,2,3,4,5,6,7)


for (i in 0..10){
println(list[i])
}
>>>?
Как можно написать код без цифр? Подсказка: используйте длину массива
Индекс списков в цикле
val list: Array<Int> = arrayOf(1,2,3,4,5,6,7)

for (i in 0..list.size-1){

println(list[i])

}
>>>?
Индекс списков в цикле
Также, этот код можно написать по-другому:
Циклы и массивы
Также, элементы массива можно по-другому вывести при помощи циклов:
Практика
Дан массив. Выведете все четные числа массива.
val array: Array<Int> =arrayOf(12,29,37,42,54,67,48,18)
var counter:Int =0
for (i in array.indices){
if (array[i] % 2 == 0){
counter+= 1 //counter=counter+1
println(array[i])
}
}
println(counter)
Практика
• Определить, содержит ли массив введенное число x
• Найти количество четных чисел в массиве.
• Найти количество чисел в массиве, которые делятся на 3, но не
делятся на 7.
• Определите, каких чисел в массиве больше: которые делятся на
первый элемент массива или которые делятся на последний элемент
массива.
• Найдите сумму и произведение элементов массива.
• Дан массив из целых чисел. Выведете новый список, каждый элемент
которого больше в 2 раза [1,2,3,4,5] -> [2,4,6,8,10]
Циклы while
Цикл while повторяет определенные действия пока истинно некоторое
условие:

var i = 0
while(i < 10){
println(i)
i+=1
}
Циклы while
Здесь пока переменная i меньше 10, будет выполняться цикл, в котором на
консоль будет выводиться значение i.

В данном случае вначале проверяется условие (i < 1 0) и если оно истинно


(то есть возвращает true), то выполняется цикл. И вполне может быть
ситуация, когда к началу выполнения цикла условие не будет
выполняться. Например, переменная i изначально больше 10, тогда цикл
вообще не будет выполняться.
Практика

• Вывести все четные числа от 1 до 10 включительно.


• Посчитать сумму чисел от 1 до 20.
Операторы continue и break
Иногда при использовании цикла возникает необходимость при некоторых
условиях не дожидаться выполнения всех инструкций в цикле, перейти к
новой итерации. Для этого можно использовать оператор continue:
Операторы continue и break
В данном случае когда n будет равно 5, сработает оператор continue. И
последующая инструкция, которая выводит на консоль квадрат числа, не
будет выполняться. Цикл перейдет к обработке следующего элемента в
диапазоне.

for(n in 1..8){
if(n == 5) continue
println(n*n )
}
Оператор break
Бывает, что при некоторых условиях нам вовсе надо выйти из цикла,
прекратить его выполнение. В этом случае применяется оператор break:

for(n in 1..5){
if(n == 3) break;
println(n * n)
}
В данном случае когда n окажется равен 5, то с помощью оператора break
будет выполнен выход из цикла. Цикл полностью завершится.
Практика
• Даны целые числа K и N (N > 0). Вывести N раз число K.
• Даны два целых числа A и B (A < B). Вывести в порядке возрастания
все целые числа, расположенные между A и B (включая сами числа A
и B), а также количество N этих чисел.
• Даны два целых числа A и B (A < B). Вывести в порядке убывания все
целые числа, расположенные между A и B (не включая числа A и B), а
также количество N этих чисел.
• Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1,
2, . . . , 10 кг конфет.
Практика
• Даны два целых числа A и B (A < B). Найти сумму всех целых чисел
от A до B включительно
• Даны два целых числа A и B (A < B). Найти произведение всех целых
чисел от A до B включительно.
• Даны два целых числа A и B (A < B). Найти сумму квадратов всех
целых чисел от A до B включительно.
• Дано целое число N (> 0). Найти сумму 1 + 1/2 + 1/3 + . . . + 1/N
Практика
• Заполнить массив нулями, кроме первого и последнего элементов,
которые должны быть равны единице.
• Заполнить массив нулями и единицами, при этом данные значения
чередуются, начиная с нуля.
• Заполнить массив последовательными нечетными числами, начиная с
единицы.
• * Даны два массива. Сформировать третий массив, состоящий из тех
элементов, которые: а) присутствуют в обоих массивах; б)
присутствуют только в одном из массивов.
• * Дан массив размера n. После каждого отрицательного элемента
массива вставить элемент с нулевым значением.
• Определите, есть ли в массиве повторяющиеся элементы.

Вам также может понравиться