Программирование • 10 сентября 2024 • 5 мин чтения

Циклы в языке Java: виды и методы использования

Рассказываем, что такое циклы в Java и какими они бывают. Разбираемся, как правильно создавать объекты в циклах и делать принудительную остановку.

Что такое циклы в Java

Циклы — элементы структурного программирования. Они представляют собой блоки кода в Java, повторяющиеся по заданным условиям. Позволяют структурировать повторяющийся код, сделать его как короче, так и удобнее для написания и чтения.

До появления циклов код писался в одну колонку с переходами, например через оператор GOTO. Но со временем программы стали сложнее, поэтому в программировании были введены структурные элементы. Проще говоря, программа стала разбиваться на блоки, которыми управляют по определённым условиям. Цикл Java — один из таких блоков, выполняющий задачи по условиям, которые указал программист.

Цикл Java всегда состоит из условия и тела. Вид цикла указывается в начале блока, и в разных видах синтаксис может включать также условие перед или после итерации.

Разобраться в циклах и других структурах Java поможет курс «Java-разработчик». В программе, которая обновляется каждые полгода, обучение под руководством экспертов из Яндекса, Т‑Банка, Сбера, VK, более 400 часов практики и задачи от реальных заказчиков.

Виды циклов

Цикл for

Его иначе называют циклом со счётчиком. Считается довольно простым, с ним легче всего разобраться начинающим программистам Java

Цикл for определяет старт отсчёта, условия остановки и шаг отсчёта

Цикл for пригодится в задачах, где точно известно количество элементов.

К примеру, так можно вывести на экран список из 2024 элементов

Вместо полноценной конструкции цикла for программисты часто выбирают упрощённый foreach. В нём не указывается переменная счётчика, однако внутри foreach доступна переменная итерации. Такой цикл в Java всегда доходит до конца списка, однако разработчик не указывает сложные условия.

Пример прохода по массиву с помощью цикла foreach

Цикл while

Второе название — цикл с предусловием. Помогает объявить в коде некую переменную или их набор и сделать из них условие продолжения цикла. Соответствие этому условию проверяется перед каждым запуском цикла. При верном условии он выполняется. При неверном цикл завершается или не выполняется ни разу. Чаще всего его применяют в Java в таких ситуациях, как поиск элемента внутри списка или массива. А также если нужно сразу проверить то, что неизвестно об исходных данных.

В цикле while сначала пишется условие, а затем тело

В цикле while число итераций бывает меньше или больше длины списка. Цикл будет выполнять итерации не до конца списка, а пока не найдёт элемент, отвечающий условиям.

Возьмём для примера задачу, где необходимо найти в списке значение, содержащее слово «Яндекс».

Перед каждым запуском цикла идёт проверка двух условий: искомое значение не найдено (равно null) и список поиска не пустой

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

Цикл while считается более сложной конструкцией в Java, потому что условие может быть не напрямую связано с телом цикла. К примеру, в условии цикла бывает вызов функции.

Цикл do…while

Альтернативное название — цикл с постусловием. В этом случае проверка условия цикла идёт после каждой итерации. Он используется в Java, когда уже есть информация об исходных объектах и необходимо выполнить с ними определённые действия, а потом проверить результат.

Цикл do…while всегда срабатывает в Java один раз или более

Возьмём для примера задачу, когда известна изначальная строка кода и нужно проверить, является ли она палиндромом — последовательностью символов, которая читается одинаково в любом направлении.

С помощью цикла do…while в Java проверяют, действительно ли символы в начале и в конце равны друг другу. Если первые значения равны, цикл проверяет следующие

Перед запуском цикла do…while нужно проверять, чтобы строка не была пустой, иначе он при выполнении выдаст ошибку. Это усложняет его использование, так как требуется предварительная подготовка, но именно поэтому его чаще применяют продвинутые разработчики.

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

Вложенные циклы расположены внутри других. Их применяют в задачах со сложными структурами данных, когда нет возможности пройти по всем данным одним и тем же одноуровневым циклом. Любой вид цикла в Java может быть вложенным.

