Операторы 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 с меткой осуществляет выход из текущего вложенного цикла и переход к следующей итерации внешнего цикла.
Goto in Java
Java supports structured programming constructs like loops, methods, etc. to organize and understand code better. It doesn’t support the Goto statement. Although it was present in some earlier programming languages, Java has eliminated it to enhance code readability and maintainability. In Java, “label” can be utilized instead of the Goto statement.
This post will provide the Java equivalent of the Goto statement along with suitable examples.
Goto in Java
Like other programming languages, including C or C++, Java doesn’t support the Goto statement. However, it supports “labels” that can be used in place of the Goto statement. In Java, labels can be used before nested loops, and the “break” keyword can be used with the label to break/jump out of a specific outer loop. Ultimately, it allows better control over the loop execution. Furthermore, the labels can also be used with the continue keyword.
For practical demonstration, check out the below-stated examples.
Example 1: Label With “break” Keyword
To set the label with the “break” keyword, first of all, specify a label named “outer” inside the Java “main()” method:
In this stated code snippet, we will iterate the elements through the “for” loop. Then, inside the loop invoke the “print()” method to show/print the resultant output. Furthermore, add another “for” iterator and test the condition using the “if” statement. When the condition is evaluated according to the specified value, the “break” keyword will terminate the loop:
for ( int i = 0 ; i < 3 ; i++ ) {
System.out.print ( «Pass » + i + «: » ) ;
for ( int j = 1 ; j < 50 ; j++ ) {
if ( j == 20 ) {
break outer;
}
System.out.print ( j + » » ) ;
}
System.out.println ( «Not printed» ) ;
}
Then, invoke the “println()” for printing the “Complete Loop” message on the screen:
It can be observed that the loop is terminated when the condition is evaluated as true:
Example 2: Label With “continue” Keyword
You can also utilize the label along with the continue keyword to iterate the outer loop according to the given condition. To do so, first, specify the “outer” label:
Now, iterate the elements with the help of the “for” loop. Within the “for” iterator, set the condition and use the “continue” keyword along with an “outer” label:
for ( int i = 0 ; i < 10 ; i++ ) {
for ( int j = 0 ; j < 10 ; j++ ) {
if ( j == 2 )
continue outer;
System.out.println ( «j value = » + j ) ;
}
}
That’s all about the Goto or alternative of Goto in Java.
Conclusion
Like many other programming languages, Java does not support the Goto Statement. However, Java programming support labels that can be used as an equivalent of the Goto statement. You can determine the label name along with the “break” keyword to break out the particular outer loop. This post has explained how to achieve the functionality of the Goto statement in Java.