Oracle
Oracle
Oracle
Java Foundations
5-3
Sentencia switch
Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Crear una estructura de control de switch
−Comparar construcciones if/else con estructuras de control
de switch
−Describir la finalidad de la palabra clave break
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 3
comerciales de sus respectivos propietarios.
3
¿Por qué no utilizar una sentencia if/else?
• Supongamos que tiene que escribir un programa Java
para implantar lo siguiente:
−Un usuario introduce la edad de un alumno entre 9 y 12, y el
programa imprime el curso en el que estaría.
• Vamos a ver primero la solución utilizando una
sentencia if/else.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 4
comerciales de sus respectivos propietarios.
4
Solución: sentencia if/else
Scanner in = new Scanner(System.in);
System.out.println("Introduzca su edad");
int grade = in.nextInt();
if (grade == 9){
System.out.println("Es alumno de primer año");
}
else if (grade == 10) {
System.out.println("Es alumno de segundo año"); Las condiciones
} complejas con
else if (grade == 11) { una construcción
System.out.println("Es alumno de tercer año"); encadenada if
} suelen ser
else if (grade == 12) { difíciles de leer y
System.out.println("Es alumno de cuarto año"); mantener.
}
else {
System.out.println("Edad no válida");
}//endif
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 5
comerciales de sus respectivos propietarios.
En el ejemplo de código se muestra una construcción encadenada if para determinar el curso del
alumno.
5
La sentencia switch
• La sentencia switch proporciona una sintaxis más eficaz
a la hora de elegir entre varias alternativas.
switch (<variable or expression>) {
case <literal value>: //code_block1
[break;]
case <literal value>: // code_block2
[break;]
default: //default_code
}//end switch
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 6
comerciales de sus respectivos propietarios.
variable es la variable con el valor que desea probar. También puede utilizar una expresión. La variable
(o el resultado de una expresión) solo pueden ser de tipo char, byte, short, int o String.
La palabra clave case señala el valor que está probando. La combinación de la palabra clave case y un
valor literal se denomina etiqueta case.
La sentencia break es una palabra clave opcional que hace que la ejecución de código salga de la
sentencia switch inmediatamente.
6
Solución: sentencia switch
Scanner in = new Scanner(System.in);
System.out.println("¿En qué curso está?");
int grade = in.nextInt();
switch (grade) {
case 9:
System.out.println("Es alumno de primer año");
break;
case 10:
System.out.println("Es alumno de segundo año");
break;
case 11:
System.out.println("Es alumno de tercer año");
break;
case 12:
System.out.println("Es alumno de cuarto año");
break;
default:
System.out.println("Edad no válida");
}//end switch
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 7
comerciales de sus respectivos propietarios.
Comparada con la solución proporcionada por una sentencia if , esta solución es más compacta y se
lee mejor.
7
La sentencia switch
• Comparada con la sentencia if/else, la sentencia
switch:
−Es más sencilla que las sentencias if encadenadas.
−Es más fácil de leer y mantener.
−Simplifica la organización de las distintas ramas de código que
se pueden ejecutar.
−Proporciona un rendimiento mejor.
−Se puede utilizar para condiciones complejas.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 8
comerciales de sus respectivos propietarios.
8
Cuándo utilizar construcciones switch
• Se pueden utilizar cuando esté probando:
−Igualdades (no un rango)
−Un único valor
−Valores fijos conocidos en tiempo de compilación
−int, short, byte, char o String
int month = 8;
month = in.nextInt(); Solo se puede probar un valor.
switch (month) {
case 1: case 3: case 5: case 7: Valores conocidos
case 8: case 10: case 12: System.out.print("31 días");
break;
case 2: if(isLeapYear)){
..
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 9
comerciales de sus respectivos propietarios.
Si no puede encontrar valores para casos de prueba individuales, utilice una construcción if/else.
9
Ejemplo de String en una sentencia switch
String typeOfDay;
String dayOfWeekArg = "Jueves";
switch (dayOfWeekArg) {
case "Monday": typeOfDay = "Inicio de la semana laboral";
break;
case "Tuesday":
case "Wednesday":
case "Thursday": typeOfDay = "Entre semana";
break;
case "Friday": typeOfDay = "Fin de la semana laboral";
break;
case "Saturday":
case "Sunday": typeOfDay = "Fin de semana";
break;
default: System.out.print("No válido");
}//end switch
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 10
comerciales de sus respectivos propietarios.
En este ejemplo se muestra cómo utilizar string en una expresión de una sentencia switch y en
expresiones de etiquetas case.
10
Ejercicio 1
• Cree un nuevo proyecto y agréguele el archivo
SwitchEx1.java
• Modifique SwitchEx1.java para implantar las
siguientes acciones con una sentencia switch:
−El usuario introduce un mes como un número.
−El nombre del mes correspondiente se debe mostrar.
−Para cualquier mes no válido, el resultado debe ser “Mes no
válido”.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 11
comerciales de sus respectivos propietarios.
11
Palabras clave de una sentencia switch
• Estas palabras claves se utilizan en sentencias switch:
−switch: especifica la variable que se va a probar para obtener
un valor.
−case: compara el valor de la variable switch.
−default: cuando el valor de entrada no coincide con la
sentencia case, la sentencia por defecto se ejecuta; sin
embargo, la sentencia por defecto es opcional.
−break: se utiliza como la última sentencia en cada lista de
sentencias case, una sentencia break hace que el control se
traslade al final de la sentencia switch.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 12
comerciales de sus respectivos propietarios.
12
¿Qué es una palabra clave break?
• Se utiliza como la última sentencia en cada lista de
sentencias case y hace que el control se traslade fuera
de la sentencia switch.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 13
comerciales de sus respectivos propietarios.
13
¿Qué es una palabra clave break?
char option = 'A';
int aCount = 0, bCount = 0, cCount = 0;
switch (option) {
case 'A': aCount++;
System.out.println("Recuento de A " + aCount);
break;
case 'B': bCount++;
System.out.println("Recuento de B " + bCount);
break;
case 'C': cCount++;
System.out.println("Recuento de C " + cCount);
break;
}//end switch
//additional code . . .
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 14
comerciales de sus respectivos propietarios.
Resultado: Recuento de A 1
14
Ejercicio 2
• Agregue el archivo SwitchEx2.java al proyecto
creado para el ejercicio 1
• Observe SwitchEx2.java y ejecute el programa.
• Observe el resultado.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 15
comerciales de sus respectivos propietarios.
15
Ejercicio 2
• Modifique la sentencia switch de la siguiente manera:
• Elimine las sentencias break para el caso ‘A’.
−Ejecute el programa.
−Observe el resultado.
• Elimine las sentencias break para el caso ‘A’ y el caso
‘B’.
−Ejecute el programa.
−Observe el resultado.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 16
comerciales de sus respectivos propietarios.
16
¿Qué es un fallo fall through de switch?
• Un fallo fall through de switch es una condición que se
produce si no hay sentencias break al final de cada
sentencia case.
• Todas las sentencias que aparecen después de la
etiqueta case que coincide se ejecutan en secuencia, a
pesar de la expresión de las etiquetas case siguientes,
hasta que se detecta una sentencia break.
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 17
comerciales de sus respectivos propietarios.
17
Explicación de un fall through de switch
• Resultado esperado:
−El valor de las variables de recuento ha aumentado 1.
char option = 'A';
int aCount = 0, bCount = 0, cCount = 0;
switch (option) {
case 'A': aCount++;
System.out.println("Recuento de A " + aCount);
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 18
comerciales de sus respectivos propietarios.
En este ejemplo, si el valor de option es A, coincide con la primera sentencia case. Dado que no hay
sentencia break, la ejecución continúa con la siguiente sentencia case hasta que se encuentra una
sentencia break. El valor de bCount también aumenta en 1.
Salida:
Recuento de A 1
Recuento de B 1
18
Ejemplo de fallo fall through de switch
int month = 12;
switch (month) {
case 2: System.out.println("28 días (29 en años bisiestos)");
break;
case 4:
case 6:
case 9:
case 11: System.out.println("30 días");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 12: System.out.println("31 días");
break;
default: System.out.println("Número de mes no válido");
break;
}//end switch
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 19
comerciales de sus respectivos propietarios.
Este ejemplo muestra cómo un fallo fall through es útil en algunos casos. A veces, es preferible tener
varias sentencias case sin sentencias break entre ellas.
19
Resumen
• En esta lección, debe haber aprendido lo siguiente:
−Crear una estructura de control de switch
−Comparar construcciones if/else con estructuras de control
de switch
−Describir la finalidad de la palabra clave break
JFo 5-3 Copyright © 2022, Oracle y/o sus filiales. Oracle, Java y MySQL son marcas comerciales
Sentencia switch registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas 20
comerciales de sus respectivos propietarios.
20
21