CodeGym /Cursos /JAVA 25 SELF /Switch clásico: sintaxis y ejemplos

Switch clásico: sintaxis y ejemplos

JAVA 25 SELF
Nivel 10 , Lección 3
Disponible

1. Introducción

Imagina que estás escribiendo un programa para una cafetería. El usuario puede elegir una bebida y necesitas reaccionar a esa elección. Por supuesto, podrías usar un montón de if-else if-else, pero no queda muy bien:

if (choice == 1) 
{
    System.out.println("Has elegido un espresso.");
} 
else if (choice == 2) 
{
    System.out.println("Has elegido un capuchino.");
} 
else if (choice == 3) 
{
    System.out.println("Has elegido un latte.");
} 
else 
{
    System.out.println("No existe esa bebida.");
}

Estarás de acuerdo, se ve aparatoso. ¿Y si hubiera 10 o 20 opciones? Aquí es donde entra en juego el operador switch, que permite implementar de forma elegante y compacta la selección entre múltiples opciones según el valor de una variable.

Sintaxis del switch clásico

La sintaxis de switch en Java es la siguiente:


switch (vyrazhenie) 
{
    case znachenie1:
        // acciones, si vyrazhenie == znachenie1
        break;
    case znachenie2:
        // acciones, si vyrazhenie == znachenie2
        break;
    ...
    default:
        // acciones, si no coincide con ningún case
        break;
}
Sintaxis del operador switch en Java

Elementos clave:

  • switch (expresión) — la expresión cuyo resultado se compara con cada case.
  • case valor: — la alternativa con la que se compara la expresión.
  • break; — termina la ejecución del bloque switch (de lo contrario — «fall-through» al siguiente case).
  • default: — se ejecuta si no coincide con ningún case.

2. Ejemplos de uso de switch

Ejemplo 1: Un clásico — elegir una bebida

Implementemos un menú para la cafetería:

import java.util.Scanner;

public class CoffeeShop 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Elige una bebida:");
        System.out.println("1 - Espresso");
        System.out.println("2 - Capuchino");
        System.out.println("3 - Latte");
        int choice = console.nextInt();

        switch (choice) 
        {
            case 1:
                System.out.println("Has elegido un espresso.");
                break;
            case 2:
                System.out.println("Has elegido un capuchino.");
                break;
            case 3:
                System.out.println("Has elegido un latte.");
                break;
            default:
                System.out.println("No existe esa bebida.");
                break;
        }
    }
}

Qué sucede:

  • El usuario introduce el número de la bebida.
  • El valor de la variable choice se compara con cada case.
  • Si hay coincidencia, se ejecuta el bloque correspondiente y luego break finaliza la ejecución de switch.
  • Si no coincide con ninguno, se ejecuta default.

Ejemplo 2: Switch por cadenas

Dentro de switch no se pueden usar muchos tipos, pero las cadenas — ¡sí! Esto es útil para menús de comandos:

import java.util.Scanner;

public class CommandMenu 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);

        System.out.println("Introduce un comando (start, stop, pause):");
        String command = console.nextLine();

        switch (command) 
        {
            case "start":
                System.out.println("¡Inicio del programa!");
                break;
            case "stop":
                System.out.println("Detención del programa.");
                break;
            case "pause":
                System.out.println("Pausa.");
                break;
            default:
                System.out.println("Comando desconocido.");
                break;
        }
    }
}

Ten en cuenta: la comparación de cadenas en switch distingue mayúsculas y minúsculas. "Start" y "start" son cadenas distintas.

3. ¿Qué tipos admite el switch clásico?

En el switch clásico solo se pueden usar ciertos tipos:

  • Tipos primitivos enteros: byte, short, char, int
  • Enumeraciones: enum (hablaremos de ellas en la siguiente lección)
  • Cadenas: String — la comparación es sensible a mayúsculas/minúsculas

No se pueden usar: boolean, float, double, arrays u objetos arbitrarios de clases (salvo enum y String).

Ejemplo con char

char grade = 'B';

switch (grade) 
{
    case 'A':
        System.out.println("¡Excelente!");
        break;
    case 'B':
        System.out.println("Bien.");
        break;
    case 'C':
        System.out.println("Satisfactorio.");
        break;
    default:
        System.out.println("Inténtalo de nuevo.");
        break;
}

4. La obligatoriedad de break: ¿qué pasa si lo olvidas?

El error más común de los principiantes — olvidarse de break;. Veamos qué ocurre:

int day = 2;

switch (day) 
{
    case 1:
        System.out.println("Lunes");
        break;
    case 2:
        System.out.println("Martes");
    case 3:
        System.out.println("Miércoles");
        break;
    default:
        System.out.println("Día desconocido");
        break;
}

Resultado:

Martes
Miércoles

¿Por qué? Porque después de case 2 no hay break, y la ejecución «cae» al siguiente case (esto se llama fall-through). A veces es útil, pero la mayoría de las veces — un error.

5. Agrupar case: cuando varias opciones se comportan igual

Si para varios valores necesitas el mismo comportamiento, puedes ponerlos seguidos:

int month = 1;

switch (month) 
{
    case 12:
    case 1:
    case 2:
        System.out.println("Invierno");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("Primavera");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("Verano");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("Otoño");
        break;
    default:
        System.out.println("Mes desconocido");
        break;
}

Aquí: si month12, 1 o 2, el programa imprimirá "Invierno".

6. Comparación: switch vs if-else

Escenario if-else switch
Muchas opciones Cadena larga, menos legible Conciso; todas las opciones se ven de un vistazo
Comparación de rangos Se puede usar (if (x > 5 && x < 10)) No; solo valores concretos
Tipos admitidos Cualesquiera Solo algunos (véase arriba)
Trampa con break No Sí; hay que vigilar siempre break

7. Errores típicos al trabajar con switch

Error n.º 1: olvidaste break
La causa más común de bugs: te olvidaste de break — y el código ejecuta un case diferente al esperado.

Error n.º 2: tipo no admitido
Intentas usar double, float o boolean — el compilador dirá «no se puede».

Error n.º 3: cadenas con distinto uso de mayúsculas/minúsculas
El usuario escribió "Start", y tú esperas "start"switch no funcionará. Mejor normaliza las cadenas a un mismo caso de antemano:

switch (command.toLowerCase()) 
{
    case "start":
        // ...
}

Error n.º 4: variable en case, no constante
Solo se permiten constantes en case. Si usas una variable — habrá error de compilación.

Error n.º 5: case duplicados
Dos valores case iguales — el compilador no lo permitirá.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION