Páginas

Mostrando entradas con la etiqueta switch. Mostrar todas las entradas
Mostrando entradas con la etiqueta switch. Mostrar todas las entradas

Syntaxis de un switch anidado JAVA

La sintaxis para integrar un switch dentro de otro switch en Java (lo que se llama un switch anidado) es así:


// Solicitar la primera variable
int variable1 = leer.nextInt();

switch (variable1) {
  case 1:
    // Código del primer caso

    // Solicitar la variable dentro del caso 1 (para el otro switch)
    int variable2 = leer.nextInt();

    switch (variable2) {
      case 1:
        // Código del subcaso 1
        break;
      case 2:
        // Código del subcaso 2
        break;
      default:
        // Si no coincide ningún caso del segundo switch
        break;
    }
    break; // Cerramos el case 1 del primer switch

  case 2:
    // Código del segundo caso

    // Solicitar la variable para otro switch
    int variable3 = leer.nextInt();

    switch (variable3) {
      case 1:
        // Código del subcaso 1
        break;
      case 2:
        // Código del subcaso 2
        break;
      default:
        // Si no coincide ningún caso del segundo switch
        break;
    }
    break; // Cerramos el case 2 del primer switch

  default:
    // Si no coincide ningún caso del primer switch
    break;
}

ejemplo:


import java.util.Scanner;

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

        System.out.println("=== MENÚ PRINCIPAL ===");
        System.out.println("1. Operaciones básicas");
        System.out.println("2. Operaciones con raíces");
        System.out.print("Elige una opción: ");
        int variable1 = leer.nextInt(); // primera decisión

        switch (variable1) {
            case 1:
                // Primer submenú
                System.out.println("\n--- Operaciones Básicas ---");
                System.out.println("1. Sumar");
                System.out.println("2. Restar");
                System.out.println("3. Multiplicar");
                System.out.println("4. Dividir");
                System.out.print("Elige una opción: ");
                int variable2 = leer.nextInt(); // segunda decisión

                System.out.print("Ingresa el primer número: ");
                double num1 = leer.nextDouble();
                System.out.print("Ingresa el segundo número: ");
                double num2 = leer.nextDouble();

                switch (variable2) {
                    case 1:
                        System.out.println("Resultado: " + (num1 + num2));
                        break;
                    case 2:
                        System.out.println("Resultado: " + (num1 - num2));
                        break;
                    case 3:
                        System.out.println("Resultado: " + (num1 * num2));
                        break;
                    case 4:
                        if (num2 != 0)
                            System.out.println("Resultado: " + (num1 / num2));
                        else
                            System.out.println("Error: división entre cero");
                        break;
                    default:
                        System.out.println("Opción no válida en el submenú.");
                        break;
                }
                break; // cierra el case 1 del primer switch

            case 2:
                // Segundo submenú
                System.out.println("\n--- Operaciones con Raíces ---");
                System.out.println("1. Raíz cuadrada");
                System.out.println("2. Raíz cúbica");
                System.out.println("3. Raíz cuarta");
                System.out.print("Elige una opción: ");
                int variable3 = leer.nextInt(); // segunda decisión en este caso

                System.out.print("Ingresa un número: ");
                double numero = leer.nextDouble();

                switch (variable3) {
                    case 1:
                        System.out.println("Raíz cuadrada: " + Math.sqrt(numero));
                        break;
                    case 2:
                        System.out.println("Raíz cúbica: " + Math.cbrt(numero));
                        break;
                    case 3:
                        System.out.println("Raíz cuarta: " + Math.pow(numero, 1.0 / 4.0));
                        break;
                    default:
                        System.out.println("Opción no válida en el submenú de raíces.");
                        break;
                }
                break; // cierra el case 2 del primer switch

            default:
                System.out.println("Opción no válida en el menú principal.");
                break;
        }

        leer.close();
    }
}

