Что такое continue и break расширенная версия
Управление потоком Java: инструкции break и continue
Вступление
Условные операторы и циклы являются очень важным инструментом в программировании. Существует не так много вещей, которые мы могли бы сделать с кодом, который может выполняться только построчно.
В Java существует несколько способов управления потоком кода:
перерыв
Первые два относительно похожи, так как оба используются для преждевременного завершения выполнения одного или нескольких блоков кода:
Вот еще один пример:
По умолчанию оператор break выходит только из самого внутреннего цикла, в котором он находится.
Если бы мы хотели найти первую позицию, в которой определенный элемент может быть найден в матрице, и мы хотели вырваться из циклов, как только мы его нашли (аналогично примеру с массивом выше), написание следующего не сработало бы:
Мы видим, что цикл продолжал выполняться даже после нахождения 4 в матрице, после заикания в строке, в которой было расположено 4. Это происходит потому, что break вышел только из самого внутреннего цикла, т. Е. Он перестал повторять текущую строку и перешел к следующей. Кроме того, наша задача состояла в том, чтобы найти первое вхождение 4 в матрице, и таким образом мы вернем последнее вхождение 4 в нашей матрице.
Помеченные Утверждения
Метки работают путем применения идентификатора к конструкции:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Использование этого помеченного цикла вместо цикла в приведенном выше примере дает правильный результат и поведение:
продолжить
Оператор continue просто пропускает остальную часть текущей итерации и переходит к следующей. Это полезно, когда мы хотим пропустить все (или часть) итерации, соответствующие определенным условиям, особенно если они требуют высокой производительности.
Для цикла while “пропуск” остальной части итерации означает прямой возврат к проверке условия перед следующей итерацией, а для цикла for это означает переход к части “шаг” цикла for (той части, где мы обычно увеличиваем/уменьшаем управляющую переменную), а затем проверяем условие перед следующей итерацией.
Конечно, вы также можете использовать продолжить с помеченными операторами:
Вывод
Управление потоком в коде необходимо практически для каждого приложения. Операторы, которые изменяют поток кода, являются фундаментальными строительными блоками, и каждый начинающий разработчик должен полностью контролировать/осознавать, как они работают.
Урок №70. Операторы break и continue
Обновл. 13 Сен 2021 |
Хотя вы уже видели оператор break в связке с оператором switch, все же он заслуживает большего внимания, поскольку может использоваться и с циклами. Оператор break приводит к завершению выполнения циклов do, for или while.
break и switch
В контексте оператора switch оператор break обычно используется в конце каждого кейса для его завершения (предотвращая fall-through):
break и циклы
В контексте циклов оператор break используется для завершения работы цикла раньше времени:
Обратите внимание, оператор break может использоваться и для выхода из бесконечного цикла:
break и return
Новички часто путают или не понимают разницы между операторами break и return. Оператор break завершает работу switch или цикла, а выполнение кода продолжается с первого стейтмента, который находится сразу же после этого switch или цикла. Оператор return завершает выполнение всей функции, в которой находится цикл, а выполнение продолжается в точке после вызова функции:
Оператор continue
Оператор continue позволяет сразу перейти в конец тела цикла, пропуская весь код, который находится под ним. Это полезно в тех случаях, когда мы хотим завершить текущую итерацию раньше времени. Например:
Эта программа выведет все числа от 0 до 19, которые не делятся нацело на 4.
В случае с циклом for часть инкремента/декремента счетчика по-прежнему выполняется даже после выполнения continue (так как инкремент/декремент происходит вне тела цикла).
Будьте осторожны при использовании оператора continue с циклами while или do while. Поскольку в этих циклах инкремент счетчиков выполняется непосредственно в теле цикла, то использование continue может привести к тому, что цикл станет бесконечным! Например:
Предполагается, что программа выведет все числа от 0 до 9, за исключением 5. Но на самом деле:
А вот правильное решение, но с использованием цикла do while:
BestProg
Содержание
Поиск на других ресурсах:
Оператор break осуществляет выход из блока фигурных скобок оператора цикла или оператора switch и передает управление следующему оператору в программе. Если используются вложенные операторы, то оператор break осуществляет выход из самого внутреннего оператора.
Общая форма оператора break следующая
2. Оператор break с меткой. Особенности применения. Ключевое слово goto
Общая форма оператора break с меткой имеет следующий вид:
где labelName – это метка, которая соответствует кодовому блоку. Кодовый блок – это набор операторов, взятых в фигурные скобки .
Если в программе встречается оператор break с меткой, то происходит переход к метке, которая должна быть реализована в программе.
Общая форма объявления метки следующая
где labelName – имя метки. Имя метки задается также как и для любого идентификатора.
Общая форма оператора continue имеет вид:
Чаще всего оператор continue вызывается при достижении некоторого условия в теле цикла.
5. Оператор continue с меткой
Оператор continue может быть реализован с меткой. В этом случае общая форма оператора continue следующая
Оператор continue можно применять только в циклах. Другими словами, оператор continue нельзя применять за пределами цикла.
7. Примеры решения задач, в которых используется оператор break
Пример 1. Определение наличия отрицательного числа в одномерном массиве.
Пример 2. Определение наличия заданного числа n в двумерном массиве размером 2*3. В данном примере оператор break вызывается два раза. Первый раз, когда нужно выйти из внутреннего цикла, в котором переменная j есть итератором. Второй раз, когда нужно выйти из внешнего цикла, в котором переменная i есть итератором.
Если двумерный массив есть большим по размеру, то использование оператора break повышает скорость выполнения цикла.
8. Пример использования оператора break с меткой
Оператор break с меткой работает так же, как и оператор goto в других языках программирования. В языке Java оператор goto не используется. Однако, ключевое слово goto зарезервировано. Вместо goto используется оператор break с меткой с некоторыми ограничениями.
Задан двумерный массив целых чисел. Определить, есть ли в массиве отрицательные элементы. Ниже приведен фрагмент кода, решающий данную задачу.
то происходит выход с обоих циклов и переход к следующему оператору программы:
то компилятор Java сгенерирует ошибку
так как в операторе break с меткой, метка может размещаться только перед циклом, в котором она используется.
9. Примеры решения задач, в которых используется оператор continue
10. Примеры решения задач, в которых используется оператор continue с меткой
11. Какие преимущества дает использование операторов break и continue в программах
Использование break и continue дает следующие преимущества:
12. Какое отличие между оператором break с меткой и оператором continue с меткой
Операторы break с меткой и continue с меткой могут использоваться только тогда, когда в программе есть вложенные циклы. Оператор break с меткой осуществляет полный выход из всех вложенных циклов. Оператор continue с меткой осуществляет выход из текущего вложенного цикла и переход к следующей итерации внешнего цикла.
Циклы (break и return, continue, метки)
Сегодня я тебе расскажу про некоторые удобные вещи в работе с циклами.
Первая такая вещь – это ключевое слово break. Если в теле цикла написать такую инструкцию, то при ее выполнении цикл сразу завершится. Пример:
Пример | Результат работы цикла: |
---|---|
0 1 2 3 4 5 6 |
— А break можно использовать только в цикле?
— Да. break можно использовать только в цикле. При выполнении команды break цикл тут же завершается.
— Отлично. Теперь вторая команда – это ключевое слово continue. Его тоже можно использовать только в цикле. При выполнении этой команды, сразу начинается новая итерация цикла. Другими словами, просто пропускается весь код тела цикла.
Пример | Результат работы цикла: |
---|---|
1 3 5 7 9 |
— Т.е. как только программа доходит до исполнения команды continue внутри цикла, она перестает выполнять код в нем?
— Нет. Смотри. Цикл – это когда мы выполняем один и то же код несколько раз. В примере выше – у нас цикл от 0 до 9 – т.е. тело цикла выполнится 10 раз. Так?
— Одно такое исполнение кода тела цикла называется итерацией цикла. Наш цикл состоит из 10 итераций – десяти исполнений кода в его теле.
— Команда continue преждевременно завершает текущую итерацию — код внутри цикла пропускается и начинается новая итерация.
Вот тебе еще пример:
В данном примере мы выводим на экран строковое представление всех объектов, содержащихся в списке list. Но пропускаем все объекты, которые равны null.
— Да, ясно. Очень удобная штука, я смотрю.
— Ага. Еще хочу рассказать тебе про метки. Они редко используются в Java, т.к. часто нарушают красоту логики программы. Но ты можешь встретить их где-то в коде. Так что лучше пусть ты от меня услышишь о них, чем где-то во дворе.
Давным-давно в коде разрешалось прыгать с любой строчки на любую. Для этого использовались метки и оператор goto. Вот как это выглядело:
В данном примере, после выполнении команды goto label, программа прыгала на строку, обозначенную меткой label.
Потом все дружно прозрели и решили не использовать оператор goto. В Java его до сих пор нет, но ключевое слово goto зарезервировано. Мало ли…
— Т.е. ни goto, ни меток в Java нет?
— Оператора goto нет, а метки есть!
— Метки можно использовать в Java вместе с командами continue и break. Они используются, когда у тебя много вложенных циклов.
Например, у тебя 5 вложенных циклов и ты хочешь, при выполнении некоторого условия, выйти из трех из них, но не из всех. Метки позволяют сделать это красиво:
В данном примере, при выполнении команды break, мы выйдем не из цикла с переменной k, а из цикла помеченного меткой label2 – т.е. выйдем сразу из двух циклов k и j.
— И как часто это используется?
— Если честно, то не часто, но мало ли. Может, встретишь где-нибудь. Это основы синтаксиса – это все надо знать!
7.10 – Инструкции break и continue
Инструкция break
Прекращение выполнения switch
Для получения дополнительной информации о проваливании вместе с некоторыми дополнительными примерами смотрите урок «7.5 – Проваливание и область видимости в switch ».
Прекращение выполнения цикла
В контексте цикла инструкция break может использоваться для преждевременного завершения цикла. Выполнение продолжается со следующей инструкции после конца цикла.
Эта программа позволяет пользователю ввести до 10 чисел и в конце отображает сумму всех введенных чисел. Если пользователь вводит 0, break приводит к преждевременному завершению цикла (до того, как будут введены 10 чисел).
Вот пример выполнения показанной выше программы:
break также является распространенным способом выхода из преднамеренного бесконечного цикла:
Пример выполнения показанной выше программы:
break против return
Вот результаты двух запусков этой программы:
Инструкция continue
Инструкция continue предоставляет удобный способ завершить текущую итерацию цикла без завершения всего цикла.
Вот пример использования continue :
Эта программа печатает все числа от 0 до 9, которые не делятся на 4:
Инструкции continue работают, заставляя текущую точку выполнения переходить в конец текущего цикла.
В случае цикла for конечное выражение цикла for по-прежнему выполняется после continue (поскольку это происходит после конца тела цикла).
Рассмотрим следующую программу:
Эта программа предназначена для печати всех чисел от 0 до 9, кроме 5. Но на самом деле она печатает:
Споры по поводу использования break и continue
Многие учебники предостерегают читателей от использования break и continue в циклах как потому, что они заставляют путь выполнения прыгать, так и потому, что они могут затруднить отслеживание логики пути выполнения. Например, break в середине сложной логической части может быть пропущен, или может быть неочевидно, при каких условиях он должен сработать.
Однако при разумном использовании break и continue могут помочь сделать циклы более читаемыми, уменьшив количество вложенных блоков и уменьшив потребность в сложной логике циклов.
Например, рассмотрим следующую программу:
Эта программа использует логическую переменную, чтобы контролировать, продолжать цикл или нет, а также вложенный блок, который запускается только в том случае, если пользователь не выходит.
А вот версия, которую легче понять, и которая использует инструкцию break :
Лучшая практика
Споры по поводу использования ранних возвратов
Контраргумент заключается в том, что использование ранних возвратов позволяет вашей функции завершиться, как только она будет выполнена, что уменьшает необходимость чтения ненужной логики и сводит к минимуму потребность во вложенных условных блоках, что делает ваш код более читабельным.
Наша позиция заключается в том, что ранние возвраты скорее полезны, чем вредны, но мы признаем, что в этой практике есть немного искусства.
Лучшая практика
Используйте ранние возвраты, если они упрощают логику вашей функции.