Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Taller de programación Luis Rojas Farro, Mg. NO VALE REPETIR ¿ALGO QUE RECUERDES DE LA CLASE ANTERIOR? Aprendimos a manejar estructuras condicionales Switch – Case • Como se termina la sentencia Switch • En caso de que no se cumpla Switch con ningún valor que ocurre • En caso de no poner break que ocurre? Logro: Repasaremos lo aprendido en la Unidad 1, clase scanner, cadenas, condicionales if else, y switch. Realizaremos la practica de cierre de unidadad Logro de la sesión: Contenido de la sesión Semana 5: Desarrollaremos ejercicios de repaso antes de la practica calificada CLASE SCANNER El uso de la clase Scanner es una de las mejores maneras de ingresar datos por teclado en Java. Scanner es una clase en el paquete java.util utilizada para obtener la entrada de los tipos primitivos como int, double etc. y también String. Es la forma más fácil de leer datos en un programa Java, aunque no es muy eficiente si se quiere un método de entrada para escenarios donde el tiempo es una restricción, como en la programación competitiva. En resumen: •Para crear un objeto de clase Scanner, normalmente pasamos el objeto predefinido System.in, que representa el flujo de entrada estándar. Podemos pasar un objeto de clase File si queremos leer la entrada de un archivo. •Para leer valores numéricos de un determinado tipo de datos XYZ, la función que se utilizará es nextXYZ(). Por ejemplo, para leer un valor de tipo short, podemos usar nextShort(). •Para leer cadenas (strings), usamos nextLine(). •Para leer un solo carácter, se usa next().charAt(0). La función next()devuelve el siguiente token/palabra en la entrada como cadena y la función charAt (0) devuelve el primer carácter de esa cadena. https://www.javadesdecero.es/tipos-datos-java-ejemplos/ CLASE SCANNER 1. leer datos de varios tipos 2.A veces, debemos verificar si el siguiente valor que leemos es de cierto tipo o si la entrada ha finalizado (se encontró el marcador EOF). Luego, verificamos si la entrada del Scanner es del tipo que queremos con la ayuda de las funciones hasNextXYZ() donde XYZ es del tipo que nos interesa. La función devuelve true (verdadero) si el scanner tiene un token de ese tipo, de lo contrario es false (falso). Por ejemplo, en el siguiente código, hemos utilizado hasNextInt(). Para verificar una cadena, usamos hasNextLine(). De manera similar, para verificar si hay un solo carácter, usamos hasNext().CharAt(0). ESTRUCTURAS CONDICIONALES EN JAVA (IF, IF ELSE, IF ELSE IF) El flujo de ejecución en Java es lineal por lo que se va ejecutando línea a línea en el orden en el que se va leyendo por lo que las sentencias para controlar el flujo de ejecución son la base ya que permiten ejecutar partes del código en base a condiciones (if, if else, el operador ternario ?: y switch), que se ejecuten un número determinado de veces o hasta/mientras se cumpla una condición (for, while y do while), romper el flujo saliendo del código que se está ejecutando (break, continue y return) o si se produce alguna excepción (try catch finally y throw). En esta ocasión nos vamos a centrar en las instrucciones condicionales que son las más básicas. IF EN JAVA La estructura condicional más simple en Java es el if, se evalúa una condición y en caso de que se cumpla se ejecuta el contenido entre las llaves {} o en caso de que se omitan se ejecuta el código hasta el primer «;» por lo tanto si no se usan los {} la condición aplica solo a la siguiente instrucción al if. if (condicion) { ejecutar(); } // Los {} son opcionales if (condicion) ejecutar(); // Y mas compacto if (condicion) ejecutar(); Por lo tanto el uso de las llaves es opcional cuando dentro de la condición hay una sola línea de código, pero puede generar errores si se añade más código que se espere que se ejecute bajo la condición si no recordamos que tenemos que añadir las llaves en estos casos. Personalmente, prefiero usar las llaves y en caso de no utilizarlas pondría el if completo en una única línea para que sea más claro que la condición solo aplica a esa línea. Para que se ejecute el código dentro de un if se debe de cumplir la condición que puede ser directamente un boolean o una comprobación que genere uno (==,<,<=,>,>=,!=,.equals() o cualquier otra función que devuelva true o false pudiendo ser la condición todo lo compleja que queramos. // Si la temperatura es mayor que 25 if (temperatura > 25) { System.out.println("A la playa!!!"); } // Si haceSol es vedadero if (haceSol) { System.out.println("No te olvides la sombrilla"); } // Si esta nevando o hace sol if (nevando || haceSol) { System.out.println("Que bien"); } // Si nevando y la temperatura esta entre 20 y 30 if (nevando && (temperatura >= 20 && temperatura <= 30)) { System.out.println("No me lo creo"); } // Si la temperatura es menor que 0 o mayor que 30 y hace sol if ((temperatura < 0 || temperatura > 30) && haceSol) { System.out.println("Mejor me quedo en casa"); } https://programandoointentandolo.com/2014/05/bucles-y-en-java.html https://programandoointentandolo.com/2014/05/break-y-continue-en-java.html ESTRUCTURAS CONDICIONALES EN JAVA (IF, IF ELSE, IF ELSE IF) IF ELSE EN JAVA Con el if solo podemos hacer que se ejecute un fragmento de código o no pero en el caso de que no se cumpla la condición no se hace nada (sigue el flujo normal de ejecución) por lo que si queremos que se ejecute otra cosa cuando no se cumpla la condición solo con el if tenemos que hacer otro con la condición inversa provocando que se tenga que comprobar la condición 2 veces mientras que si usamos el else solo necesitamos hacer la comprobación una sola vez. // Usando solo ifs if (temperatura > 25) { System.out.println("A la playa!!!"); } if (temperatura <= 25) { System.out.println("Esperando al buen tiempo..."); } // Usando if con else // Si la temperatura es mayor que 25 ... y si no ... if (temperatura > 25) { System.out.println("A la playa!!!"); } else { System.out.println("Esperando al buen tiempo..."); } ESTRUCTURAS CONDICIONALES EN JAVA (IF, IF ELSE, IF ELSE IF) IF ELSE IF EN JAVA El siguiente nivel es hacer el else condicional añadiendo un if para que si no se cumple la primera condición (la del if principal) se evalue esta nueva condición de modo que se puede concatenar la cantidad de if else que se necesiten para cubrir todos los distintos escenarios que precisen ser tratados de una forma particular, siendo el ultimo else el que se ejecute cuando no se cumpla ninguna condición (el else es siempre opcional). if (temperatura > 25) { // Si la temperatura es mayor que 25 ... System.out.println("A la playa!!!"); } else if (temperatura > 15) { // si es mayor que 15 y no es mayor que 25 .. System.out.println("A la montaña!!!"); } else if (temperatura < 5 && nevando) { // si es menor que 5 y esta nevando y no es mayor que 15 ni mayor que 25 System.out.println("A esquiar!!!"); } else { // si la tempera no es mayor que 25 ni que 15 ni menor que 5 si esta nevando System.out.println("A descansar... zZz"); } ESTRUCTURAS CONDICIONALES EN JAVA (IF, IF ELSE, IF ELSE IF) IF ANIDADOS Es posible anidar ifs para reorganizar las condiciones o hacerlas más sencillas lo que en muchas ocasiones hace el código más fácil de leer, a continuación una de las posibles formas posibles para reescribir el ejemplo anterior. if (temperatura > 15) { if (temperatura > 25) { // Si la temperatura es mayor que 25 ... System.out.println("A la playa!!!"); } else { System.out.println("A la montaña!!!"); } } else { if (temperatura < 5) { if (nevando) { System.out.println("A esquiar!!!"); } } else { System.out.println("A descansar... zZz"); } } ESTRUCTURAS CONDICIONALES EN JAVA (SWITCH - CASE) Con el switch se puede hacer un control del tipo if else if… más estructurado pero en realidad no exactamente igual puesto que con el switch lo que se hace es definir un conjuntode casos que van a tener una ejecución distinta y se ejecutará el caso que coincida con el valor indicado en el switch. switch (variable) { case valor_1: case valor_2: // Ejecutar si el valor de variable es igual a valor_1 o a valor_2 ejecutarA(); break; // Salir del switch case valor_3: // Ejecutar si el valor de variable es igual a valor_3 ejecutarB(); break; // Salir del switch default: // Ejecutar si el valor de varible es distinto del del resto de casos ejecutarC(); break; // Salir del switch } ESTRUCTURAS CONDICIONALES EN JAVA (SWITCH - CASE) Por lo tanto el switch es la mejor opción cuando tenemos un conjunto de valores esperados (if con == o .equals()) porque es más legible y más limpio, imagina por ejemplo sacar el nombre del dia de la semana a partir de su número, con un if else necesitamos 7 elses… pero es completamente inservible para condiciones en las que se hacen comparaciones del tipo < o > por que controlar todos los posibles valores puede ser una locura, suponiendo que el rango no esté muy acotado que entonces si sería una opción valida. // Switch con int como condicion switch (dia) { case 1: System.out.println("Domingo"); break; case 2: System.out.println("Lunes"); break; case 3: System.out.println("Martes"); break; case 4: System.out.println("Miercoles"); break; case 5: System.out.println("Jueves"); break; case 6: System.out.println("Viernes"); break; case 7: System.out.println("Sabado"); break; // default: es opcional } tring tipoVehiculo = "coche"; switch (tipoVehiculo) { case "coche": System.out.println("Puedes pasar de 00:00 a 08:00"); break; case "camion": System.out.println("Puedes pasar de 08:00 a 16:00"); break; case "moto": System.out.println("Puedes pasar de 16:00 a 24:00"); break; default: System.out.println("No se puede pasar con un " + tipoVehiculo); break; } De los dos ejemplos anteriores podemos sacar que el número de casos es variable según las necesidades y que el caso por defecto (el que se ejecuta cuando no se cumple otro igual que el else de un if) es opcional por lo que lo podemos omitir si no se requiere ninguna acción especial para ese caso o si simplemente sabemos que no existe otra opción como sucede con los días de la semana. ESTRUCTURAS CONDICIONALES EN JAVA (SWITCH - CASE) Y si se quiere que en varios casos se ejecute la misma lógica no es necesario repetirla una y otra vez para cada caso, en su lugar podemos agrupar los casos y eliminar los break intermedios que hacen que se salga del switch. Por ejemplo para realizar una acción para los días laborables y otra distinta para los festivos se hace del siguiente modo. switch (dia) { case 2: case 3: case 4: case 5: case 6: System.out.println("Dia laboral"); break; case 1: case 7: System.out.println("Fin de semana"); break; default: System.out.println("La semana solo tiene 7 dias"); break; } ESTRUCTURAS CONDICIONALES EN JAVA (SWITCH - CASE) Y para terminar comentar que cualquier switch se puede hacer usando ifs else porque al fin y al cabo son la base sobre la que se sustenta su funcionamiento. Podemos verlo con la conversión del último ejemplo que es el más complejo de los switch que hemos visto Integer diasHastaFinSemana = 0; switch (dia) { case 2: diasHastaFinSemana++; case 3: diasHastaFinSemana++; case 4: diasHastaFinSemana++; case 5: diasHastaFinSemana++; case 6: System.out.println("Dia laboral: Dias restantes hasta el fin de semana: " + diasHastaFinSemana); break; case 1: case 7: System.out.println("Fin de semana"); break; default: System.out.println("La semana solo tiene 7 dias"); break; } Integer diasHastaFinSemana = 0; if (dia > 1 && dia < 7) { if (dia < 6) { diasHastaFinSemana++; if (dia < 5) { diasHastaFinSemana++; if (dia < 4) { diasHastaFinSemana++; if (dia < 3) { diasHastaFinSemana++; } } } } System.out.println("Dia laboral: Dias restantes hasta el fin de semana: " + diasHastaFinSemana); } else if (dia == 1 || dia == 7) { System.out.println("Fin de semana"); } else { System.out.println("La semana solo tiene 7 dias"); } Repasamos la Unidad 1 Hicimos la practica calificada ¿SE LOGRÓ LA META DE LA SESIÓN? Conclusiones La clase scanner. Cadenas Condicionales Problemas propuestos (algoritmo y código) • Los Ejercicios se pueden visualizar en canvas Tarea REVISAR EL TEMA DE LA SIGUIENTE SESIÓN COLOCADO EN CANVAS ESTRUCTURA REPETITIVA WHILE Diapositiva 1 Diapositiva 2: no vale repetir ¿algo que recuerdes de la clase anterior? Diapositiva 3 Diapositiva 4: Clase Scanner Diapositiva 5: Clase Scanner Diapositiva 6 Diapositiva 7 Diapositiva 8 Diapositiva 9 Diapositiva 10 Diapositiva 11 Diapositiva 12 Diapositiva 13 Diapositiva 14: ¿se logró la meta de la sesión? Diapositiva 15 Diapositiva 16 Diapositiva 17: Revisar el tema de la siguiente sesión colocado en Canvas Estructura REPETITIVA WHILE Diapositiva 18
Compartir