67.    Etiquetas [labels] (concepto)

En Java sólo se usan para identificar bucles y forzar sentencias “break” y “continue”.

En general, dan pie a código difícilmente inteligible,
por lo que no se recomienda su uso
salvo en ocasiones muy justificadas.

Lo normal es que una sentencia break fuerce la salida del bucle más interno en ejecucion. Si queremos salir de otro bucle más externo, lo marcaremos con una etiqueta X: y saldremos de él escribiendo

break X;

Sirva el siguiente método de ejemplo, aunque parece evidente que se podría programar con ayuda de algún método auxiliar y, probablemente, quedaría más claro:

ejemplo break etiquetado

public class TrianguloPitagorico {

    public static void main(String[] argumentos) {

        int a = -1, b = -1, c = -1;

        busqueda:

        for (int ijk = 1; ijk < 100; ijk++)

            for (int i = 1; i < ijk; i++)

                for (int j = 1; i + j < ijk; j++)

                    for (int k = 1; i + j + k < ijk; k++)

                        if (i * i + j * j == k * k) {

                            a = i; b = j; c = k;

                            break busqueda;

                        }

        System.out.println("a= " + a + "; b= " + b + "; c= " + c + ";");

    }

}        

 

Lo normal es que una sentencia “continue” fuerce el salto a la siguiente vuelta del bucle más interno en ejecucion. Si queremos retomar otro bucle más externo, lo marcaremos con una etiqueta X: y regresaremos a él escribiendo

continue X;

Sirva el siguiente método de ejemplo, aunque parece evidente que se podría programar con ayuda de algún método auxiliar y, probablemente, quedaría más claro:

ejemplo continue etiquetado

    /**

     * Enuentra la primera línea tal que los datos de las columnas

     * están ordenados (valores estrictamente crecientes).

     *

     * @param matriz no ncesariamente rectangular.

     * @return fila con datos ordenados, o -1 si no hay ninguna.

     */

    static int fileOrdenada(int[][] matriz) {

        filas:

        for (int fila = 0; fila < matriz.length; fila++) {

            for (int columna = 1;

                     columna < matriz[fila].length;

                     columna++) {

                int v1 = matriz[fila][columna - 1];

                int v2 = matriz[fila][columna];

                if (v1 >= v2)

                    continue filas;

            }

            return fila;

        }

        return -1;

    }    

 

Temas relacionados

Vademécum