TutorJava Nivel Básico

Las sentencias de control de flujo determinan el orden en que se ejecutar�n las otras sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control de flujo, incluyendo.

Sentencias palabras clave
toma de decisiones if-else, switch-case
bucles for, while, do-while
excepciones try-catch-finally, throw
miscelaneas break, continue, label:, return

Nota: Aunque goto es una palabra reservada, actualmente el lenguaje Java no la soporta. Podemos utilizar las rupturas etiquetadas en su lugar.

.�La sentencia if-else

La sentencia if-else de java proporciona a los programas la posibilidad de ejecutar selectivamente otras sentencias bas�ndose en alg�n criterio.

Por ejemplo, supon que tu programa imprime informaci�n de depurado bas�ndose en el valor de una variable booleana llamada DEBUG. Si DEBUG fuera verdadera true, el programa imprimir�a la informaci�n de depurado, como por ejemplo, el valor de una variable como x. Si DEBUG es false el programa proceder� normalmente. Un segmento de c�digo que implemente esto se podr�a parecer a este.

. . .
if (DEBUG)
    System.out.println("DEBUG: x = " + x);
. . .

Esta es la versi�n m�s sencilla de la sentencia if: la sentencia gobernada por if se ejecuta si alguna codici�n es verdadera. Generalmente, la forma sencilla de if se puede escribir as�.

if (expresi�n)
    sentencia

Pero, �y si quieres ejecutar un juego diferente de sentencias si la expresi�n es falsa? Bien, puedes utilizar la sentencia else. Echemos un vistazo a otro ejemplo. Supon que tu programa necesita realizar diferentes acciones dependiendo de que el usuario pulse el bot�n OK o el bot�n Cancel en un ventana de alarma. Se podr�a hacer esto utilizando una sentencia if.

    . . .

    // Respuesta dependiente del boto�n que haya pulsado el usuario
    // OK o Cancel
    . . .
if (respuesta == OK) {
    . . .
    // C�digo para la acci�n OK 
    . . .
} else {
    . . .
    // c�digo para la acci�n Cancel 
    . . .
}

Este uso particular de la sentencia else es la forma de capturarlo todo.

Existe otra forma de la sentecia else, else if que ejecuta una sentencia basada en otra expresi�n. Por ejemplo, supon que has escrito un programa que asigna notas basadas en la puntuaci�n de un examen, un Sobresaliente para una puntuaci�n del 90% o superior, un Notable para el 80% o superior y dem�s. odr�as utilizar una sentencia if con una serie de comparaciones else if y una setencia else para escribir este c�digo.

int puntuacion;
String nota;

if (puntuacion >= 90) {
    nota = "Sobresaliente";
} else if (puntuacion >= 80) {
    nota = "Notable";
} else if (puntuacion >= 70) {
    nota = "Bien";
} else if (puntuacion >= 60) {
    nota = "Suficiente";
} else {
    nota = "Insuficiente";
}

Una sentencia if puede tener cualquier n�mero de sentencias de acompa�amiento else if.

Podr�as haber observado que algunos valores de puntuacion pueden satisfacer m�s una de las expresiones que componen la sentencia if. Por ejemplo, una puntuaci�n de 76 podr�a evaluarse como true para dos expresiones de esta sentencia:puntuacion >= 70 y puntuacion >= 60.

Sin embargo, en el momento de ejecuci�n, el sistema procesa una sentencia if compuesta como una s�la; una vez que se ha satisfecho una condici�n (76 >= 70), se ejecuta la sentencia apropiada (nota = "Bien";), y el control sale fuera de la sentencia if sin evaluar las condiciones restantes.

.�La sentencia switch

La sentencia switch se utiliza para realizar sentencias condicionalmente basadas en alguna expresi�n. Por ejemplo, supon que tu programa contiene un entero llamado mes cuyo valor indica el mes en alguna fecha. Supon que tambi�n quieres mostrar el nombre del mes bas�ndose en su n�mero entero equivalente. Podr�as utilizar la sentencia switch de Java para realizar esta tarea.

int mes;
. . .
switch (mes) {
case 1:  System.out.println("Enero"); break;
case 2:  System.out.println("Febrero"); break;
case 3:  System.out.println("Marzo"); break;
case 4:  System.out.println("Abril"); break;
case 5:  System.out.println("May0"); break;
case 6:  System.out.println("Junio"); break;
case 7:  System.out.println("Julio"); break;
case 8:  System.out.println("Agosto"); break;
case 9:  System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
}

La sentencia switch eval�a su expresi�n, en este caso el valor de mes, y ejecuta la sentencia case apropiada.

Decidir cuando utilizar las sentencias if o switch dependen del juicio personal. Puedes decidir cual utilizar bas�ndose en la buena lectura del c�digo o en otros factores.

Cada sentencia case debe ser �nica y el valor proporcionado a cada sentencia case debe ser del mismo tipo que el tipo de dato devuelto por la expresi�n proporcionada a la sentencia switch.

Otro punto de interes en la sentencia switch son las sentencias break despu�s de cada case.

La sentencia break hace que el control salga de la sentencia switch y contin�e con la siguiente l�nea.

La sentencia break es necesaria porque las sentencias case se siguen ejecutando hacia abajo. Esto es, sin un break expl�cito, el flujo de control seguir�a secuencialmente a trav�s de las sentencias case siguientes.

En el ejemplo anterior, no se quiere que el flujo vaya de una sentencia case a otra, por eso se han tenido que poner las sentencias break.

Sin embargo, hay ciertos escenario en los que querr�s que el control proceda secuencialmente a trav�s de las sentencias case. Como este c�digo que calcula el n�mero de d�as de un mes de acuerdo con el ritmico refr�n que dice "Treinta dias tiene Septiembre...".

int mes;
int numeroDias;
. . .
switch (mes) {
case 1.
case 3.
case 5.
case 7.
case 8.
case 10.
case 12.
    numeroDias = 31;
    break;
case 4.
case 6.
case 9.
case 11.
    numeroDias = 30;
    break;
case 2.
    if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || ano % 400 == 0) )
        numeroDias = 29;
    else
        numeroDias = 28;
    break;
}

Finalmente, puede utilizar la sentencia default al final de la sentencia switch para manejar los valores que no se han manejado expl�citamente por una de las sentencias case.

int mes;
. . .
switch (mes) {
case 1:  System.out.println("Enero"); break;
case 2:  System.out.println("Febrero"); break;
case 3:  System.out.println("Marzo"); break;
case 4:  System.out.println("Abril"); break;
case 5:  System.out.println("Mayo"); break;
case 6:  System.out.println("Junio"); break;
case 7:  System.out.println("Julio"); break;
case 8:  System.out.println("Agosto"); break;
case 9:  System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
default: System.out.println("Ee, no es un mes v�lido!");
    break;
}

.�Sentencias de Bucle

Generalmente hablando, una sentencia while realiza una acci�n mientras se cumpla una cierta condici�n. La sintaxis general de la sentencia while es.

while (expresi�n)
    sentencia

Esto es, mientras la expresi�n sea verdadera, ejecutar� la sentencia.

sentencia puede ser una s�la sentencia o puede ser un bloque de sentencias. Un bloque de sentencias es un juego de sentencias legales de java contenidas dentro de corchetes('{'y '}').

Por ejemplo, supon que adem�s de incrementar contador dentro de un bucle while tambi�n quieres imprimir el contador cada vez que se lea un car�cter. Podr�as escribir esto en su lugar.

. . .
while (System.in.read() != -1) {
    contador++;
    System.out.println("Se ha leido un el car�cter = " + contador);
}
. . .

Por convenci�n el corchete abierto '{' se coloca al final de la misma l�nea donde se encuentra la sentencia while y el corchete cerrado '}' empieza una nueva l�nea indentada a la l�nea en la que se encuentra el while.

Adem�s de while Java tiene otros dos constructores de bucles que puedes utilizar en tus programas.

el bucle for y el bucle do-while.

Primero el bucle for. Puedes utilizar este bucle cuando conozcas los l�mites del bucle (su instrucci�n de inicializaci�n, su criterio de terminaci�n y su instrucci�n de incremento). Por ejemplo, el bucle for se utiliza frecuentemente para iterar sobre los elementos de un array, o los caracteres de una cadena.

// a es un array de cualquier tipo
. . .
int i;
int length = a.length;
for (i = 0; i < length; i++) {
    . . .
    // hace algo en el elemento i del array a
    . . .
}

Si sabes cuando estas escribiendo el programa que quieres empezar en el inicio del array, parar al final y utilizar cada uno de los elementos. Entonces la sentencia for es una buena elecci�n. La forma general del bucle for puede expresarse asi.

for (inicializaci�n; terminaci�n; incremento)
    sentencias

inicializaci�n es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el bucle.

terminaci�n es una sentecia que determina cuando se termina el bucle. Esta expresi�n se eval�a al principio de cada iteracci�n en el bucle. Cuando la exprei�n se eval�a a false el bucle se termina.

Finalmente, incremento es una expresi�n que se invoca en cada interacci�n del bucle. Cualquiera (o todos) de estos componentes puden ser una sentencia vac�a (un punto y coma).

Java proporciona otro bucle, el bucle do-while,que es similar al bucle while que se vi� al principio, excepto en que la expresi�n se aval� al final del bucle.

do {
    sentencias
} while (Expresi�n Booleana);

La sentencia do-while se usa muy poco en la construcci�n de bucles pero tiene sus usos. Por ejemplo, es conveniente utilizar la sentencia do-while cuando el bucle debe ejecutarse al menos una vez. Por ejemplo, para leer informaci�n de un fichero, sabemos que al menos debe leer un car�cter.

int c;
InputStream in;
. . .
do {
    c = in.read();
    . . .
} while (c != -1);

.�Sentencias de Manejo de Excepciones

Cuando ocurre un error dentro de un m�todo Java, el m�todo puede lanzar una excepci�n para indicar a su llamador que ha ocurrido un error y que el error est� utilizando la sentencia throw.

El m�todo llamador puede utilizar las sentencias try, catch, y finally para capturar y manejar la excepci�n.

Puedes ver Manejar Errores Utilizando Excepciones para obtener m�s informaci�n sobre el lanzamiento y manejo de excepciones.

.�Sentencias de Ruptura

Ya has visto la sentencia break en acci�n dentro de la sentencia switch anteriormente. Como se observ� anteriormente, la sentencia break hace que el control del flujo salte a la sentencia siguiente a la actual.

Hay otra forma de break que hace que el flujo de control salte a una sentencia etiquetada.

Se puede etiquetar una sentencia utilizando un identificador legal de Java (la etiqueta) seguido por dos puntos (:) antes de la sentencia.

SaltaAqui: algunaSentenciaJava

Para saltar a la sentencia etiquetada utilice esta forma de la sentencia break.

break SaltaAqui;

Las rupturas etiquetadas son una alternativa a la sentencia goto que no est� soportada por el lenguaje Java.

Se puede utiliza la sentencia continue dentro de un bucle para saltar de la sentencia actual hacia el principio del bucle o a una sentencia etiquetada.

Considera esta implementaci�n del m�todo indexOf() de la clase String que utiliza la forma de continue que contin�a en una sentencia etiquetada.

public int indexOf(String str, int fromIndex) {
    char[] v1 = value;
    char[] v2 = str.value;
    int max = offset + (count - str.count);
  test.
    for (int i = offset + ((fromIndex < 0) ? 0 : fromIndex); i <= max ; i++) {
        int n = str.count;
        int j = i;
        int k = str.offset;
        while (n-- != 0) {
            if (v1[j++] != v2[k++]) {
                continue test;
            }
        }    
        return i - offset;
    }
    return -1;
}

Nota: S�lo se puede llamar a la sentencia continue desde dentro de un bucle.

Y finalmente la sentencia return.

Esta sentencia se utiliza para salir del m�todo actual y volver a la sentencia siguiente a la que origin� la llamada en el m�todo original.

Existen dos formas de return: una que devuelve un valor y otra que no lo hace.

Para devolver un valor, simplemente se pone el valor (o una expresi�n que calcule el valor) detr�s de la palabra return.

return ++count;

El valor devuelto por return debe corresponder con el tipo del valor de retorno de la declaraci�n del m�todo.

Cuando un m�todo se declara como void utiliza la forma de return que no devuelve ning�n valor.

return;

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP