undefined

Циклы (break и return, continue, метки)

Java Multithreading
7 уровень , 1 лекция
Доступна
Циклы (break и return, continue, метки) - 1

— Привет, Амиго!

Сегодня я тебе расскажу про некоторые удобные вещи в работе с циклами.

Первая такая вещь – это ключевое слово break. Если в теле цикла написать такую инструкцию, то при ее выполнении цикл сразу завершится. Пример:

Пример Результат работы цикла:
for (int i=0;i<10;i++)
{
System.out.println(i);
if (i>5)
break;
}
0
1
2
3
4
5
6

— А break можно использовать только в цикле?

— Да. break можно использовать только в цикле. При выполнении команды break цикл тут же завершается.

— Ок. Понятно.

— Отлично. Теперь вторая команда – это ключевое слово continue. Его тоже можно использовать только в цикле. При выполнении этой команды, сразу начинается новая итерация цикла. Другими словами, просто пропускается весь код тела цикла.

Пример:

Пример Результат работы цикла:
for (int i=0;i<10;i++)
{
if (i%2==0)
continue;
System.out.println(i);
}
1
3
5
7
9

— Т.е. как только программа доходит до исполнения команды continue внутри цикла, она перестает выполнять код в нем?

— Нет. Смотри. Цикл – это когда мы выполняем один и то же код несколько раз. В примере выше – у нас цикл от 0 до 9 – т.е. тело цикла выполнится 10 раз. Так?

— Да.

— Одно такое исполнение кода тела цикла называется итерацией цикла. Наш цикл состоит из 10 итераций – десяти исполнений кода в его теле.

— Да, это ясно.

— Команда continue преждевременно завершает текущую итерацию — код внутри цикла пропускается и начинается новая итерация.

Вот тебе еще пример:

Пример
ArrayList list = new ArrayList();
for (Object o: list)
{
if (o==null) continue;
System.out.println(o.toString());
}

В данном примере мы выводим на экран строковое представление всех объектов, содержащихся в списке list. Но пропускаем все объекты, которые равны null.

— Да, ясно. Очень удобная штука, я смотрю.

— Ага. Еще хочу рассказать тебе про метки. Они редко используются в Java, т.к. часто нарушают красоту логики программы. Но ты можешь встретить их где-то в коде. Так что лучше пусть ты от меня услышишь о них, чем где-то во дворе.

Давным-давно в коде разрешалось прыгать с любой строчки на любую. Для этого использовались метки и оператор goto. Вот как это выглядело:

Ужасный код с метками
System.out.println("Мир");
label: System.out.println("Труд");
System.out.println("Май");
goto label;

В данном примере, после выполнении команды goto label, программа прыгала на строку, обозначенную меткой label.

Потом все дружно прозрели и решили не использовать оператор goto. В Java его до сих пор нет, но ключевое слово goto зарезервировано. Мало ли…

— Т.е. ни goto, ни меток в Java нет?

— Оператора goto нет, а метки есть!

— Это как же это?

— Метки можно использовать в Java вместе с командами continue и break. Они используются, когда у тебя много вложенных циклов.

Например, у тебя 5 вложенных циклов и ты хочешь, при выполнении некоторого условия, выйти из трех из них, но не из всех. Метки позволяют сделать это красиво:

Пример
label1: for (int i=0;i<10;i++)
 label2: for (int j=0;j<10;j++)
  label3: for (int k=0;k<10;k++)
   if (i==j && j==k)
    break label2;

В данном примере, при выполнении команды break, мы выйдем не из цикла с переменной k, а из цикла помеченного меткой label2 – т.е. выйдем сразу из двух циклов k и j.

— И как часто это используется?

— Если честно, то не часто, но мало ли. Может, встретишь где-нибудь. Это основы синтаксиса – это все надо знать!

— Ок. Спасибо, Билаабо.

Комментарии (74)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Алексей Уровень 31 Казань
15 июля 2021
первая задача попытается вас испугать))0
Anonymous #2489173 Уровень 33
9 июня 2021
Сначала потоки и локи, потом циклы - почему бы и нет Это как сначала логарифмы, потом умножение
Maks Panteleev Уровень 39 Москва Россия
28 мая 2021
Если у тебя 5 вложенных циклов, то ты скорее всего индус)
Антон Пономарев Уровень 28 Санкт-Петербург Россия
29 апреля 2021
один я про return не заметил ни слова?
К М Уровень 31 Новосибирск Россия
10 апреля 2021
BASIC пахнуло...
Даниил Александрович Уровень 35 Тамбов Россия
26 марта 2021
с появлением while циклов и обозначения блоков, своих процедур и функций, многое поменялось. то место где сейчас все еще используется goto это консольные bath программки и скрипты. label в java на мой взгляд убогий и не дает того функционала в плане переходов как в бейсике, А в ассемблере условия без переходов и вовсе не реально программировать.
mishok Уровень 31 Санкт-Петербург Россия
17 марта 2021

— А break можно использовать только в цикле?
— Да. break можно использовать только в цикле. При выполнении команды break цикл тут же завершается.
— Ок. Понятно.
Но ведь

switch(..) {
  case ..:
    ..
    break;
}
Max Pankov Уровень 31 Москва Россия
22 февраля 2021
спасибо, что не на 39
Regina Kazan Уровень 36 Казань Россия
9 февраля 2021
наверн у меня тупое чю, но я орнула вслух с картинки
Паровозик, который смог Уровень 41 Москва Россия
31 января 2021
"Так что лучше пусть ты от меня услышишь о них, чем где-то во дворе..." Однако же, каковы темы у дворовой шпаны :)