Java переход на метку

Операторы break , continue . Примеры использования

Оператор break осуществляет выход из блока фигурных скобок оператора цикла или оператора switch и передает управление следующему оператору в программе. Если используются вложенные операторы, то оператор break осуществляет выход из самого внутреннего оператора.

Общая форма оператора break следующая

2. Оператор break с меткой. Особенности применения. Ключевое слово goto

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

Общая форма оператора break с меткой имеет следующий вид:

break labelName;

где labelName – это метка, которая соответствует кодовому блоку. Кодовый блок – это набор операторов, взятых в фигурные скобки .

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

Общая форма объявления метки следующая

labelName: < // последовательность операторов // . >

где labelName – имя метки. Имя метки задается также как и для любого идентификатора.

3. В каких операторах можно использовать оператор break ?

Оператор break можно использовать во всех операторах цикла и операторе switch . Другими словами, оператор break не может быть использован за пределами цикла или оператора switch .

4. Оператор continue . Особенности применения. Общая форма

Оператор continue применяется в циклах . Оператор continue обеспечивает переход к следующей итерации в цикле.

Общая форма оператора continue имеет вид:

Чаще всего оператор continue вызывается при достижении некоторого условия в теле цикла.

5. Оператор continue с меткой

Оператор continue может быть реализован с меткой. В этом случае общая форма оператора continue следующая

continue labelName;

где labelName – имя метки, которая соответствует циклу, в котором реализован вызов с помощью оператора continue .

6. В каких операторах можно применять оператор continue ?

Оператор continue можно применять только в циклах. Другими словами, оператор continue нельзя применять за пределами цикла.

7. Примеры решения задач, в которых используется оператор break

Пример 1. Определение наличия отрицательного числа в одномерном массиве.

// Определение наличия отрицательного числа в одномерном массиве int A[] = < 3, 5, -7, 20, 39, 12 >; boolean f_is = false; for (int i=0; ilength; i++)  if (A[i]<0) // есть ли отрицательное число в массиве? < f_is = true; // если есть, то решение найдено  break; // выход из цикла, дальнейшее выполнение цикла не имеет смысла > if (f_is) System.out.println("Отрицательное число есть в массиве."); else System.out.println("Отрицательного числа нет в массиве.");

Пример 2. Определение наличия заданного числа n в двумерном массиве размером 2*3. В данном примере оператор break вызывается два раза. Первый раз, когда нужно выйти из внутреннего цикла, в котором переменная j есть итератором. Второй раз, когда нужно выйти из внешнего цикла, в котором переменная i есть итератором.

// Определение наличия отрицательного числа в одномерном массиве int A[][] = < < 3, 5, -3 >, < 2, 8, 0 >>; boolean f_is = false; int n = 5; for (int i=0; ilength; i++) <  for (int j=0; jlength; j++)  if (A[i][j]==n) < f_is = true; // если число найдено, то выход из внутреннего цикла  break; // дальнейшее выполнение не имеет смысла >  if (f_is) break; // выход из внешнего цикла > if (f_is) System.out.println("Число есть в массиве."); else System.out.println("Числа нет в массиве.");

Если двумерный массив есть большим по размеру, то использование оператора break повышает скорость выполнения цикла.

8. Пример использования оператора break с меткой

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

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

// Оператор break с меткой int[][] A = < < 2, 5, 8, >, < 3, -7, 4 >, < -2, 1, 3 >, < -4, 2, 3 >>; boolean f_is = false; // метка с именем M1 M1: for (int i=0; ilength; i++) for (int j=0; jlength; j++) < k++; if (A[i][j]<0) < f_is = true; break M1; // полное завершение цикла, переход к следующему оператору // continue M1; - переход к следующей итерации внешнего цикла (счетчик i) > > if (f_is) System.out.println("В массиве A есть положительные элементы."); else System.out.println("В массиве A положительных элементов нет");

Перебор всех элементов двумерного массива осуществляется в двух вложенных циклах. Перед вызовом циклов помещена метка с именем M1 . Если в цикле нижнего уровня (счетчик j ) встречается команда

то происходит выход с обоих циклов и переход к следующему оператору программы:

. if (f_is) System.out.println("В массиве A есть положительные элементы."); else System.out.println("В массиве A положительных элементов нет");

Если метку M1 разместить перед оператором if , например:

. M1: if (f_is) System.out.println("В массиве A есть положительные элементы."); else System.out.println("В массиве A положительных элементов нет");

то компилятор Java сгенерирует ошибку

Unresolved compilation problem: The label M1 is missing

так как в операторе break с меткой, метка может размещаться только перед циклом, в котором она используется.

9. Примеры решения задач, в которых используется оператор continue

Пример 1. Дано n . Написать фрагмент программного кода, который вычисляет следующую сумму S = 2 + 4 + … + 2·n .

Существует много способов решения данной задачи. В данном случае задача решается с использованием оператора continue .

int s=0; int n; n = 10; for (int i=1; i if (i%2==1) continue; // нечетные значения i пропустить s = s+i; // суммировать только парные значения i >
if (i%2==1) continue;

проверяется значение i . Если i нечетно ( i%2==1 ), то происходит переход на следующую итерацию с помощью оператора continue . Таким образом, суммируются только парные значения i .

Пример 2. В заданном массиве чисел все положительные элементы умножить на 2. Для решения используется оператор continue .

// использование оператора continue double[] A = < 3.8, -2.5, 4.6, -1.8, -2.2, 5.6, 1.5 >; // в массиве A все положительные элементы умножить на 2 for (int i=0; ilength; i++) < // если элемент массива отрицательный, то переход к следующей итерации  if (A[i]<0)  continue; // иначе, умножить этот элемент на 2 A[i] = A[i] * 2; >
10. Примеры решения задач, в которых используется оператор continue с меткой

Пример 1. Демонстрируется использование оператора continue с меткой, которая размещена во вложенном цикле (внутреннем цикле). Метка имеет имя loop . В примере находится сумма элементов, которые размещены на главной диагонали матрицы A размера 5×5.

// суммировать элементы матрицы, которые размещены на главной диагонали // в этих элементах позиция в строке i равна позиции в столбце j int n = 5; // размерность матрицы double A[][] = < < 3.2, 4.1, 2.8, 3.4, 3.4 >, < 1.3, 4.3, 5.5, 0.4, 1.4 >, < 3.4, 4.7, 2.1, 3.4, 3.4 >, < 6.2, 4.1, 2.6, 2.4, 2.4 >, < 0.7, 7.1, 3.8, 1.4, 4.4 >>; double summ = 0; // во внутреннем цикле объявляется метка с именем loop for (int i=0; i for (int j=0; j // если не главная диагональ, то переход на следующую итерацию  if (i!=j) continue loop; summ += A[i][j]; >

Пример 2. Демонстрируется использование оператора continue с меткой, которая размещена на внешнем (верхнем) цикле. В программе определяется количество строк массива A , в которых есть отрицательные элементы.

// суммировать элементы матрицы, которые размещены на главной диагонали // в этих элементах позиция в строке i равна позиции в столбце j int n = 0; // количество строк, в которых есть отрицательные элементы double A[][] = < < 3.2, -4.1, 2.8, 3.4, 3.4, 3.6, 4.8 >, < 1.3, 4.3, 5.5, 0.4, 1.4, 2.0, 1.0 >, < 3.4, -4.7, 2.1, -3.4, 3.4, 3.0, 5.5 >, < 6.2, 4.1, 2.6, 2.4, 2.4, 1.8, 1.9 >, < -0.7, 7.1, 3.8, 1.4, 4.4, 2.3, 4.0 >>; // объявляется метка с именем nextRow nextRow: for (int i=0; ilength; i++)  for (int j=0; jlength; j++) < // если найден отрицательный элемент, то переход на следующую строку массива  if (A[i][j]<0) < n++; // увеличить счетчик  continue nextRow; > > System.out.println("n color: #008000;">// n = 3

Перебор всех элементов массива осуществляется с помощью двух вложенных циклов. Номер строки соответствует переменной i , номер столбца соответствует переменной j .

Если в i -й строке массива найден хотя бы один отрицательный элемент, то дальнейший перебор элементов этой строки не имеет смысла. Нужно переходить на следующую строку. Именно поэтому, здесь вызывается оператор continue с меткой, которая размещается на верхнем (внешнем цикле). Метка имеет название nextRow .

11. Какие преимущества дает использование операторов break и continue в программах

Использование break и continue дает следующие преимущества:

  • в случае выполнения циклического процесса нет необходимости выполнять лишние итерации, если найдено искомое значение или достигнут нужный результат. Это дает повышение скорости выполнения программы;
  • при преждевременном прекращении циклического процесса не искажается структура кода.
12. Какое отличие между оператором break с меткой и оператором continue с меткой

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

Источник

Операторы перехода break, continue, return

В Java есть три оператора перехода: break, continue, return. Операторы перехода передают управление другой части программы.

Оператор break

Оператор break завершает последовательность операторов в операторе switch, позволяет выйти из цикла и в качестве оператора безусловного перехода (goto).

Рассмотрим пример выхода из цикла. Используя оператор break, можно вызвать немедленное завершение цикла, пропуская условное выражение и другой код в теле цикла. Когда приложение встречает оператор break внутри цикла, оно прекращает выполнение цикла и передаёт управление оператору, следующему за циклом.

 for(int i = 0; i < 100; i++) < if(i == 5) break; // выходим из цикла, если i равно 5 mInfoTextView.append("i: " + i + "\n"); >mInfoTextView.append("Цикл завершён"); 

Получим следующий результат:

i: 0 i: 1 i: 2 i: 3 i: 4 Цикл завершён

Вроде хотели, чтобы цикл for выполнялся от 0 до 100, а сами коварно вышли из него, когда значение переменной i стало равным 4.

Код можно переписать с использованием цикла while:

 int i = 0; while(i < 100) < if(i == 5) break; // выходим из цикла, если i равно 5 mInfoTextView.append("i: " + i + "\n"); i++; >mInfoTextView.append("Цикл завершён"); 

При использовании вложенных циклов оператор break осуществляет выход только из самого внутреннего цикла, не оказывая влияния на внешний цикл. Создадим пример с использованием вложенных циклов:

 for (int i = 1; i < 4; i++) < mInfoTextView.append("Проход " + i + ": "); for (int j = 0; j < 100; j++) < if (j == 5) break; // выходим из цикла, если j равно 5 mInfoTextView.append(j + " "); >mInfoTextView.append("\n"); > mInfoTextView.append("Циклы завершёны"); 

Получим следующий результат:

Проход 1: 0 1 2 3 4 Проход 2: 0 1 2 3 4 Проход 3: 0 1 2 3 4 Циклы завершёны

В примере оператор break прервал выполнение второго цикла, но первый цикл продолжал работать.

В цикле можно использовать несколько операторов break, но увлекаться не стоит. Лучше переделайте код.

break как замена goto

В Java нет оператора безусловного перехода goto. Если вы не знаете, что это такое, то можете смело пропустить данный абзац. У оператора break есть особая форма записи:

Обычно метка — это имя метки, идентифицирующей блок кода. Я ни разу не встречал в реальных примерах данный способ, поэтому не буду приводить пример использования, чтобы вас не запутать.

Оператор continue

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

В следующем примере выводим два числа в каждой строке:

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

Как и оператор break, оператор continue может содержать метку содержащего его цикла, который нужно продолжить. Создадим пример вывода треугольной таблицы умножения чисел от 0 до 9.

 outer: for (int i = 0; i < 10; i++) < for (int j = 0; j < 10; j++) < if (j >i) < mInfoTextView.append("\n"); continue outer; >mInfoTextView.append(" " + (i * j)); > > mInfoTextView.append("\n"); 

В этом примере оператор continue прерывает цикл подсчёта значений переменной j и продолжает его со следующей итерации цикла подсчёта переменной i. На экране увидим текст в таком виде:

0 0 1 0 2 4 0 3 6 9 0 4 8 12 16 и т.д.

Данный оператор в практике встречается достаточно редко. Но на всякий случай помните о нём. Иногда он может пригодиться.

Оператор return

Оператор return используют для выполнения явного выхода из метода. Оператор можно использовать в любом месте метода для возврата управления тому объекту, который вызвал данный метод. Таким образом, return прекращает выполнение метода, в котором он находится.

Источник

Читайте также:  Python текущая дата минус 5 дней
Оцените статью