Java admite tres operadores de salto Usando el operador
El operador Usar
Además de usarse en bucles y declaraciones de cambio , Usando el operador
A veces es útil comenzar temprano la siguiente iteración de un bucle. Es decir, debe continuar ejecutando el bucle, pero dejar de procesar el resto del código en su cuerpo para esta iteración en particular. De hecho, esta es una Operador
La última declaración de control es
break
: continue
y return
. Transfieren el control a otra parte de su programa. Consideremos cada uno de los operadores en detalle.
Usando el operadorbreak
El operador break
en Java se utiliza en tres casos. Primero, como ya ha visto, finaliza la secuencia de declaraciones en las ramas de las declaraciones switch
. En segundo lugar, se puede utilizar para salir de un bucle. En tercer lugar, puede utilizarse como una forma "civilizada" del operador de salto incondicional goto
. Esta sección explica los dos últimos casos. Usar break
para salir de un bucle Al usar break
, puede forzar que el bucle termine inmediatamente, omitiendo la expresión condicional y cualquier código restante en el cuerpo del bucle. Cuando se encuentra una declaración break
dentro de un bucle, el segundo finaliza y el control del programa se transfiere a la declaración que le sigue. Ejemplo sencillo:
// Использование break для выхода из цикла.
public class BreakLoop {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 4) {
break; // завершить цикл, если i = 4
}
System.out.println("i: " + i);
}
System.out.println("Цикл завершен.");
}
}
Este programa genera el siguiente resultado:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Aunque el bucle for
está diseñado aquí para ejecutar sus instrucciones de 0 a 99 veces, el operador break
hace que termine antes cuando i es 4. El operador break
se puede utilizar con cualquiera de los bucles de Java, incluidos los bucles intencionalmente infinitos. Por ejemplo, a continuación se muestra el programa anterior codificado mediante un bucle while
. El resultado de este programa es el mismo que el de su predecesor.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {
public static void main(String[] args) {
int i = 0;
while (i < 100) {
if (i == 4) {
break; // закончить цикл, если i = 4
}
System.out.println("i: " + i);
i++;
}
System.out.println("Цикл завершен.");
}
}
Cuando se usa dentro de un conjunto de bucles anidados, la declaración break
solo saldrá del bucle más interno. Por ejemplo:
// Использование break во вложенных циклах.
public class BreakLoop3 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 10; j++) {
if (j == 4) {
break; // закончить цикл, если j = 4
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Цикл завершен.");
}
}
Este programa genera el siguiente resultado:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Como puede ver, la declaración break
en el bucle interno hace que solo termine ese bucle. El bucle exterior no se ve afectado. Hagamos dos comentarios más al respecto break
. En primer lugar, pueden aparecer varias declaraciones en un bucle break
. Sin embargo, tenga cuidado. Muchos de ellos tienden a desestructurar su código. En segundo lugar, el break
, que termina la declaración switch
afecta solo a la declaración switch
(y no a los bucles que la incluyen). Comentario: Break
no fue diseñado como un medio normal de terminación de bucle. Este propósito lo cumple la expresión condicional del encabezado del bucle. El operador break
debe utilizarse para romper el bucle sólo cuando se presenten determinadas situaciones especiales.
Usar break
como formulariogoto
Además de usarse en bucles y declaraciones de cambio , break
también se puede usar solo como una forma "civilizada" de goto
. Java no contiene el operador goto
porque realiza la bifurcación de forma arbitraria y no estructurada. El código que utiliza... de forma intensiva goto
suele ser difícil de entender y mantener. También anula algunas optimizaciones del compilador. Sin embargo, hay varios lugares en un programa donde goto
el flujo de control es una construcción valiosa y legítima. Por ejemplo, goto
puede resultar útil cuando se sale de un conjunto de bucles profundamente anidados. Para manejar tales situaciones, Java define una forma extendida del operador break
. Al usarlo, puede salir de uno o más bloques de código. No es necesario que estos bloques formen parte de un bucle o declaración switch
. Puede ser cualquier bloque. A continuación, puede determinar exactamente dónde continuará la ejecución porque este formulario break
funciona con la marca y proporciona los beneficios de goto
, evitando sus problemas. Una break
declaración etiquetada tiene la siguiente forma general: break label;
Aquí label
está el nombre de una etiqueta que identifica algún bloque de código. Cuando se ejecuta este formulario break
, el control se transfiere del bloque de código nombrado (cuya etiqueta se especifica en la declaración break
) a la declaración que sigue a ese bloque. Un bloque de código marcado debe necesariamente incluir esta declaración break
, pero no se requiere que esta inclusión sea directa (es decir, break
puede incluirse no directamente en un bloque con etiqueta propia, sino en un bloque anidado dentro del mismo, posiblemente también marcado ). Esto significa que puede utilizar un operador marcado break
para escapar de un conjunto de bloques anidados. Pero no puedes usar break
un bloque de código que no incluya un archivo break
. Para nombrar un bloque, coloque una etiqueta al principio del bloque (antes de la llave de apertura). Una etiqueta es cualquier identificador Java válido seguido de dos puntos. Después de etiquetar un bloque, su etiqueta se puede utilizar como argumento para el operador break
. Esto hará que la ejecución continúe desde el final del bloque marcado. Por ejemplo, el siguiente programa contiene tres bloques anidados, cada uno con su propia etiqueta. El operador break
avanza, más allá del final del bloque marcado con la etiqueta second
, saltándose dos operadores println()
.
// Использование break Cómo цивoзованной формы goto.
public class Break {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед оператором break.");
if (t) {
break second; // выход из блока second
}
System.out.println("Данный оператор никогда не выполнится");
}
System.out.println("Данный оператор никогда не выполнится ");
}
System.out.println("Данный оператор размещен после блока second.");
}
}
}
La ejecución de este programa genera el siguiente resultado:
Перед оператором break.
Данный оператор размещен после блока second.
Uno de los usos más comunes del operador etiquetado break
es escapar de bucles anidados. Por ejemplo, en el siguiente programa el bucle externo se ejecuta sólo una vez:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выйти из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка никогда не будет выведена");
}
System.out.println("Цикл завершен.");
}
}
El programa genera el siguiente resultado:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Es fácil ver que cuando el bucle interior se interrumpe antes del final del exterior, ambos bucles terminan. Tenga en cuenta que no puede realizar break
un salto a ninguna etiqueta que no esté definida para el bloque circundante. Por ejemplo, el siguiente programa no es válido y no se compilará:
// Эта программа содержит ошибку.
public class BreakErr {
public static void main(String[] args) {
one:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
}
for (int j = 0; j < 100; j++) {
if (j == 10) {
break one; //He верно!
}
System.out.print(j + " ");
}
}
}
Debido a que un bucle marcado como no incluye una declaración break
, no es posible transferir el control a este bloque.
Usando el operadorcontinue
A veces es útil comenzar temprano la siguiente iteración de un bucle. Es decir, debe continuar ejecutando el bucle, pero dejar de procesar el resto del código en su cuerpo para esta iteración en particular. De hecho, esta es una goto
transición desde las siguientes operaciones del cuerpo hasta el final del bloque de bucle. Esta acción la realiza el operador continue
. En los bucles, el operador while
and hace que el control se transfiera directamente a la expresión condicional que controla el bucle. En un bucle, el control pasa primero a la parte iterativa de la declaración y luego a la expresión condicional. Para los tres bucles, se omite cualquier código intermedio. A continuación se proporciona un programa de ejemplo que utiliza para imprimir dos números en cada línea: do while
continue
for
for
continue
// Демонстрирует continue.
public class Continue {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i % 2 == 0) {
continue;
}
System.out.println("");
}
}
}
Este código usa la operación %
(módulo) para verificar si algo está i
parejo. Si es así, el bucle continúa sin imprimir un carácter de nueva línea. Salida del programa:
0 1
2 3
4 5
6 7
8 9
Al igual que con el operador break
, continue
puede definir una etiqueta que indique qué bucle envolvente continuar. Un programa de ejemplo que utiliza continue
para imprimir una tabla de multiplicar triangular del 0 al 9.
// Использование continue с меткой.
public class ContinueLabel {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
La declaración continue
en este ejemplo finaliza el ciclo de evaluación j
y continúa con la siguiente iteración del ciclo impulsado por i
. Salida de este programa:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
Es extremadamente raramente útil continue
. Una razón para esto es que Java proporciona un rico conjunto de sentencias en bucle que se adaptan a la mayoría de las aplicaciones. Sin embargo, para aquellas situaciones especiales en las que es necesario finalizar la iteración antes de tiempo, la declaración continue
proporciona una forma estructurada de realizar esta tarea.
Operadorreturn
La última declaración de control es return
. Se utiliza para regresar explícitamente desde un método, es decir, transfiere el control del programa nuevamente al programa que lo llama. El operador return
se clasifica como operador de transición. Aunque su discusión completa debe esperar hasta que se analicen los métodos, aquí se proporciona una breve descripción general return
. El operador return
se puede utilizar en cualquier parte de un método para volver al programa que llama al método. La declaración return
finaliza inmediatamente la ejecución del método en el que se encuentra. El siguiente ejemplo lo ilustra:
// Демонстрирует return.
public class Return {
public static void main(String[] args) {
boolean t = true;
System.out.println("Перед оператором return.");
if (t) {
return; // возврат в вызывающую программу
}
System.out.println("Этот оператор никогда не выполнится.");
}
}
Este return
regresa al sistema Java en tiempo de ejecución, ya que es el sistema el que llama al main()
. Salida de este programa:
Перед оператором return.
Puede notar que la declaración final println()
no se ejecuta. En el momento de la ejecución, return
el control se transfiere nuevamente al programa que realiza la llamada. Una nota final. En el programa anterior, el if
operador (t) es necesario. Sin él, el compilador de Java arrojaría un error de "código inalcanzable" porque sabría que la última declaración println()
nunca se ejecutaría. Para evitar este error, se utiliza el operador (t) if
; engaña al compilador para esta demostración. Enlace a la fuente original: Operadores de transición
GO TO FULL VERSION