Статья подготовлена для студентов курса «Разработчик Java» в образовательном проекте OTUS.
Оператор break применяется для прерывания текущей итерации (break (broke, broken) — ломать, разрывать). С его помощью происходит выход из блока фигурных скобок оператора цикла либо оператора switch с дальнейшей передачей управления следующему оператору. Если задействуются вложенные операторы, break обеспечивает выход из самого внутреннего оператора.
Общая форма оператора break (брейк) выглядит следующим образом:
Оператор break с меткой. Специфика использования. Ключевое слово goto
На практике оператор break с меткой применяется в качестве аналога оператора goto, который есть во многих языках программирования. В Java такой оператор не используется, однако само ключевое слово goto зарезервировано.
В общем виде оператор break выглядит так:
Здесь labelName — не что иное, как имя метки, соответствующее кодовому блоку. Под кодовым блоком понимается набор операторов, которые взяты в фигурные скобки { }.
Когда присутствует оператор break с меткой, осуществляется переход к метке для её реализации в программе.
Объявление:
В каких операторах используют оператор break?
Оператор break подходит для применения в операторе switch и во всех операторах цикла. Иными словами, break нельзя использовать за пределами цикла либо оператора switch.
Оператор continue. Общая форма и особенности применения
Оператор continue используется в циклах, обеспечивая переход в цикле к следующей итерации. Общая форма оператора выглядит соответствующим образом:
Как правило, continue вызывается в том случае, если достигнуто некоторое условие в теле цикла.
Оператор continue с меткой
Как и в случае с break, возможна реализация continue с меткой. В этом случае форма оператора будет выглядеть так:
Здесь labelName — это имя метки, соответствующей циклу, в котором как раз таки и реализован вызов посредством оператора continue.
Когда применяют оператор continue?
Оператор используют исключительно в циклах, то есть continue нельзя применять за их пределами.
Преимущества использования операторов continue и break в программах
Применение break и continue имеет следующие плюсы:
— при выполнении циклического процесса отпадает необходимость осуществлять излишние итерации, если нужный результат достигнут либо искомое значение уже найдено. Всё это повышает скорость работы программного обеспечения;
— в случае преждевременного прекращения циклического процесса структура кода не искажается.
Каковы отличия между break и continue при наличии метки?
Операторы continue/break с меткой используются в том случае, если в программе присутствуют вложенные циклы. При этом break с меткой обеспечивает полный выход изо всех вложенных циклов. А continue с меткой выходит из текущего вложенного цикла с последующим переходом к очередной итерации внешнего цикла.
Примеры решения задач с break
Пример 1. Давайте определим, есть ли отрицательное число в одномерном массиве:
Пример 2. Давайте найдём, есть ли заданное число n в 2-мерном массиве, размер которого 2 х 3. Здесь break вызывается дважды:
1) когда требуется выйти из внутреннего цикла, в котором переменная j является итератором;
2) когда нужно покинуть внешний цикл, где итератором является переменная i.
Очевидно, что если наш 2-мерный массив будет огромным по размеру, использование break повысит скорость выполнения циклического процесса.
Пример 3. Рассмотрим работу break с меткой. Здесь break работает так же, как и goto в других языках программирования. Как мы уже говорили, в Java это ключевое слово зарезервировано, однако вместо goto применяется оператор break с меткой и рядом ограничений.
Итак, задан 2-мерный массив целых чисел. Давайте определим, есть ли в нём отрицательные элементы:
В нашем случае перебор всех элементов 2-мерного массива производится в 2-х вложенных циклах. При этом перед вызовом циклов помещена метка M1. Если же в цикле нижнего уровня (счетчик j) встречается команда break M1, то производится выход с обоих циклов с последующим переходом к очередному оператору программы:
А вот если M1 разместить непосредственно перед оператором if:
То компилятор в Java выдаст ошибку:
А всё потому, что метка здесь может размещаться лишь перед тем циклом, в котором используется.