Sentencias de selección
Las sentencias de selección o decisión, como su nombre lo indica, permiten establecer una condición para decidir si se ejecuta o no un bloque de código.
Entre ellas podemos encontrar a la sentencia if
(y sus variantes) y la sentecia switch-case
.
Sentencia if
La sentencia if
permite ejecutar un bloque de código si se cumple una condición. Si la condición no se cumple, el bloque de código no se ejecuta.
La sintaxis de la sentencia if
emplea la palabra reservada del mismo nombre, seguida de una condición entre paréntesis y un bloque de código entre llaves {}
.
La condición debe ser una expresión booleana, es decir, una expresión que pueda evaluar a true
o false
.
1if (<condición>) {2 // Bloque de código3}
Vale la pena mencionar que, si el bloque de código a ejecutar consta de una sola sentencia, puede omitirse el uso de las llaves {}
.
1if (<condición>)2 // Sentencia
No obstante, se recomienda el uso de las llaves {}
para evitar confusiones y garantizar la legibilidad del código.
Por ejemplo, el siguiente código solicita al usuario un número entero y muestra un mensaje en pantalla si el valor de la variable numero
es mayor a cero. En caso contrario, no muestra ningún mensaje.
1import java.util.Scanner;2
3public class EjemploIf {4 public static void main(String[] args) {5 Scanner scanner = new Scanner(System.in);6
7 System.out.print("Ingrese un número entero: ");8 int numero = scanner.nextInt();9
10 if (numero > 0) {11 System.out.println("El número es positivo");12 }13 }14}
Sentencia if-else
La sentencia if-else
permite ejecutar un bloque de código si se cumple una condición, y otro bloque de código si no se cumple la condición.
La sintaxis de la sentencia if-else
emplea la palabra reservada if
, seguida de una condición entre paréntesis, un bloque de código entre llaves {}
. A continuación, se emplea la palabra reservada else
y otro bloque de código entre llaves {}
.
1if (<condición>) {2 // Bloque de código3} else {4 // Bloque de código5}
Por ejemplo, el siguiente código solicita al usuario un número entero y muestra un mensaje en pantalla si el valor de la variable numero
es mayor a cero. En caso contrario, muestra otro mensaje.
1import java.util.Scanner;2
3public class EjemploIfElse {4 public static void main(String[] args) {5 Scanner scanner = new Scanner(System.in);6
7 System.out.print("Ingrese un número entero: ");8 int numero = scanner.nextInt();9
10 if (numero > 0) {11 System.out.println("El número es positivo");12 } else {13 System.out.println("El número es negativo o cero");14 }15 }16}
Anidamiento de sentencias
Las sentencias de control pueden anidarse, es decir, pueden incluirse unas dentro de otras. Esto permite establecer más alternativas de ejecución, en función de las condiciones que se deseen evaluar. Asímismo, podemos establecer un flujo de ejecución más complejo.
Por ejemplo, el siguiente código solicita al usuario un número entero y muestra un mensaje en pantalla si el valor de la variable numero
es mayor a cero. En caso contrario, muestra otro mensaje si el valor de la variable numero
es menor a cero. En caso contrario, muestra otro mensaje.
1import java.util.Scanner;2
3public class EjemploIfElseIfElse {4 public static void main(String[] args) {5 Scanner scanner = new Scanner(System.in);6
7 System.out.print("Ingrese un número entero: ");8 int numero = scanner.nextInt();9
10 if (numero > 0) {11 System.out.println("El número es positivo");12 } else if (numero < 0) {13 System.out.println("El número es negativo");14 } else {15 System.out.println("El número es cero");16 }17 }18}
Sentencia switch-case
La sentencia switch-case
permite ejecutar un bloque de código en función del valor de una variable.
Es particularmente útil cuando una variable puede tomar un número reducido de valores, y se desea ejecutar un bloque de código diferente para cada uno de esos valores.
La sintaxis de la sentencia switch-case
emplea la palabra reservada switch
, seguida de una variable entre paréntesis y un bloque de código entre llaves {}
.
Dentro del bloque de código se emplea la palabra reservada case
, seguida de un valor y dos puntos :
, y otro bloque de código entre llaves {}
.
1switch (<variable>) {2 case <valor1>:3 // Bloque de código4 break;5 case <valor2>:6 // Bloque de código7 break;8 default:9 // Bloque de código10 break;11}
Debemos resaltar algunos detalles importantes de la sentencia switch-case
:
- La variable evaluada debe ser de tipo
byte
,short
,char
,int
,String
o unenum
(este último se verá más adelante). Cualquier otro tipo de variable no es válido. - Los valores evaluados deben ser literales o constantes. Es decir, no se permite el uso de variables.
- El fujo de ejecución en una sentencia
switch-case
es secuencial. Esto significa que, una vez que se ejecuta un bloque de código, se ejecutarán todos los bloques de código que se encuentren debajo de él. Para evitar esto, se emplea la palabra reservadabreak
, que permite interrumpir la ejecución de la sentenciaswitch-case
. - La palabra reservada
default
permite establecer un bloque de código que se ejecutará si no se cumple ninguna de las condiciones indicadas en los bloques de código anteriores.
Por ejemplo, el siguiente código solicita al usuario que ingrese un número entero entre 0 y 6, y en función del valor ingresado, muestra un mensaje en la consola indicando el día de la semana correspondiente. El valor 0 corresponde al domingo, el valor 1 corresponde al lunes, y así sucesivamente.
En caso de que el valor ingresado no corresponda a ningún día de la semana, muestra un mensaje indicando que el valor es inválido.
1import java.util.Scanner;2
3public class EjemploSwitchCase {4 public static void main(String[] args) {5 Scanner scanner = new Scanner(System.in);6
7 System.out.print("Ingrese un número entero entre 0 y 6: ");8 int numero = scanner.nextInt();9
10 switch (numero) {11 case 0:12 System.out.println("Domingo");13 break;14 case 1:15 System.out.println("Lunes");16 break;17 case 2:18 System.out.println("Martes");19 break;20 case 3:21 System.out.println("Miércoles");22 break;23 case 4:24 System.out.println("Jueves");25 break;26 case 5:27 System.out.println("Viernes");28 break;29 case 6:30 System.out.println("Sábado");31 break;32 default:33 System.out.println("Valor inválido");34 break;35 }36 }37}
Aunque la sentencia switch-case
es muy útil, es importante tener en cuenta que no siempre es la mejor opción. En general, se recomienda el uso de la sentencia if-else
, a menos que se cumplan las siguientes condiciones:
- La variable evaluada es de tipo
byte
,short
,char
,int
,String
o unenum
. - La variable evaluada puede tomar un número reducido de valores.
- Se desea ejecutar un bloque de código diferente para cada uno de esos valores.
Si se cumplen estas condiciones, entonces emplear la sentencia switch-case
es una buena alternativa.