1 00:00:00,370 --> 00:00:07,690 Vale, voy a grabar la clase de hoy. Entonces, si habláis, me dais consentimiento para que grabe vuestra voz. 2 00:00:08,570 --> 00:00:12,990 Entonces, hasta ayer hemos visto algo de variables, hemos hecho algunos ejemplos. 3 00:00:13,410 --> 00:00:19,809 Vamos a ver ahora algunas cosillas que podemos utilizar para hacer nuestros programas un poquito más interesantes. 4 00:00:19,809 --> 00:00:28,710 Porque con eso de las variables, las variables son la base y son súper importantes y son fundamentales, pero con solo las variables no hacemos nada. 5 00:00:28,710 --> 00:00:34,509 Tenemos que tener algo para poder manipular un poco las variables y hacer algo con ellas 6 00:00:34,509 --> 00:00:37,429 Porque si no, y por ahora tenemos una cosa sola, dos 7 00:00:37,429 --> 00:00:44,450 O sea, el más, que es o suma aritmética o concatenación de string 8 00:00:44,450 --> 00:00:46,049 Vamos a añadir algo más, ¿vale? 9 00:00:46,310 --> 00:00:51,329 Tenemos, por ejemplo, operadores aritméticos que probablemente ya conocéis 10 00:00:51,329 --> 00:00:57,329 El más, que es la suma, el menos, que es la resta, el por, ¿vale? 11 00:00:57,329 --> 00:01:01,729 La multiplicación, que se hace con un asterisco, y la división, que se hace con una barra. 12 00:01:02,170 --> 00:01:05,469 Y lo que no conocéis, probablemente, es el módulo. 13 00:01:06,709 --> 00:01:14,549 Este es un operador, que existe en casi todos los lenguajes, que lo que devuelve es el resto de la división. 14 00:01:15,290 --> 00:01:22,049 Si esto hace la división, el barra, el módulo devuelve el resto de la división. 15 00:01:22,049 --> 00:01:32,500 Entonces, si yo hago 10 módulo 3, el resultado es 1, ¿sí? 16 00:01:32,980 --> 00:01:39,859 Y con esto, efectivamente, el ejercicio de los impares, pues se podía solucionar con esta cosilla de aquí, ¿sí? 17 00:01:41,239 --> 00:01:45,560 Tened en cuenta también que todos estos operadores van por tipos, 18 00:01:46,799 --> 00:01:55,040 y si yo hago 5 dividido 2, el resultado es 2. 19 00:01:55,040 --> 00:01:58,439 porque 5 es un int 20 00:01:58,439 --> 00:02:00,540 2 es un int 21 00:02:00,540 --> 00:02:03,140 y dint dividido int 22 00:02:03,140 --> 00:02:05,260 dará un int 23 00:02:05,260 --> 00:02:07,040 entonces no me dará nunca 24 00:02:07,040 --> 00:02:07,760 2,5 25 00:02:07,760 --> 00:02:10,439 me dará la parte entera 26 00:02:10,439 --> 00:02:12,599 de eso, truncada 27 00:02:12,599 --> 00:02:14,300 no redondeada 28 00:02:14,300 --> 00:02:17,060 ¿si? entonces si yo hiciera 29 00:02:17,060 --> 00:02:18,479 10 dividido 3 30 00:02:18,479 --> 00:02:21,379 ¿cuánto me da? 31 00:02:22,539 --> 00:02:23,219 3 32 00:02:23,219 --> 00:02:27,780 Y 10 módulo 1, módulo 3, me da 1 33 00:02:27,780 --> 00:02:31,000 Entonces con estas dos cosas puedo saber, ¿no? 34 00:02:31,139 --> 00:02:34,460 Es, me daría 3 con resto de 1 35 00:02:34,460 --> 00:02:36,680 ¿Sí? 36 00:02:37,759 --> 00:02:38,080 Vale 37 00:02:38,080 --> 00:02:43,719 Ten en cuenta que si quiero en vez de hacer 5 dividido 2 y que me dé 2,5, ¿cómo lo hago? 38 00:02:48,120 --> 00:02:48,680 Todos 39 00:02:48,680 --> 00:02:52,180 Con que haya 1, suficiente 40 00:02:52,180 --> 00:03:00,180 Si yo pongo 5f dividido 2, como es un float dividido un int, el resultado será un float. 41 00:03:00,520 --> 00:03:01,819 Entonces me dará 2,5. 42 00:03:02,520 --> 00:03:05,080 Cuidado a no guardarlo en una variable int. 43 00:03:06,419 --> 00:03:07,500 ¿Queréis ejemplitos? 44 00:03:10,919 --> 00:03:12,020 Entonces, yo estoy aquí. 45 00:03:14,139 --> 00:03:15,340 Quito esto que es un error. 46 00:03:15,340 --> 00:03:32,500 Vale, entonces, imaginémonos que int x es igual a 5 dividido 2, ¿vale? x ya la he creado, por algún lado, int operación, ¿vale? 47 00:03:32,500 --> 00:03:50,810 Y ahora la imprimo, siso operación, ¿vale? La ejecuto y veis que me da 2, porque este señor de aquí es un int, este señor es un int y el resultado es un int. 48 00:03:50,810 --> 00:03:59,909 Y ahora digo, no, yo quiero que esto sea un double, entonces o el 5 o el 2 lo transformo en un double o en un float o algo por el estilo. 49 00:03:59,909 --> 00:04:14,800 ¿Cómo lo hago? Pues por ejemplo así, ¿vale? 5 dividido 2.0, hemos dicho que cuando pongo el punto algo, por ejemplo 2.0, en automático 2.0 me vale, ¿qué tipo tiene? 50 00:04:16,139 --> 00:04:23,899 Double, ¿vale? Este es un double. Entonces, int dividido double, el resultado es un double. 51 00:04:23,899 --> 00:04:25,560 Y se enfada, ¿por qué se enfada? 52 00:04:30,540 --> 00:04:31,579 Me está diciendo 53 00:04:31,579 --> 00:04:33,379 Type mismatch 54 00:04:33,379 --> 00:04:35,420 O sea, los tipos no corresponden 55 00:04:35,420 --> 00:04:38,199 No puedo convertir desde double 56 00:04:38,199 --> 00:04:38,740 To int 57 00:04:38,740 --> 00:04:42,540 Este es un double, no lo puedo convertir para meter en un int 58 00:04:42,540 --> 00:04:44,240 Por lo tanto se enfada 59 00:04:44,240 --> 00:04:45,759 Entonces debería hacer 60 00:04:45,759 --> 00:04:47,360 Doble 61 00:04:47,360 --> 00:04:52,939 Ahora está feliz 62 00:04:52,939 --> 00:04:55,519 Y cuando yo le doy aquí 63 00:04:55,519 --> 00:04:57,519 El resultado es 2,5 64 00:04:57,519 --> 00:04:59,240 Sí 65 00:04:59,240 --> 00:05:04,819 No 66 00:05:04,819 --> 00:05:06,920 pero 67 00:05:06,920 --> 00:05:16,540 ¿por qué él hace esta operación? 68 00:05:17,439 --> 00:05:19,439 ¿y el resultado de esta operación cuánto es? 69 00:05:21,040 --> 00:05:21,560 2 70 00:05:21,560 --> 00:05:23,959 no, no es double, porque es int dividido int 71 00:05:23,959 --> 00:05:26,199 entonces me sale 2 72 00:05:26,199 --> 00:05:27,879 ahora este 2 73 00:05:27,879 --> 00:05:29,259 lo guardo en un double 74 00:05:29,259 --> 00:05:30,759 y me sale 2.0 75 00:05:30,759 --> 00:05:32,540 no 2.5 76 00:05:32,540 --> 00:05:34,160 entonces cuidado con estas cosas 77 00:05:34,160 --> 00:05:38,000 si yo tengo que fijarme 78 00:05:38,000 --> 00:05:39,180 en dos cosas 79 00:05:39,180 --> 00:05:41,319 donde lo guardo 80 00:05:41,319 --> 00:05:43,560 Que es a la izquierda del igual 81 00:05:43,560 --> 00:05:45,259 Pero también en el tipo 82 00:05:45,259 --> 00:05:47,040 De la expresión que pongo a la derecha 83 00:05:47,040 --> 00:05:49,319 Si yo quiero que esto sea considerado 84 00:05:49,319 --> 00:05:51,079 Un double, uno de estos dos 85 00:05:51,079 --> 00:05:52,000 Tiene que ser double 86 00:05:52,000 --> 00:05:54,899 Si no, será int dividido int 87 00:05:54,899 --> 00:05:55,519 Y me dará int 88 00:05:55,519 --> 00:05:59,500 Luego, ¿por qué aquí no se enfada? 89 00:05:59,620 --> 00:06:01,100 Porque un int dentro de un double 90 00:06:01,100 --> 00:06:02,120 Cabe perfectamente 91 00:06:02,120 --> 00:06:05,459 Es lo que se llama un cast implícito 92 00:06:05,459 --> 00:06:09,220 Hace un cambio de tipo 93 00:06:09,220 --> 00:06:10,779 El solo en automático 94 00:06:10,779 --> 00:06:14,339 ¿Por qué? Porque cualquier int se puede expresar como double 95 00:06:14,339 --> 00:06:16,160 Es al revés que no se puede 96 00:06:16,160 --> 00:06:18,500 Cualquier double no se puede expresar como int 97 00:06:18,500 --> 00:06:21,660 Los ints son menos que los doubles 98 00:06:21,660 --> 00:06:23,120 ¿Sí? 99 00:06:23,680 --> 00:06:24,779 Entonces, ¿qué puedo hacer? 100 00:06:24,879 --> 00:06:25,819 Pues, por ejemplo, así 101 00:06:25,819 --> 00:06:30,500 Digo que este es 5, pero considerarlo como double 102 00:06:30,500 --> 00:06:37,079 Entonces, 2,5 103 00:06:37,079 --> 00:06:39,779 Le podría decir esto 104 00:06:39,779 --> 00:06:43,160 Píllame 5 como float 105 00:06:43,160 --> 00:06:44,819 Lo divide por dos 106 00:06:44,819 --> 00:06:46,519 El resultado será un float 107 00:06:46,519 --> 00:06:49,100 Que ocupa 4 bytes 108 00:06:49,100 --> 00:06:51,480 Y luego este float me lo guardas en un double 109 00:06:51,480 --> 00:06:53,939 ¿Vale? Sí, porque cualquier float 110 00:06:53,939 --> 00:06:54,779 Cabe en un double 111 00:06:54,779 --> 00:06:57,160 El double es más preciso que un float 112 00:06:57,160 --> 00:07:00,040 Dame un float cualquiera y te lo puedo escribir como double 113 00:07:00,040 --> 00:07:01,120 Por lo tanto él 114 00:07:01,120 --> 00:07:05,100 Es contento 115 00:07:05,100 --> 00:07:05,800 Al revés no 116 00:07:05,800 --> 00:07:13,050 No lo sé 117 00:07:13,050 --> 00:07:14,670 Pero si lo hay 118 00:07:14,670 --> 00:07:16,850 No es un tipo primitivo 119 00:07:16,850 --> 00:07:17,970 Es una 120 00:07:17,970 --> 00:07:21,889 clase pensada 121 00:07:21,889 --> 00:07:23,829 para manejar números más precisos 122 00:07:23,829 --> 00:07:27,569 que el double, dudas 123 00:07:27,569 --> 00:07:39,540 es que 124 00:07:39,540 --> 00:07:43,060 esta cosa de aquí se tiene en cuenta 125 00:07:43,060 --> 00:07:44,100 después 126 00:07:44,100 --> 00:07:47,040 antes se resuelve la operación 127 00:07:47,040 --> 00:07:48,839 que está a la derecha y cuando ya 128 00:07:48,839 --> 00:07:50,420 tienes un valor final 129 00:07:50,420 --> 00:07:52,279 que es la evaluación de esto 130 00:07:52,279 --> 00:07:54,639 a este punto decides de guardarlo 131 00:07:54,639 --> 00:07:56,860 si tú lo dejas aquí, tú le estás diciendo 132 00:07:56,860 --> 00:07:58,660 que quieres un double, pero en realidad 133 00:07:58,660 --> 00:08:00,879 la operación que estás haciendo es entre int 134 00:08:00,879 --> 00:08:04,100 Entonces int dividido int 135 00:08:04,100 --> 00:08:05,199 El resultado es un int 136 00:08:05,199 --> 00:08:12,699 Variables como 137 00:08:12,699 --> 00:08:16,500 Si una de las dos variables es double 138 00:08:16,500 --> 00:08:19,000 Entonces estarás haciendo double dividido int 139 00:08:19,000 --> 00:08:20,360 Y es un double el resultado 140 00:08:20,360 --> 00:08:32,629 Esto ya 2.5 141 00:08:32,629 --> 00:08:34,710 Porque esto es double, esto es int 142 00:08:34,710 --> 00:08:36,289 Y double dividido int es double 143 00:08:36,289 --> 00:08:39,690 Con que uno de los dos operadores sea double 144 00:08:39,690 --> 00:08:40,870 El resultado va a ser double 145 00:08:40,870 --> 00:08:46,820 ¿Cómo? 146 00:08:46,820 --> 00:08:52,740 A lo mejor tú no quieres 147 00:08:52,740 --> 00:08:54,700 Ponerlo en una variable, quieres escribirlo 148 00:08:54,700 --> 00:08:55,720 Directamente en pantalla 149 00:08:55,720 --> 00:09:01,620 Si yo hago esto, esto me lo puedo saltar 150 00:09:01,620 --> 00:09:05,320 Y el resultado 151 00:09:05,320 --> 00:09:07,320 Será siempre un double, porque esta cosa 152 00:09:07,320 --> 00:09:08,120 De aquí es un double 153 00:09:08,120 --> 00:09:12,039 ¿Sí? ¿Dudas? 154 00:09:13,480 --> 00:09:13,740 Vale 155 00:09:13,740 --> 00:09:18,019 Más 156 00:09:18,019 --> 00:09:22,659 Y el módulo, si queréis 157 00:09:22,659 --> 00:09:23,879 Veamos el módulo 158 00:09:23,879 --> 00:09:27,899 ¿Cuánto sería? 159 00:09:28,419 --> 00:09:29,679 Que así vemos las dos cosas 160 00:09:29,679 --> 00:09:32,500 Si yo hago op1 161 00:09:32,500 --> 00:09:36,299 Módulo 2 162 00:09:36,299 --> 00:09:37,519 ¿Cuánto me da? 163 00:09:41,259 --> 00:09:50,429 1 como double 164 00:09:50,429 --> 00:09:51,610 Porque este es un double 165 00:09:51,610 --> 00:09:52,649 ¿Vale? 166 00:09:53,190 --> 00:09:55,990 Y si en vez de esto hiciera 167 00:09:55,990 --> 00:10:00,440 10 168 00:10:00,440 --> 00:10:01,860 Módulo 7 169 00:10:01,860 --> 00:10:04,320 ¿Qué me da? 170 00:10:06,730 --> 00:10:13,860 3 como int 171 00:10:13,860 --> 00:10:15,299 Porque este es int 172 00:10:15,299 --> 00:10:16,360 Y este es int 173 00:10:16,360 --> 00:10:23,980 Aquí no hay decimales 174 00:10:23,980 --> 00:10:26,179 No estoy usando la división, estoy usando el módulo 175 00:10:26,179 --> 00:10:28,120 Es el resto de la división 176 00:10:28,120 --> 00:10:31,899 10 dividido por 7 es 1 177 00:10:31,899 --> 00:10:33,259 Con el resto de 3 178 00:10:33,259 --> 00:10:34,320 Me da este 3 179 00:10:34,320 --> 00:10:37,840 Entonces aquí 180 00:10:37,840 --> 00:10:40,000 En el módulo la coma 181 00:10:40,000 --> 00:10:42,240 No sale porque es el resto de la división 182 00:10:42,240 --> 00:10:44,240 ¿Dudas? 183 00:10:46,559 --> 00:10:46,840 Vale 184 00:10:46,840 --> 00:10:48,580 Entonces tenemos 185 00:10:48,580 --> 00:10:51,480 Ya para jugar estos 5 operadores 186 00:10:51,480 --> 00:10:52,360 ¿Sí? 187 00:10:52,360 --> 00:10:56,000 Y algo se puede hacer con estos 5 operadores 188 00:10:56,000 --> 00:10:59,360 Ejercicios 189 00:10:59,360 --> 00:11:01,519 A ver, me lo salto 190 00:11:01,519 --> 00:11:06,059 Me salto los ejercicios porque así os doy salida básica, entrada básica 191 00:11:06,059 --> 00:11:08,059 Y empezamos a hacer los ejercicios de verdad, ¿vale? 192 00:11:08,700 --> 00:11:10,679 Entonces, aquí os pido dos ejercicios 193 00:11:10,679 --> 00:11:13,659 De calcular la área del cuadrado y calcular la área del triángulo 194 00:11:13,659 --> 00:11:14,779 ¿Sí? 195 00:11:15,600 --> 00:11:16,559 Luego los hacéis 196 00:11:16,559 --> 00:11:19,600 Pero antes, dos cosas 197 00:11:19,600 --> 00:11:22,179 Para un programa, si os acordáis 198 00:11:22,179 --> 00:11:26,679 Había un algoritmo, un procedimiento, un proceso en el centro 199 00:11:26,679 --> 00:11:28,539 Luego había entrada y salida 200 00:11:28,539 --> 00:11:31,080 La idea es siempre esa 201 00:11:31,080 --> 00:11:36,360 Pillo los datos, los machaco y saco el resultado 202 00:11:36,360 --> 00:11:43,139 Ahora mismo, ¿cómo le damos nosotros la salida a los programas? 203 00:11:43,139 --> 00:11:46,879 Con el System.Auto.Println 204 00:11:46,879 --> 00:11:51,019 El System.Auto.Println recibe un string aquí 205 00:11:51,019 --> 00:11:53,120 Si vosotros le ponéis un int 206 00:11:53,120 --> 00:11:55,179 Él hace una conversión automática string 207 00:11:55,179 --> 00:11:57,200 Pero lo que quiere aquí 208 00:11:57,200 --> 00:11:59,080 Él es una cadena de caracteres 209 00:11:59,080 --> 00:12:01,419 Y esas cadenas de caracteres te las imprime en pantalla 210 00:12:01,419 --> 00:12:02,960 ¿Sí? 211 00:12:04,860 --> 00:12:05,379 Entonces 212 00:12:05,379 --> 00:12:07,139 Si este punto es hola 213 00:12:07,139 --> 00:12:08,600 Si tienes el nombre Lara 214 00:12:08,600 --> 00:12:11,000 Y haces el nombre, escribe Lara 215 00:12:11,000 --> 00:12:13,500 Nombre más otra cosa, nombre más cinco 216 00:12:13,500 --> 00:12:15,919 Esto de aquí lo converte a un entero 217 00:12:15,919 --> 00:12:17,659 Fijaos que también funciona 218 00:12:17,659 --> 00:12:19,179 Si yo hago algo así 219 00:12:19,179 --> 00:12:26,769 Op1 220 00:12:26,769 --> 00:12:31,789 Esto en principio no le estoy dando un string 221 00:12:31,789 --> 00:12:34,330 Le estoy dando 222 00:12:34,330 --> 00:12:36,289 Un entero 223 00:12:36,289 --> 00:12:38,950 Pero el por debajo 224 00:12:38,950 --> 00:12:39,929 Es como si hiciera 225 00:12:39,929 --> 00:12:41,009 Ah vale muy bien, así 226 00:12:41,009 --> 00:12:46,460 Y eso porque 227 00:12:46,460 --> 00:12:49,279 El System.out que es un 228 00:12:49,279 --> 00:12:51,360 Un objeto de tipo print 229 00:12:51,360 --> 00:12:52,919 Print algo 230 00:12:52,919 --> 00:12:55,480 Print, print, print 231 00:12:55,480 --> 00:12:56,159 No me acuerdo 232 00:12:56,159 --> 00:12:58,519 Print writer 233 00:12:58,519 --> 00:13:01,100 Tiene dentro 234 00:13:01,100 --> 00:13:02,820 Métodos println 235 00:13:02,820 --> 00:13:05,059 Que pueden aceptar un entero, un double 236 00:13:05,059 --> 00:13:07,399 Un string, y todo lo que hacen 237 00:13:07,399 --> 00:13:08,340 Es imprimirlo en pantalla 238 00:13:08,340 --> 00:13:10,379 Ya está hecho, no lo tengo que hacer 239 00:13:10,379 --> 00:13:13,179 Este es nuestro output básico 240 00:13:13,179 --> 00:13:15,259 El output básico es cuando tengo un resultado 241 00:13:15,259 --> 00:13:17,320 Y lo quiero hacer ver, pues lo imprimo 242 00:13:17,320 --> 00:13:19,559 En pantalla y me lo escribo aquí en la consola 243 00:13:19,559 --> 00:13:20,759 ¿Si? 244 00:13:21,320 --> 00:13:21,620 Vale 245 00:13:21,620 --> 00:13:25,500 El procedimiento, hacer operaciones y cosas por estilo 246 00:13:25,500 --> 00:13:27,620 Lo hemos dicho, lo hacemos con estos 247 00:13:27,620 --> 00:13:29,879 Operadores de aquí que estaban ahí arriba 248 00:13:29,879 --> 00:13:31,120 ¿Qué nos falta? 249 00:13:34,320 --> 00:13:35,580 Estos son los operadores para 250 00:13:35,580 --> 00:13:38,320 Procesar los datos, ¿qué nos faltaría? 251 00:13:41,220 --> 00:13:42,340 Exacto, la entrada 252 00:13:42,340 --> 00:13:44,519 ¿Cómo estamos dando ahora mismo la entrada? 253 00:13:47,440 --> 00:13:48,039 Manualmente 254 00:13:48,039 --> 00:13:50,580 ¿Vale? Esto es una cosa fea 255 00:13:50,580 --> 00:13:51,960 Porque 256 00:13:51,960 --> 00:13:54,179 Requiere modificar 257 00:13:54,179 --> 00:13:55,179 El código 258 00:13:55,179 --> 00:13:57,360 Para poder cambiar 259 00:13:57,360 --> 00:13:58,299 El 260 00:13:58,299 --> 00:14:01,779 Las variables de entrada 261 00:14:01,779 --> 00:14:04,100 Y esto no es un buen programa 262 00:14:04,100 --> 00:14:09,460 Imaginaos que vosotros tenéis un programa que cada vez que tenéis que cambiar los datos iniciales 263 00:14:09,460 --> 00:14:12,960 Tenéis que volver a compilar desde cero todo el programa 264 00:14:12,960 --> 00:14:14,620 No, no funciona así 265 00:14:14,620 --> 00:14:17,940 Yo voy a un programa que al arrancarlo me diga 266 00:14:17,940 --> 00:14:19,879 Dame el lado del cuadrado 267 00:14:19,879 --> 00:14:21,740 Yo le pongo 5 268 00:14:21,740 --> 00:14:25,379 Y él me calcula el cuadrado del lado 5 269 00:14:25,379 --> 00:14:29,440 Y luego arranco el mismo programa sin haberlo compilado 270 00:14:29,440 --> 00:14:32,480 el mismo idéntico programa y me vuelve a decir 271 00:14:32,480 --> 00:14:35,419 dame el lado del cuadrado, esta vez le pongo 7 272 00:14:35,419 --> 00:14:37,519 y él me da la área del cuadrado 7 273 00:14:37,519 --> 00:14:40,879 esto es una tontería 274 00:14:40,879 --> 00:14:44,240 es algo sencillo, pero es 275 00:14:44,240 --> 00:14:46,779 muy grande 276 00:14:46,779 --> 00:14:50,340 porque estoy pasando de solucionar 277 00:14:50,340 --> 00:14:53,919 un problema a solucionar una clase 278 00:14:53,919 --> 00:14:56,740 de problemas, si yo le pongo 279 00:14:56,740 --> 00:14:57,679 aquí 280 00:14:57,679 --> 00:15:01,840 Int L es igual a 5 281 00:15:01,840 --> 00:15:10,230 Int área es igual a L por L 282 00:15:10,230 --> 00:15:13,750 Esta cosa de aquí, y la imprimo 283 00:15:13,750 --> 00:15:16,470 Esta cosa de aquí está resolviendo el problema 284 00:15:16,470 --> 00:15:19,350 Calcula la área del cuadrado del lado 5 285 00:15:19,350 --> 00:15:22,389 Ese es mi problema 286 00:15:22,389 --> 00:15:24,370 Si me han dado, calcula 287 00:15:24,370 --> 00:15:27,409 Haz un programa que calcula la área del cuadrado 288 00:15:27,409 --> 00:15:29,570 esta no es una solución 289 00:15:29,570 --> 00:15:32,649 esto es un caso específico 290 00:15:32,649 --> 00:15:35,269 vale solo para el cuadrado del lado 5 291 00:15:35,269 --> 00:15:41,509 y los informáticos no funcionan así 292 00:15:41,509 --> 00:15:43,570 no se soluciona un problema 293 00:15:43,570 --> 00:15:48,629 se soluciona la clase de problemas relacionados 294 00:15:48,629 --> 00:15:52,850 entonces necesito algo para que este numerito de aquí 295 00:15:52,850 --> 00:15:56,750 no se lo pase a tiempo de compilación 296 00:15:56,750 --> 00:15:59,330 En el código, cuando luego se compila 297 00:15:59,330 --> 00:16:01,690 Sino a tiempo de ejecución 298 00:16:01,690 --> 00:16:04,389 O sea, una vez ejecutado 299 00:16:04,389 --> 00:16:06,970 Dame el valor 300 00:16:06,970 --> 00:16:11,700 ¿Y cómo se piden datos? 301 00:16:12,700 --> 00:16:14,820 Os lo explico, luego hacemos la pausa 302 00:16:14,820 --> 00:16:18,240 Pues la entrada básica que nosotros vamos a utilizar 303 00:16:18,240 --> 00:16:19,799 Es esta, ¿vale? 304 00:16:20,379 --> 00:16:23,379 Tenemos que poner unas palabras mágicas 305 00:16:23,379 --> 00:16:25,980 Que no entenderemos hasta dentro de un rato 306 00:16:25,980 --> 00:16:28,379 Y con estas palabras mágicas 307 00:16:28,379 --> 00:16:32,200 ya podemos utilizar la lectura de teclado. 308 00:16:41,740 --> 00:16:42,519 Puede ser. 309 00:16:43,159 --> 00:16:46,940 Pero luego igualmente tienes que ir a buscar por algún lado el encoding. 310 00:16:47,480 --> 00:16:51,779 O sea, esto te sacará las clases que posiblemente estará, 311 00:16:52,100 --> 00:16:55,320 pero luego tienes que ir a buscarte por allí cómo aceptas el encoding 312 00:16:55,320 --> 00:16:57,399 cada vez que escribes o lees o cosas por el estilo. 313 00:16:57,840 --> 00:16:59,519 Entonces, por ahora no lo quiero usar. 314 00:17:00,399 --> 00:17:00,620 ¿Vale? 315 00:17:01,259 --> 00:17:06,880 Entonces, estas son dos palabras mágicas que vosotros tenéis que aprender. 316 00:17:06,880 --> 00:17:16,960 vale es arte arcana perdida nadie sabe qué quieren decir hasta al menos segundo trimestre vale y si 317 00:17:16,960 --> 00:17:22,240 queréis leer de teclado pues tenéis que escribir las por algún lado donde vamos a escribir la 318 00:17:22,240 --> 00:17:37,700 Primero esto, import java útil asterisco y se escribe aquí, antes del public class. 319 00:17:37,700 --> 00:18:02,599 ¿Sí? Aquí. Y luego, nosotros, porque somos así, en la primera línea del main escribimos que scanner.scan es igual a new scanner de system.in. 320 00:18:02,599 --> 00:18:16,849 Vamos a mirar esta línea de código y ver si entendemos algo. 321 00:18:18,490 --> 00:18:20,609 Primero, ¿qué estoy haciendo aquí? 322 00:18:23,559 --> 00:18:24,700 Declarar una variable. 323 00:18:25,420 --> 00:18:26,380 ¿Cómo se llama la variable? 324 00:18:27,440 --> 00:18:27,799 Scan. 325 00:18:28,759 --> 00:18:30,019 ¿De qué tipo es? 326 00:18:32,759 --> 00:18:33,779 De tipo scanner. 327 00:18:34,859 --> 00:18:35,180 ¿Eh? 328 00:18:36,019 --> 00:18:38,140 Pues es como cuando se hace un string. 329 00:18:38,460 --> 00:18:40,220 ¿Os acordáis de string? Es mayúscula. 330 00:18:40,980 --> 00:18:41,480 Pues es lo mismo. 331 00:18:44,130 --> 00:18:46,109 String algo... 332 00:18:46,109 --> 00:18:46,490 No, no. 333 00:18:46,710 --> 00:18:49,390 A es igual a... 334 00:18:49,390 --> 00:18:52,430 Cuando hago esto, estoy usando tipos primitivos. 335 00:18:52,430 --> 00:18:56,970 ¿Esta es una palabra reservada como int o boolean o double? 336 00:18:57,450 --> 00:18:57,730 No 337 00:18:57,730 --> 00:18:59,450 ¿Vale? 338 00:18:59,809 --> 00:19:00,869 Esta es una clase 339 00:19:00,869 --> 00:19:04,690 Este es una variable de tipo objeto 340 00:19:04,690 --> 00:19:06,549 De objeto string 341 00:19:06,549 --> 00:19:08,230 Pues estoy haciendo lo mismo 342 00:19:08,230 --> 00:19:10,569 Todavía no sé qué es un objeto 343 00:19:10,569 --> 00:19:12,009 Pero estoy haciendo lo mismo 344 00:19:12,009 --> 00:19:13,710 Estoy creando un objeto scan 345 00:19:13,710 --> 00:19:15,289 De tipo scanner 346 00:19:15,289 --> 00:19:16,509 ¿Qué es scanner? 347 00:19:16,990 --> 00:19:21,009 Es una clase que alguien ha escrito y no me interesa 348 00:19:21,009 --> 00:19:26,849 Y que está en un paquetito, en un package, que es el package java.util 349 00:19:26,849 --> 00:19:28,650 Utilidades de Java 350 00:19:28,650 --> 00:19:30,910 Que yo he importado aquí 351 00:19:30,910 --> 00:19:39,250 Yo he importado desde fuera un paquete de clases que otros han escrito 352 00:19:39,250 --> 00:19:42,109 Para utilizarlas directamente en mi programa 353 00:19:42,109 --> 00:19:46,529 Porque para leer de teclado me debería hacer un programa grande así 354 00:19:46,529 --> 00:19:48,970 Y no lo sé hacer 355 00:19:48,970 --> 00:19:53,849 Y entonces lo que hago es importar un programa que alguien ya ha hecho 356 00:19:53,849 --> 00:20:02,319 Y para utilizarlo, tengo que crear un objeto 357 00:20:02,319 --> 00:20:03,940 ¿Veis esta cosa aquí? 358 00:20:05,559 --> 00:20:07,019 ¿Lo veis que new es rojo? 359 00:20:08,240 --> 00:20:09,500 ¿Qué es rojo? 360 00:20:12,869 --> 00:20:14,109 Una palabra reservada 361 00:20:14,109 --> 00:20:17,490 Esta es la palabra reservada para crear objetos 362 00:20:17,490 --> 00:20:20,529 Que nosotros todavía no sabemos qué son, lo utilizaremos más adelante 363 00:20:20,529 --> 00:20:23,289 Pero estoy creando un nuevo objeto scanner 364 00:20:23,289 --> 00:20:26,890 que está relacionado con qué. 365 00:20:26,970 --> 00:20:27,710 ¿Qué es esto? 366 00:20:28,230 --> 00:20:29,390 ¿De qué me suena esto? 367 00:20:32,869 --> 00:20:37,390 Nosotros hemos usado System Out para la salida. 368 00:20:38,190 --> 00:20:41,670 Y fijaos, usamos System In para la entrada. 369 00:20:44,569 --> 00:20:45,150 Tiene sentido. 370 00:20:45,710 --> 00:20:48,210 Esto es una conexión al teclado. 371 00:20:49,910 --> 00:20:52,609 System In, por defecto, si no lo cambio, 372 00:20:52,609 --> 00:20:56,029 Recibe los datos desde el teclado 373 00:20:56,029 --> 00:20:57,130 ¿Vale? 374 00:20:57,369 --> 00:21:01,109 Entonces, esta cosa de aquí y esta cosa de aquí 375 00:21:01,109 --> 00:21:04,109 No hacen nada, entre comillas 376 00:21:04,109 --> 00:21:08,450 Simplemente me preparan a la posibilidad de leer de teclado 377 00:21:08,450 --> 00:21:10,609 Si no están estas dos líneas, no puedo 378 00:21:10,609 --> 00:21:13,230 Y ahora lo voy a usar 379 00:21:13,230 --> 00:21:15,650 Voy a usar esta cosa de aquí 380 00:21:15,650 --> 00:21:17,269 ¿Cómo se hace? 381 00:21:18,529 --> 00:21:21,990 Por ejemplo, si yo esto lo quiero leer de teclado 382 00:21:21,990 --> 00:21:26,430 uso scan.nextint 383 00:21:26,430 --> 00:21:30,180 esta cosa de aquí 384 00:21:30,180 --> 00:21:32,200 es 385 00:21:32,200 --> 00:21:33,900 vete al objeto scan 386 00:21:33,900 --> 00:21:35,220 que tú has creado arriba 387 00:21:35,220 --> 00:21:38,099 y usa una función 388 00:21:38,099 --> 00:21:40,420 especial de scan 389 00:21:40,420 --> 00:21:41,380 que es 390 00:21:41,380 --> 00:21:42,920 pilla el nuevo entero 391 00:21:42,920 --> 00:21:45,619 el siguiente entero 392 00:21:45,619 --> 00:21:47,859 si yo ejecuto 393 00:21:47,859 --> 00:21:48,779 a ver 394 00:21:48,779 --> 00:21:52,200 dejadme antes que veáis una cosa 395 00:21:52,200 --> 00:21:53,500 si yo ejecuto este programa 396 00:21:53,500 --> 00:21:57,329 El programa 397 00:21:57,329 --> 00:21:58,769 Espera que tiene errores 398 00:21:58,769 --> 00:22:03,359 Ah, claro, porque 399 00:22:03,359 --> 00:22:04,900 Quito esto también 400 00:22:04,900 --> 00:22:07,339 Si ejecuto el programa de antes 401 00:22:07,339 --> 00:22:10,380 Este se ejecuta 402 00:22:10,380 --> 00:22:13,059 Y al final podéis mirar 403 00:22:13,059 --> 00:22:15,079 Que este cuadradito de aquí 404 00:22:15,079 --> 00:22:16,519 Está gris 405 00:22:16,519 --> 00:22:21,160 Pero si vosotros 406 00:22:21,160 --> 00:22:22,160 Lo lanzáis 407 00:22:22,160 --> 00:22:25,000 Veréis que por un momento este cuadradito de aquí 408 00:22:25,000 --> 00:22:25,900 Se vuelve rojo 409 00:22:25,900 --> 00:22:27,880 ¿Visto? 410 00:22:28,940 --> 00:22:30,240 Otra vez, rojo 411 00:22:30,240 --> 00:22:34,779 Si este cuadradito está rojo 412 00:22:34,779 --> 00:22:37,619 Quiere decir que tu programa está funcionando 413 00:22:37,619 --> 00:22:41,480 Si este cuadradito está gris 414 00:22:41,480 --> 00:22:43,119 Quiere decir que el programa ha acabado 415 00:22:43,119 --> 00:22:45,799 Si ahora pongo 416 00:22:45,799 --> 00:22:49,359 Este comando de aquí nuevo 417 00:22:49,359 --> 00:22:50,740 Que estamos viendo ahora 418 00:22:50,740 --> 00:22:53,019 Mira que pasa 419 00:22:53,019 --> 00:22:57,450 Que al lanzarlo 420 00:22:57,450 --> 00:23:01,170 Mi cuadradito se queda rojo 421 00:23:01,170 --> 00:23:18,769 O sea, ahora mismo aquí no pone nada, pero porque mi programa ha llegado a un momento en que se ha parado y está a la espera que tú pongas algo con el teclado. 422 00:23:18,769 --> 00:23:23,140 Él cuando llega aquí 423 00:23:23,140 --> 00:23:25,339 Como tú le estás diciendo 424 00:23:25,339 --> 00:23:27,140 Lee algo de teclado 425 00:23:27,140 --> 00:23:28,880 Él se va a parar 426 00:23:28,880 --> 00:23:30,339 No ha completado todavía 427 00:23:30,339 --> 00:23:33,779 Y esperará hasta que tú pongas algo con el teclado 428 00:23:33,779 --> 00:23:34,880 Y le des al Enter 429 00:23:34,880 --> 00:23:37,039 Cuando tú pongas algo 430 00:23:37,039 --> 00:23:39,700 Seguirá adelante 431 00:23:39,700 --> 00:23:41,079 Por ejemplo 432 00:23:41,079 --> 00:23:42,819 Tres 433 00:23:42,819 --> 00:23:44,940 Y no hace nada 434 00:23:44,940 --> 00:23:45,660 ¿Por qué no hace nada? 435 00:23:48,049 --> 00:23:49,890 Porque no le he dicho de hacer nada 436 00:23:49,890 --> 00:23:51,869 Habrá hecho esta operación 437 00:23:51,869 --> 00:23:53,950 Pero no le he dicho que la escriba en pantalla 438 00:23:53,950 --> 00:23:57,230 Entonces, vamos a hacer una cosa bien hecha 439 00:23:57,230 --> 00:24:00,910 Primero, como aquí se va a parar 440 00:24:00,910 --> 00:24:03,569 Antes de que se pare 441 00:24:03,569 --> 00:24:07,730 Le voy a decir al usuario que usa mi programa 442 00:24:07,730 --> 00:24:09,150 Que tiene que hacer 443 00:24:09,150 --> 00:24:12,410 Porque si yo lanzo un programa y de repente me viene una pantalla en blanco 444 00:24:12,410 --> 00:24:14,789 Y nadie me ha dicho que hacer, ¿qué pienso? 445 00:24:16,190 --> 00:24:18,890 Pienso, se ha colgado, no está funcionando 446 00:24:18,890 --> 00:24:31,089 Entonces, antes de leer algo, siempre una escritura en pantalla donde digo, dame el lado del cuadrado 447 00:24:31,089 --> 00:24:41,329 Luego irá aquí, se parará a la espera que tú pongas el cuadro, más te lo he dicho 448 00:24:41,329 --> 00:24:45,630 Luego ejecuto lo que tengo que ejecutar 449 00:24:45,630 --> 00:25:08,720 Y finalmente, el área del cuadrado de lado más L, más S, más área. 450 00:25:12,990 --> 00:25:13,690 ¿Lo veis? 451 00:25:15,430 --> 00:25:18,990 El área del cuadrado de lado L, ¿cuánto vale L? 452 00:25:18,990 --> 00:25:25,670 Pues lo he leído de teclado. A tiempo de compilación aquí, yo no sé cuánto vale L. 453 00:25:26,650 --> 00:25:32,450 Lo sabré sólo cuando ejecutaré el programa y el usuario me habrá pasado un 3, un 5 o un 27. 454 00:25:33,750 --> 00:25:37,349 Pero sé que aquí dentro estará almacenado el lado. 455 00:25:38,509 --> 00:25:44,809 Para calcular su área, hago lo que me has dado por lo que me has dado y lo guardo dentro de área. 456 00:25:44,809 --> 00:25:50,109 y luego te diré que el cuadrado de lado, lo que me has dado tú, es lo que he calculado yo. 457 00:25:53,039 --> 00:25:59,019 Esto ya es una pizca así, más complejo de lo que hemos visto hasta ahora. 458 00:25:59,420 --> 00:25:59,619 Así. 459 00:26:01,880 --> 00:26:02,880 Vamos a ver si funciona. 460 00:26:04,839 --> 00:26:05,880 Lanzo el programa. 461 00:26:08,269 --> 00:26:09,769 Dice, dame el lado del cuadrado. 462 00:26:10,250 --> 00:26:11,150 ¿Cuánto le queréis dar? 463 00:26:11,829 --> 00:26:12,309 5. 464 00:26:14,190 --> 00:26:17,170 El gare del cuadrado del lado 5 es 25. 465 00:26:17,170 --> 00:26:23,720 Fijaos, no toco nada, no vuelvo a compilar 466 00:26:23,720 --> 00:26:26,480 Mismo programa, lo lanzo otra vez 467 00:26:26,480 --> 00:26:28,859 Dame el lado del cuadrado 468 00:26:28,859 --> 00:26:30,220 7 469 00:26:30,220 --> 00:26:33,920 El área del cuadrado del lado de 7 es 49 470 00:26:33,920 --> 00:26:40,019 He hecho un programa que no soluciona un problema 471 00:26:40,019 --> 00:26:45,259 Soluciona todos los problemas de la categoría calcular el área de un cuadrado 472 00:26:45,259 --> 00:26:49,029 ¿Dudas? 473 00:26:52,380 --> 00:26:56,140 ¿Qué pasa si yo soy malvado y le digo 474 00:26:56,140 --> 00:26:58,240 jajaja 7.5 475 00:26:58,240 --> 00:27:01,299 explota 476 00:27:01,299 --> 00:27:03,039 ¿cómo explota? 477 00:27:03,599 --> 00:27:05,579 con un input 478 00:27:05,579 --> 00:27:07,000 mismatch exception 479 00:27:07,000 --> 00:27:08,299 error de 480 00:27:08,299 --> 00:27:10,740 no 481 00:27:10,740 --> 00:27:13,740 correspondencia del input 482 00:27:13,740 --> 00:27:15,759 tú le has dicho le un entero 483 00:27:15,759 --> 00:27:17,359 y le has dado un 7.5 484 00:27:17,359 --> 00:27:19,380 pues no es un entero, explota 485 00:27:19,380 --> 00:27:21,799 ¿qué pasa 486 00:27:21,799 --> 00:27:24,140 si yo aquí le digo dame la del cuadrado 487 00:27:24,140 --> 00:27:25,160 3 488 00:27:25,160 --> 00:27:27,359 correcto ¿no? 489 00:27:27,519 --> 00:27:37,359 Explota, porque le estoy dando la palabra 3 y el string no lo sabe gestionar. 490 00:27:37,579 --> 00:27:52,500 Entonces, ¿qué podría hacer? En segundo trimestre, cuando veremos las excepciones, yo podré pillar este error, decir al usuario, oye, mira, el dato que me has dado no es válido y volver a pedirlo. 491 00:27:52,500 --> 00:27:55,680 Y entonces en vez de explotarme 492 00:27:55,680 --> 00:27:59,619 Conseguiré recuperarme del error y volver a pedir 493 00:27:59,619 --> 00:28:01,680 Pero ahora mismo no lo se hace 494 00:28:01,680 --> 00:28:02,740 Entonces exploto 495 00:28:02,740 --> 00:28:05,039 Cuando veis esta cosa de aquí 496 00:28:05,039 --> 00:28:07,160 Es que algo habéis hecho mal 497 00:28:07,160 --> 00:28:10,480 Y aquí os intenta explicarlo 498 00:28:10,480 --> 00:28:12,940 Y aquí os dice donde sale 499 00:28:12,940 --> 00:28:17,039 En particular esto ha salido dentro de Scanner 500 00:28:17,039 --> 00:28:21,079 Ha habido una parte de Scanner que ha explotado 501 00:28:21,079 --> 00:28:23,180 Pero quien ha llamado eso 502 00:28:23,180 --> 00:28:24,599 Ha sido tú 503 00:28:24,599 --> 00:28:26,740 En el método main 504 00:28:26,740 --> 00:28:28,619 En la línea 35 505 00:28:28,619 --> 00:28:30,299 Aquí 506 00:28:30,299 --> 00:28:34,670 Yo le he dicho next int 507 00:28:34,670 --> 00:28:37,970 Next int 508 00:28:37,970 --> 00:28:40,490 Lo que hace es leerme el siguiente entero 509 00:28:40,490 --> 00:28:41,509 Un número entero 510 00:28:41,509 --> 00:28:46,720 Depende de lo que te permite hacer 511 00:28:46,720 --> 00:28:48,079 Creo que hay next double 512 00:28:48,079 --> 00:28:51,059 Creo que hay next secas para palabras 513 00:28:51,059 --> 00:28:53,980 Y por ahora son los que usamos nosotros 514 00:28:53,980 --> 00:28:55,160 ¿Vale? 515 00:28:55,160 --> 00:28:56,940 Que serán aquí 516 00:28:56,940 --> 00:28:57,859 ¿Vale? 517 00:28:59,039 --> 00:29:01,640 Cadena igual a scan.next 518 00:29:01,640 --> 00:29:02,599 Lee una palabra 519 00:29:02,599 --> 00:29:05,259 Scan.nextint 520 00:29:05,259 --> 00:29:06,539 Lee un número entero 521 00:29:06,539 --> 00:29:09,380 Scan.nextdouble 522 00:29:09,380 --> 00:29:10,140 Lee un double 523 00:29:10,140 --> 00:29:14,000 Y por ahora estos tres son los tres que queremos usar 524 00:29:14,000 --> 00:29:15,440 Nosotros podemos leer 525 00:29:15,440 --> 00:29:18,539 Una palabra, double o enteros 526 00:29:18,539 --> 00:29:20,480 ¿Si? 527 00:29:21,180 --> 00:29:24,339 Cuidado no utilizar espacios en los datos tecleados 528 00:29:24,339 --> 00:29:25,119 Porque explota 529 00:29:25,119 --> 00:29:29,299 Esto lee una palabra, no una frase. 530 00:29:33,819 --> 00:29:34,180 ¿Dudas?