Qué hace este programa:

  • Muestra un menú principal con dos opciones: 1. Operaciones básicas y 2. Operaciones con raíces.
  • Si eliges 1, se abre un submenú para sumar, restar, multiplicar o dividir (usando switch dentro del switch).
  • Si eliges 2, se abre otro submenú con opciones de raíces usando los métodos de Math.

ahora con opcion de salida:


import java.util.Scanner;

public class CalculadoraSwitchAnidado {
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int variable1;

        do {
            System.out.println("\n=== MENÚ PRINCIPAL ===");
            System.out.println("1. Operaciones básicas");
            System.out.println("2. Operaciones con raíces");
            System.out.println("3. Salir");
            System.out.print("Elige una opción: ");
            variable1 = leer.nextInt(); // opción del menú principal

            switch (variable1) {
                case 1:
                    System.out.println("\n--- Operaciones Básicas ---");
                    System.out.println("1. Sumar");
                    System.out.println("2. Restar");
                    System.out.println("3. Multiplicar");
                    System.out.println("4. Dividir");
                    System.out.print("Elige una opción: ");
                    int variable2 = leer.nextInt(); // submenú de operaciones básicas

                    System.out.print("Ingresa el primer número: ");
                    double num1 = leer.nextDouble();
                    System.out.print("Ingresa el segundo número: ");
                    double num2 = leer.nextDouble();

                    switch (variable2) {
                        case 1:
                            System.out.println("Resultado: " + (num1 + num2));
                            break;
                        case 2:
                            System.out.println("Resultado: " + (num1 - num2));
                            break;
                        case 3:
                            System.out.println("Resultado: " + (num1 * num2));
                            break;
                        case 4:
                            if (num2 != 0)
                                System.out.println("Resultado: " + (num1 / num2));
                            else
                                System.out.println("Error: división entre cero");
                            break;
                        default:
                            System.out.println("Opción no válida en el submenú.");
                            break;
                    }
                    break;

                case 2:
                    System.out.println("\n--- Operaciones con Raíces ---");
                    System.out.println("1. Raíz cuadrada");
                    System.out.println("2. Raíz cúbica");
                    System.out.println("3. Raíz cuarta");
                    System.out.println("4. Raíz quinta");
                    System.out.print("Elige una opción: ");
                    int variable3 = leer.nextInt(); // submenú de raíces

                    System.out.print("Ingresa un número: ");
                    double numero = leer.nextDouble();

                    switch (variable3) {
                        case 1:
                            System.out.println("Raíz cuadrada: " + Math.sqrt(numero));
                            break;
                        case 2:
                            System.out.println("Raíz cúbica: " + Math.cbrt(numero));
                            break;
                        case 3:
                            System.out.println("Raíz cuarta: " + Math.pow(numero, 1.0 / 4.0));
                            break;
                        case 4:
                            System.out.println("Raíz quinta: " + Math.pow(numero, 1.0 / 5.0));
                            break;
                        default:
                            System.out.println("Opción no válida en el submenú de raíces.");
                            break;
                    }
                    break;

                case 3:
                    System.out.println("Saliendo del programa...");
                    break;

                default:
                    System.out.println("Opción no válida, intenta de nuevo.");
                    break;
            }

        } while (variable1 != 3); // el menú se repite hasta que elija salir

        leer.close();
    }
}

Cómo funciona

  • Usa un bucle do...while para repetir el menú principal hasta que el usuario elija 3 (Salir).
  • Dentro del switch principal hay dos switch anidados:
  • Uno para operaciones básicas (suma, resta, etc.).
  • Otro para raíces (cuadrada, cúbica, etc.).
  • Se usa la clase Math para los cálculos de raíces.
  • Si el usuario digita una opción incorrecta, muestra un mensaje y vuelve al menú.

Estructura de Control switch

el switch es una estructura de control que permite ejecutar diferentes bloques de código según el valor de una variable o expresión. Es una alternativa más limpia que usar muchos if-else.