Пример — таблица, где нужно пройти все строки и столбцы:

Здесь нужно запустить цикл for по строкам, а в него вложить цикл for по столбцам

Важно учесть, что вложенные циклы во много раз увеличивают время выполнения программы. К примеру, если в многопользовательской системе один Java-программист запустит сложный вложенный цикл на миллиард итераций, это приведёт к ощутимому зависанию системы у других.

Бесконечный цикл Java

Бесконечные циклы в языке Java не содержат условий, выйти из них можно только через управляющие команды. Они полезны для решения служебных задач, где бесконечно ожидается ввод данных пользователем.

Также бесконечные циклы есть в серверных приложениях, где ожидаются сетевые запросы клиентов

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

Бесконечный цикл в Java можно считать корректным, только если его создали специально. Если же он получился в результате неверных условий, программа зависнет.

Создание объектов в цикле Java

В структурном программировании создание объектов в цикле происходит так же, как и за его пределами. Однако хорошей практикой считается создавать объекты именно вне цикла, потому что для Java это довольно серьёзная процедура.

Если объектов много, это усложнит работу кода и создаст нагрузку для Garbage Collector — сборщика мусора в памяти. В рамках обычной программы делать это не так критично, потому что новые объекты исчезнут, когда дойдут до конца метода. А в цикле, особенно вложенном, много итераций, и, пока он не закончится, объекты будут занимать память.

Лучше создавать объекты за пределами цикла. Например, если один список нужно преобразовать в другой, то лучше создать итоговый список заранее, а циклы запустить по исходному и по целевому списку с помощью индексов.

Как выйти из цикла Java

Внутри каждого цикла Java уже вложена возможность правильного выхода, если программист корректно описал все условия. Например, программа сама выйдет из цикла for, потому что счётчик дошёл до нужного условия. Циклы while и do…while прекращаются сами, когда найден искомый элемент или выполнена операция.

Однако в Java есть варианты, как сделать принудительную остановку и прервать цикл.

  • break. Останавливает цикл в любой момент. К примеру, если была задача найти все варианты в списке, но он слишком большой и программиста устраивают первые десять полученных вариантов, можно написать break, и будет выполняться следующая строчка после цикла. Хорошей практикой считается добавить это в предусловие.
  • return. Пригодится, если интересует один конкретный результат, полученный в ходе цикла. Допустим, дальнейшее выполнение не требуется, можно сделать принудительную остановку, как и в случае с break. Стоит учитывать, что применение return в Java приведёт к выходу не только из цикла, но и из метода.
  • continue. Этот оператор фактически не прерывает цикл Java, но позволяет не выполнять дальнейший код. Проще говоря, так можно пропустить итерацию. К примеру, в палиндромах пробелы не важны и не сравниваются, поэтому если символ — это пробел, можно написать continue. Программа пропустит сравнение и перейдёт к следующей итерации.

Совет эксперта

Пётр Кушнир
Написание циклов в Java, особенно с предусловием и постусловием, требует опыта. Разработчик должен знать, что программа, например, может зациклиться или выйти за пределы массива или строки. Также стоит учитывать правила выполнения логических операций при вычислении условий. Это может показаться сложным, но внимательное рассмотрение задачи в целом, анализ логики работы с данными на каждой итерации и выделение всех известных и искомых значений помогает программисту составить корректное и ёмкое решение.

При написании и отладке программ самым действенным способом понять работу цикла в Java считается выписывание на листок бумаги в столбик всех задействованных переменных. Слева направо записывается значение каждой переменной на всех итерациях цикла. Со временем при взгляде на цикл получится с ходу понимать логику его работы.

Статью подготовили:
Пётр Кушнир
Яндекс Практикум
Автор курса «Java-разработчик»
Женя Соловьёва
Яндекс Практикум
Редактор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Идеи новогодних подарков от нейросети + промокоды на курсы Практикума и акции от партнеров
Thu Dec 12 2024 12:05:28 GMT+0300 (Moscow Standard Time)