Control de Flujo.. Estructuras de Decisión (Switch-case-default) - PDF
Document Details
Tags
Summary
El documento proporciona una introducción a las estructuras de decisión en Java, enfocándose en la instrucción switch-case-default. Explica las limitaciones de esta estructura y proporciona ejemplos para comprender mejor su uso práctico. Se explica la utilidad de switch-case para tomar diferentes caminos basados en las condiciones específicas.
Full Transcript
**Control de Flujo.. estructuras de decisión** **Segunda parte:** **Switch-case-default** Las estructuras de decisión en Java permiten al programa tomar diferentes caminos basados en condiciones específicas. El switch es útil cuando tienes múltiples condiciones basadas en el valor de una variable...
**Control de Flujo.. estructuras de decisión** **Segunda parte:** **Switch-case-default** Las estructuras de decisión en Java permiten al programa tomar diferentes caminos basados en condiciones específicas. El switch es útil cuando tienes múltiples condiciones basadas en el valor de una variable considerando solo valores ordinales). En matemáticas, los valores ordinales se refieren a los números ordinales, que se utilizan para denotar la posición de elementos en una secuencia ordenada, cada número ordinal tiene un sucesor único. A diferencia de los números cardinales, que indican cantidad, los números ordinales nos dicen el lugar que ocupa un elemento en un orden específico: - La variable selector puede ser del tipo de dato entero (valor ordinal): byte, short, int, long. - La variable selector puede ser del tipo de dato char o String (valor ordinal):char, String Las estructuras de selección múltiple tienen algunas limitaciones: - **Compatibilidad de tipos**: switch en Java solo puede usarse con tipos de datos primitivos como byte, short, int, char, enumeraciones (enum), y cadenas (String) a partir de Java 7. No es compatible con tipos como long, float, double, u objetos. - **Evaluación de expresiones**: switch solo evalúa una expresión basada en el valor exacto de una variable. No puede manejar rangos o condiciones complejas como if-else. - **Falta de comparaciones complejas**: No se pueden usar operadores de comparación o lógicos dentro de los casos de switch. Solo compara valores directamente. - **Legibilidad**: Cuando hay muchos casos, un switch puede volverse difícil de leer y mantener. En estos casos, una estructura if-else podría ser más clara y manejable. - **Acciones comunes**: Si necesitas realizar acciones comunes para varios casos, debes tener cuidado con el uso del break para evitar caídas accidentales (fall-through) a otros casos. +-----------------------------------------------------------------------+ | switch (variable\_selector) { | | | | case valor1: | | | | // Código para valor1 | | | | break; | | | | case valor2: | | | | // Código para valor2 | | | | break; | | | | // Más casos\... | | | | default: | | | | // Código si ninguna de las condiciones anteriores es verdadera | | | | break; | | | | } | +-----------------------------------------------------------------------+ Ejemplos (agregar ambos ejercicios al reporte de la practica 3): +-----------------------------------+-----------------------------------+ | Scanner leer=**new** | Scanner leer=**new** | | Scanner(System.***in***); | Scanner(System.***in***); | | | | | System.***out***.print(\"Escribe | System.***out***.print(\"Escribe | | un caracter :\"); | un mes :\"); | | | | | **char** caracter | String mes =leer.next(); | | =leer.next().charAt(0); | | | | **switch** (mes) { | | **switch** (caracter) | | | | **case** \"Diciembre\": **case** | | { **case** \'a\': **case** \'A\': | \"DICIEMBRE | | | | | **case** \'e: **case** \'E\': | **case** \"Enero\": **case** | | | \"ENERO\": | | **case** \'i\': **case** \'I\': | | | | **case** \"Febrero\": **case** | | **case** \'o\': **case** \'O\': | \"FEBRERO\": | | | | | **case** \'u\': **case** \'U\': | System.***out***.println(mes+ | | | \"==\>Invierno\"); **break**; | | System.***out***.println(caracter | | | + | **case** \"Marzo\": **case** | | \" es una vocal.\"); **break;** | \"MARZO\": | | **default** | | | | **case** \"Abril\": **case** | | System.***out***.println(caracter | \"ABRIL\": | | + \" no es una vocal.\"); | | | **break**; }//switch | **case** \"Mayo\": **case** | | | \"MAYO\": | | leer.close(); | | | | System.***out***.println(mes+ | | | \"==\>Primavera\"); **break**; | | | | | | **case** \"Junio\": **case** | | | \"JUNIO\": | | | | | | **case** \"Julio\": **case** | | | \"JULIO\": | | | | | | **case** \"Agosto\": **case** | | | \"AGOSTO\": | | | | | | System.***out***.println(mes+ | | | \"==\>Verano\"); **break**; | | | | | | **case** \"Septiembre\": **case** | | | \"SEPTIEMBRE\": | | | | | | **case** \"Octubre\": **case** | | | \"OCTUBRE\": | | | | | | **case** \"Noviembre\": **case** | | | \"NOVIEMBRE\": | | | | | | System.***out***.println(mes+ | | | \"==\>Otoño\"); **break**; | | | | | | **default**: | | | | | | System.***out***.println( mes+ | | | \"Mes no válido==\>\"); | | | **break**; | | | | | | }//switch | | | | | | leer.close(); | +-----------------------------------+-----------------------------------+ **Operador Ternario ?** Para decisiones simples, se puede usar el operador ternario, que es una forma compacta de if-else. variable = (condicion) ? valorSiVerdadero : valorSiFalso; La variable donde se asigna el valor puede ser de cualquier tipo de dato simple. El operador ternario tiene algunas limitaciones: - **Limitaciones en la expresión**: El operador ternario solo puede manejar expresiones simples. No puedes usar bloques de código o realizar varias acciones dentro de un operador ternario. - **No adecuado para todas las situaciones**: Para condiciones que involucran lógica compleja o donde necesitas manejar múltiples posibles resultados, los if-else tradicionales pueden ser más adecuados y comprensibles. - **Legibilidad del código**: Cuando los operadores ternarios se anidan o se usan para condiciones complejas, pueden hacer que el código sea difícil de leer y mantener. A veces, un if-else tradicional puede ser más claro. Ejemplos (agregar ambos ejercicios al reporte de la practica 3): +-----------------------------------+-----------------------------------+ | Scanner leer=**new** | Scanner leer=**new** | | Scanner(System.***in***); | Scanner(System.***in***); | | | | | System.***out***.print(\"Escribe | **byte** lado1,lado2,lado3; | | una calificacion :\"); | | | | System.***out***.print(\"Escribe | | **float** nota; | primer lado del triangulo :\"); | | | | | nota=leer.nextFloat(); | lado1=leer.nextByte(); | | | | | String clasificacion = | System.***out***.print(\"Escribe | | (nota\= 70) ? \"Bueno\" : | :\"); | | | | | (nota \>= 60) ? \"Aprobado\" : | lado3=leer.nextByte(); | | \"Reprobado\"; | | | | String tipoTriangulo =(lado1\>0 | | System.***out***.println(\"La | && lado2\>0 && lado3\>0)? | | clasificación de la nota \" + | | | nota + \" es: \" + | (lado1 == lado2 && lado2 == | | clasificacion); | lado3) ? \"es Equilátero\" : | | | | | leer.close(); | (lado1 == lado2 \|\| lado1 == | | | lado3 \|\| lado2 == lado3 ) ? \" | | | es Isósceles\" : \" es | | | Escaleno\":\" no se forma, por | | | los valores negativos\"; | | | | | | System.***out***.println(\"El | | | triángulo : \" + tipoTriangulo); | | | | | | leer.close(); | +-----------------------------------+-----------------------------------+ **Realizar los siguientes ejercicios usando el Operador ternario:** **(condicion) ? valorSiVerdadero : valorSiFalso;** 1. Diseñar un programa que permita cargar un número entero positivo de hasta tres cifras y muestre un mensaje indicando si tiene 1, 2, o 3 cifras. Mostrar un mensaje de error si el número de cifras es mayor. 2. Se ingresa por teclado un valor entero, mostrar una leyenda que indique si el número es positivo, cero o negativo. 3. Escribe un programa que tome la edad de una persona y use el operador ternario para determinar si tiene la edad legal para votar. 4. Escribe un programa que tome la temperatura del agua en grados Celsius, determine e imprima si el agua está en estado sólido, líquido o gaseoso. 5. Escribe un programa que tome un año y determine si es un año bisiesto o no. Determinar si un año es bisiesto implica seguir una serie de reglas simples pero precisas. 1. - 2. - 3. - 6. Un postulante a un empleo realiza una prueba de capacitación, se obtuvo la siguiente información: cantidad total de preguntas que se le realizaron y la cantidad de preguntas que contestó correctamente. Se pide confeccionar un programa que ingrese los dos datos por teclado e informe el nivel de este según el porcentaje de respuestas correctas que ha obtenido, y sabiendo que: Nivel máximo: Porcentaje\>=90%. Nivel medio: Porcentaje\>=75% y \=50% y \