Saltearse al contenido

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.

1
if (<condición>) {
2
// Bloque de código
3
}

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 {}.

1
if (<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.

1
import java.util.Scanner;
2
3
public 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 {}.

1
if (<condición>) {
2
// Bloque de código
3
} else {
4
// Bloque de código
5
}

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.

1
import java.util.Scanner;
2
3
public 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.

1
import java.util.Scanner;
2
3
public 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 {}.

1
switch (<variable>) {
2
case <valor1>:
3
// Bloque de código
4
break;
5
case <valor2>:
6
// Bloque de código
7
break;
8
default:
9
// Bloque de código
10
break;
11
}

Debemos resaltar algunos detalles importantes de la sentencia switch-case:

  1. La variable evaluada debe ser de tipo byte, short, char, int, String o un enum (este último se verá más adelante). Cualquier otro tipo de variable no es válido.
  2. Los valores evaluados deben ser literales o constantes. Es decir, no se permite el uso de variables.
  3. 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 reservada break, que permite interrumpir la ejecución de la sentencia switch-case.
  4. 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.

1
import java.util.Scanner;
2
3
public 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 un enum.
  • 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.