Sintaxis del switch

  
switch (expresion) {
    case valor1:
        // Código si expresion == valor1
        break;

    case valor2:
        // Código si expresion == valor2
        break;

    case valor3:
        // Código si expresion == valor3
        break;

    default:
        // Código si ninguno de los casos anteriores coincide
        break;
}

  

Explicación paso a paso

  • switch (expresion)

    La expresión se evalúa una sola vez. Su resultado se compara con cada case.

    Puede ser de tipo:

    int, byte, short, char, String, o enum (tipos enumerados).

  • case valor:

    Si el valor del case coincide con el de la expresión, se ejecuta el bloque de código asociado.

  • break;

    Sirve para salir del switch una vez que se ejecuta un caso. Si no se pone break, el programa seguirá ejecutando los siguientes casos (esto se llama fall-through).

  • default:

    Se ejecuta si ningún case coincide. Es opcional, pero recomendable.

Ejemplo básico


int dia = 3;

switch (dia) {
    case 1:
        System.out.println("Lunes");
        break;
    case 2:
        System.out.println("Martes");
        break;
    case 3:
        System.out.println("Miércoles");
        break;
    case 4:
        System.out.println("Jueves");
        break;
    case 5:
        System.out.println("Viernes");
        break;
    case 6:
        System.out.println("Sábado");
        break;
    case 7:
        System.out.println("Domingo");
        break;
    default:
        System.out.println("Día inválido");
        break;
}


Salida:


Miércoles

Versión moderna (Java 14 en adelante)

Java también permite una versión más corta usando expresiones switch:

  
import java.util.Scanner;

public class Mavenproject2 {
    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        System.out.println("digita el numero del dia 1-7");
        int dia = leer.nextInt();
    String resultado = switch (dia) {
    case 1 -> "Lunes";
    case 2 -> "Martes";
    case 3 -> "Miércoles";
    case 4 -> "Jueves";
    case 5 -> "Viernes";
    case 6 -> "Sábado";
    case 7 -> "Domingo";
    default -> "Día inválido";
};

System.out.println(resultado);

        
        leer.close();
    }
}
  

Cuando Usamos el switch y el if

Situación Estructura Recomendación
Comparar variables con valores fijos 1,2,3,4,5 o 'A', 'B' switch Usar cuando se trabaja con una misma variable que puede tener varios valores exactos.
Comparar condiciones lógicas <, >, ==, >=, != if(){} else if(){} Usar cuando se deben evaluar expresiones lógicas o relacionales.
Evaluar varias opciones exactas switch Recomendado para múltiples casos con valores definidos (como menús u opciones).
Solo dos caminos posibles if(){} else{} Usar cuando solo hay dos resultados posibles: verdadero o falso.

Los switch en POO son para mayormente hacer menus

En los menús, el switch se usa para evaluar la opción que el usuario elige —y esa opción puede venir, por ejemplo, desde un Scanner, desde un método de un objeto, o desde un atributo.


import java.util.Scanner;

public class MenuEjemplo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int opcion;

        System.out.println("=== MENÚ DE OPCIONES ===");
        System.out.println("1. Registrar usuario");
        System.out.println("2. Mostrar usuarios");
        System.out.println("3. Salir");
        System.out.print("Selecciona una opción: ");
        opcion = sc.nextInt();

        switch (opcion) {
            case 1:
                System.out.println("Has elegido registrar un usuario.");
                break;
            case 2:
                System.out.println("Mostrando lista de usuarios...");
                break;
            case 3:
                System.out.println("Saliendo del programa...");
                break;
            default:
                System.out.println("Opción no válida.");
                break;
        }
    }
}

Entonces sí:

  • El switch sirve para controlar menús (uno de sus usos más comunes).
  • Se usa para evaluar la opción que el usuario selecciona.
  • Puede estar dentro de un objeto (como una clase Menu, Tienda, Sistema, etc.).