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:
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
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:
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.
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,
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:
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:
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:
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.
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: