Articulos de interes

Curso online gratuito - POO y Java - Click Aquí

Flujos de Control en Java

Un programa java está compuesto por una serie de sentencias. Las dos sentencias básicas en el lenguaje Java se reflejan en la siguiente tabla:

sentencias de declaración que son las que hemos estudiado para declarar variables y constantes.
sentencias de expresión
  • Expresión de asignación, a = b+c;
  • Formas prefijas o posfijas de ++ y --, contador++;
  • Llamadas a métodos, Objeto1.mimetodo();
  • Expresiones de creación de objetos
  • Sentencias de control

Estas últimas son las que controlan el flujo de ejecución del programa. Normalmente el orden de ejecución de sentencias es el mismo en el que están escritas. Sin embargo, las sentencias de control de flujo introducen bifurcaciones en la ejecución del programa. A continuación estudiaremos en detalle cada uno de los tipos de sentencias.

if-else

La sentencia if-else nos permite elegir entre dos alternativas de flujo diferentes. La ejecución del programa dependerá del resultado de evaluar la expresión booleana,

Cdigo

si el valor de expresion_booleana es true se ejecutará el bloque_de_sentencias1, en caso contrario, si hay parte else, se ejecuta el bloque_de_sentencias2. La cláusula else es opcional.

Si queremos que un programa compruebe la edad de una determinada persona para saber si es menor de edad o no, bastaría con preguntar en una sentencia if-else si la variable edad, que es donde tenemos almacenada la edad de la persona, es menor que dieciocho. En caso afirmativo, aplicaremos un descuento del 5% y en caso contrario del 15%.

Supongamos que además de saber si alguien es mayor o menor de edad queremos aplicar un nuevo descuento para jubilados. Podemos cambiar el problema y anidar sentencias if-else.

switch

La sentencia switch selecciona entre un grupo de sentencias en función de la evaluación de una expresión. Su formato sería:

Cdigo

si se encuentra una etiqueta case cuyo valor_integral coincida con el de la expresión selector se trasfiere el control a su correspondiente bloque_de_sentencias. En caso de que ningún valor coincida se ejecuta el bloque_de_sentencias correspondiente a la etiqueta default.

En la sentencia switch no es necesario escribir break al final de cada case. Si falta la sentencia break el código de la siguiente sentencia case se ejecutará hasta que se encuentre un break. Tal es el caso del siguiente ejemplo, donde se traduce una nota numérica a su correspondiente nota verbal.

Cdigo

Vemos como cuando la nota es un 7 al no tener un break continúa la ejecución hasta el siguiente case, el 8, imprimiendo NOTABLE. Lo mismo sucede con el SOBRESALIENTE.

Todas las etiquetas case deben ser expresiones constantes, es decir, literales o identificadores declarados como static final e inicializados con un valor constante.

for

Esta sentencia se usa para realizar un bucle a lo largo de un rango de valores desde el principio hasta el final,

Cdigo

Lo habitual es usar for cuando queremos recorrer todo un rango de valores de una variable. De esta forma, expresion_inicial indica el punto de partida para hacer iteraciones, expresion_incremento cómo se va a ir incrementando la variable y expresion_booleana expresa que condición debe cumplirse para que el bucle for acabe.

Al principio el contador i lo inicializamos a 1 pues el uno es un divisor para cualquier número. Iremos incrementando i de uno en uno y calculando el módulo de la división del numero entre i. La condición de salida del bucle es cuando el contador sea menor o igual que la mitad del número, pues no habrá divisores con un valor mayor.

El bucle for sólo acaba cuando se cumple la condición de salida o cuando en el bloque_de_sentencias se encuentra una sentencia break. Sin embargo, debido a que se utiliza para iterar a lo largo de un rango de valores, romper el bucle es de mal estilo.

while y do-while

Con la sentencia while se repite el bloque_de_sentencias hasta que la expresión booleana sea falsa. Un bucle while sería:

Cdigo

El bucle while puede no ejecutarse nunca pues la expresion_booleana puede ser falsa la primera vez que se evalúa. Como hay veces que se desea que el bucle se ejecute al menos una vez, en Java tenemos también la instrucción do-while:

Cdigo

aquí la expresión booleana se evalúa al final por lo que bloque_de_sentencias se ejecuta al menos una vez.

break y continue

Las sentencias break y continue se utilizan dentro de los bucles y modifican el flujo natural de los mismos.

La sentencia break provoca la salida inmediata del bucle que estemos ejecutando, sin realizar la ejecución del resto de las sentencias. La sentencia break se puede usar tanto en bucles como en bifurcaciones. El siguiente uso de break en el bucle while nos garantiza que j no será nunca negativo, pues en ese caso romperá el bucle y continuará con la ejecución normal:

Cdigo

La sentencia continue finaliza la iteración que en ese momento se está ejecutando, salta al final del cuerpo del mismo y evalúa la expresión booleana que controla dicho bucle. Se suele usar un continue para saltarse un elemento del rango de valores que recorre el bucle. El uso de continue en el siguiente código evita que se produzca una división por cero al calcular el valor de aux.

Cdigo

return

La sentencia return termina la ejecución de un método y devuelve al invocador el control de flujo del programa. En el caso de que la función devuelva alguna variable, este valor se deberá poner a continuación del return, return <valor>. El siguiente ejemplo nos enseña un uso de la sentencia return para determinar si un número es positivo:

EsPositivo.java

Cdigo



Nombre:

Email:

Comentario: