1 00:00:02,740 --> 00:00:13,119 El otro día entonces finalizamos la clase, os quedasteis haciendo este primer ejemplito, ¿vale? Este primer ejemplito de programa en Java. 2 00:00:14,019 --> 00:00:24,000 Bueno, pues ahora mismo, ahora mismo, situación en la cual las cosas no tienen por qué salirnos de corrido, ¿no? 3 00:00:24,000 --> 00:00:32,799 Porque estamos todavía, pues aprendiendo a organizar nuestra cabeza y a ordenar nuestro pensamiento, ¿vale? 4 00:00:32,799 --> 00:00:54,770 Si ordenamos nuestro pensamiento, nuestro programa nos quedará ordenado y finito, que así tiene que ser un programa, ¿verdad? Profe, dime. 3.250.920. O sea, hay millones de maneras. No sé, no entiendo la pregunta. 5 00:00:54,770 --> 00:01:03,570 Yo dije, hay tres formas de hacerlo 6 00:01:03,570 --> 00:01:04,829 Yo no dije, hay tres formas de hacerlo 7 00:01:04,829 --> 00:01:06,829 No dije eso, lo que diría 8 00:01:06,829 --> 00:01:09,030 Por ahí que está diciendo, le dije 9 00:01:09,030 --> 00:01:10,950 Hombre, a ver, lo puedes hacer de esta otra manera 10 00:01:10,950 --> 00:01:13,430 Pero como alternativa a la que estaba él usando 11 00:01:13,430 --> 00:01:14,829 Eso mismo lo podía hacer de otra manera 12 00:01:14,829 --> 00:01:17,329 Pero una misma cosa en programación 13 00:01:17,329 --> 00:01:19,489 Se podía hacer de miles de cosas distintas 14 00:01:19,489 --> 00:01:20,450 ¿Vale? 15 00:01:20,909 --> 00:01:23,390 No es que esto no es matemático, hay una solución 16 00:01:23,390 --> 00:01:25,189 Aquí, en informática 17 00:01:25,189 --> 00:01:27,209 En el desarrollo, ya lo hemos dicho 18 00:01:27,209 --> 00:01:32,010 otras veces no hay una forma buena de hacer las cosas, una misma aplicación se puede 19 00:01:32,010 --> 00:01:36,609 plantear con mil diseños distintos, mil formas diferentes, lo que pasa es que si seguimos 20 00:01:36,609 --> 00:01:42,590 unas prácticas de programación más o menos estandarizadas, pues nuestros programas serán 21 00:01:42,590 --> 00:01:45,969 más eficientes, más legibles, que es lo que perseguimos cuando programamos. 22 00:01:46,989 --> 00:01:55,829 Bueno, pues entonces, más o menos esquema de pensamiento que uno podría haber utilizado 23 00:01:55,829 --> 00:02:07,810 para plantear esto? A ver, primero uno tiene que tener muy claro, fase de análisis, fase de análisis es, ¿qué tiene que hacer el programa? 24 00:02:08,090 --> 00:02:16,069 ¿Cuál tiene que ser su resultado? ¿Qué tiene que hacer? Entonces de este enunciado automáticamente extraemos, a ver, lo que este programa va a hacer 25 00:02:16,069 --> 00:02:25,169 va a ser mostrar un número, pero eso me tiene que quedar claro, el resultado final del programa, lo que tiene que hacer, lo que el usuario va a ver 26 00:02:25,169 --> 00:02:28,229 Y lo que nos interesa es que el programa muestre un número 27 00:02:28,229 --> 00:02:30,310 Eso es lo primero que tenemos que tener claro en la cabeza 28 00:02:30,310 --> 00:02:31,750 Entonces nuestro programa 29 00:02:31,750 --> 00:02:34,069 En algún momento tendrá que terminar 30 00:02:34,069 --> 00:02:35,830 Con algo así 31 00:02:35,830 --> 00:02:39,629 Mostrando ahí un número 32 00:02:39,629 --> 00:02:40,629 Y para mostrar un número 33 00:02:40,629 --> 00:02:44,330 Lo que tenemos que mostrar es una variable que guarde ese número 34 00:02:44,330 --> 00:02:46,110 Hasta ahí está claro 35 00:02:46,110 --> 00:02:47,629 Si queremos mostrar un número 36 00:02:47,629 --> 00:02:49,650 Porque ese es el resultado final del programa 37 00:02:49,650 --> 00:02:51,090 Ahí es hasta donde tenemos que llegar 38 00:02:51,090 --> 00:02:53,889 Tenemos que llegar a que el programa me muestre un número 39 00:02:53,889 --> 00:03:03,870 Porque después de haberle enunciado varias veces, después de leerlo, ya me doy cuenta de que su objetivo final es hacer esto, es mostrar un número. 40 00:03:04,490 --> 00:03:06,650 Vale, a partir de ahí uno ya va empezando a tirar. 41 00:03:07,210 --> 00:03:10,090 Bueno, mostrar un número significa, ¿qué número? 42 00:03:11,030 --> 00:03:14,629 Depende, depende de los datos de entrada, por supuesto. 43 00:03:15,229 --> 00:03:21,069 Entonces, como el número que yo vaya a mostrar depende de los datos de entrada, el objetivo no es, muéstrame el número 7. 44 00:03:21,069 --> 00:03:23,409 Si en la aplicación fuera 45 00:03:23,409 --> 00:03:24,530 Muéstrame el número 7 46 00:03:24,530 --> 00:03:26,750 Pues ala, obviamente estaría muy fácil 47 00:03:26,750 --> 00:03:28,110 Ya está, ya te he mostrado el número 7 48 00:03:28,110 --> 00:03:30,349 Pero es que este programa no me dice 49 00:03:30,349 --> 00:03:31,389 Muéstrame el número 7 50 00:03:31,389 --> 00:03:33,030 Me dice muéstrame un número 51 00:03:33,030 --> 00:03:35,210 Y claro, ese número 52 00:03:35,210 --> 00:03:36,550 Leyendo el resto de enunciado 53 00:03:36,550 --> 00:03:38,590 Vemos que ese número es variable 54 00:03:38,590 --> 00:03:39,889 O sea, dependerá de los datos 55 00:03:39,889 --> 00:03:41,930 A veces será uno, a veces será otro 56 00:03:41,930 --> 00:03:43,189 Dependerá de los datos de entrada 57 00:03:43,189 --> 00:03:45,889 Entonces este System.out.println 58 00:03:45,889 --> 00:03:47,490 Me tendrá que mostrar 59 00:03:47,490 --> 00:03:49,270 El contenido de una variable 60 00:03:49,270 --> 00:03:51,669 me tendrá que mostrar el contenido 61 00:03:51,669 --> 00:03:53,409 de una variable, vale 62 00:03:53,409 --> 00:03:54,689 luego este es el punto final 63 00:03:54,689 --> 00:03:56,469 vale 64 00:03:56,469 --> 00:03:58,729 entonces 65 00:03:58,729 --> 00:04:01,050 cuando penséis un programa 66 00:04:01,050 --> 00:04:03,349 antes de empezar a programar 67 00:04:03,349 --> 00:04:05,550 hay que leerlo entero 68 00:04:05,550 --> 00:04:06,530 y ya 69 00:04:06,530 --> 00:04:09,590 verlo en su conjunto antes de empezar 70 00:04:09,590 --> 00:04:11,509 a escribir, no vale que uno 71 00:04:11,509 --> 00:04:13,509 haga, programa que solicite y lea 72 00:04:13,509 --> 00:04:15,669 dos números y no se que, y ya automáticamente se puede programar 73 00:04:15,669 --> 00:04:17,569 vale, solicito y leo dos números, ahora que tengo 74 00:04:17,569 --> 00:04:19,269 que hacer, y luego haga no sé qué 75 00:04:19,269 --> 00:04:21,029 ah vale, ahora hago no sé qué, no 76 00:04:21,029 --> 00:04:23,410 porque para saber ese no sé qué, tengo que tener entendido 77 00:04:23,410 --> 00:04:25,750 todo lo siguiente, entonces primero 78 00:04:25,750 --> 00:04:27,370 varias, este 79 00:04:27,370 --> 00:04:29,449 enunciado es muy sencillo, claro, pero bueno 80 00:04:29,449 --> 00:04:31,389 hay enunciados, habrá enunciados 81 00:04:31,389 --> 00:04:33,649 lógicamente, más largos 82 00:04:33,649 --> 00:04:35,209 y las aplicaciones ya en general 83 00:04:35,209 --> 00:04:36,930 tienen enunciados muy largos 84 00:04:36,930 --> 00:04:39,250 entonces, primer paso imprescindible 85 00:04:39,250 --> 00:04:41,629 que lo leamos entero una y otra vez 86 00:04:41,629 --> 00:04:43,490 hasta que entendamos el conjunto 87 00:04:43,490 --> 00:04:44,629 de su funcionamiento 88 00:04:44,629 --> 00:04:47,730 y yo no me pongo a escribir ni una sola línea de código 89 00:04:47,730 --> 00:04:49,970 hasta que no he entendido el conjunto del funcionamiento 90 00:04:49,970 --> 00:04:51,509 y que va a ocurrir 91 00:04:51,509 --> 00:04:53,189 que cuando yo escriba esas líneas de código 92 00:04:53,189 --> 00:04:55,430 casi seguro que las escribo del final para atrás 93 00:04:55,430 --> 00:04:57,230 y las voy escribiendo 94 00:04:57,230 --> 00:04:58,910 como veremos cuando veamos estructuras 95 00:04:58,910 --> 00:05:01,709 pues primero hago un esqueleto con cajas negras 96 00:05:01,709 --> 00:05:03,250 y luego voy rellenando las cajas negras 97 00:05:03,250 --> 00:05:05,389 así es como iremos escribiendo el código 98 00:05:05,389 --> 00:05:06,889 porque así es como vamos pensando 99 00:05:06,889 --> 00:05:09,029 ¿vale? vamos pensando 100 00:05:09,029 --> 00:05:11,910 de lo general a lo concreto 101 00:05:11,910 --> 00:05:13,009 ¿vale? uno piensa 102 00:05:13,009 --> 00:05:14,430 yo me voy a Francia, muy bien 103 00:05:14,430 --> 00:05:16,310 Ese es el pensamiento general, me voy a Francia 104 00:05:16,310 --> 00:05:18,529 Ahora ya empiezo a detallarlo 105 00:05:18,529 --> 00:05:21,089 Vale, compro el billete de avión 106 00:05:21,089 --> 00:05:23,269 Voy al aeropuerto, me monto el avión y aterrizo 107 00:05:23,269 --> 00:05:24,290 Vale, pues ya 108 00:05:24,290 --> 00:05:26,610 Esa caja negra ya la he detallado un poquito más 109 00:05:26,610 --> 00:05:29,069 Ahora tiene tres cajas negras, compro el billete de avión 110 00:05:29,069 --> 00:05:30,329 Me toca detallarla, ah vale 111 00:05:30,329 --> 00:05:32,589 Busco en páginas 112 00:05:32,589 --> 00:05:34,829 De agencias de viajes, etc 113 00:05:34,829 --> 00:05:37,069 Pues ese pensamiento de lo general 114 00:05:37,069 --> 00:05:38,730 A lo concreto 115 00:05:38,730 --> 00:05:41,050 Refinando, es el mismo pensamiento 116 00:05:41,050 --> 00:05:42,750 Que tenemos que llevar cuando programamos 117 00:05:42,750 --> 00:05:47,629 y para llevar ese pensamiento tenemos que tener entendido muy bien el funcionamiento general de la aplicación 118 00:05:47,629 --> 00:05:53,550 antes de empezar a programar nada, no sé que el resultado final de un programa 119 00:05:53,550 --> 00:06:01,569 sea una secuencia de sentencias ordenada, no significa que nuestro pensamiento vaya en secuencia ordenado 120 00:06:01,569 --> 00:06:07,649 no va a ir nunca así, no puede ir así, nuestro pensamiento tiene que ir en iteraciones que van refinando 121 00:06:07,649 --> 00:06:09,589 de forma progresiva 122 00:06:09,589 --> 00:06:11,910 vale, yo me planteo el programa 123 00:06:11,910 --> 00:06:13,910 general, y para eso he leído 124 00:06:13,910 --> 00:06:15,850 muy bien enunciado, vale, tengo que 125 00:06:15,850 --> 00:06:17,949 hacer esto, ahora voy separando en partes 126 00:06:17,949 --> 00:06:19,769 en tareas, esas partes ahora 127 00:06:19,769 --> 00:06:21,529 se quedan todavía sin refinar 128 00:06:21,529 --> 00:06:23,810 ahora ya me voy metiendo en cada una de ellas 129 00:06:23,810 --> 00:06:25,730 las voy refinando, así hasta que construyo 130 00:06:25,730 --> 00:06:26,910 un primer boceto del programa 131 00:06:26,910 --> 00:06:28,829 y cuando tengo ese primer boceto 132 00:06:28,829 --> 00:06:31,569 lo miro a ver más o menos si vale 133 00:06:31,569 --> 00:06:34,129 tiene sentido o no, y empiezo a hacer las pruebas 134 00:06:34,129 --> 00:06:35,709 vale, pero así es como 135 00:06:35,709 --> 00:06:37,829 pensamos, bueno pues entonces 136 00:06:37,829 --> 00:06:40,370 después de analizar 137 00:06:40,370 --> 00:06:42,209 todo esto, hemos llegado a la conclusión 138 00:06:42,209 --> 00:06:43,810 de que el destino final de mi código 139 00:06:43,810 --> 00:06:46,110 es hacer esto, mostrar un número 140 00:06:46,110 --> 00:06:47,850 y mostrar un número que es variable 141 00:06:47,850 --> 00:06:49,209 que depende de los datos de entrada 142 00:06:49,209 --> 00:06:51,750 luego mi sistema de println tendría que estar mostrando 143 00:06:51,750 --> 00:06:53,949 una variable, no hay tutía, porque la variable 144 00:06:53,949 --> 00:06:55,990 es la estructura de programación 145 00:06:55,990 --> 00:06:57,870 que me permite guardar cosas 146 00:06:57,870 --> 00:06:59,829 variables, como su nombre indica 147 00:06:59,829 --> 00:07:02,069 vale, pues entonces yo tendré que tener 148 00:07:02,069 --> 00:07:04,329 de alguna manera una variable 149 00:07:04,329 --> 00:07:07,050 para guardar ese resultado final 150 00:07:07,050 --> 00:07:09,009 una variable para guardarla, ¿no? 151 00:07:09,589 --> 00:07:11,670 entonces, ese es el objetivo final de mi programa 152 00:07:11,670 --> 00:07:12,709 mostrar un resultado 153 00:07:12,709 --> 00:07:14,629 vale, hasta ahí está claro 154 00:07:14,629 --> 00:07:17,230 ahora ya tengo que empezar a meterme en esta caja negra de aquí 155 00:07:17,230 --> 00:07:19,689 que es, vale, ¿y cómo hago yo 156 00:07:19,689 --> 00:07:20,750 para darle valor a n? 157 00:07:21,149 --> 00:07:22,470 ¿cómo hago yo para darle valor a n? 158 00:07:23,790 --> 00:07:25,910 vale, porque ese es el problema 159 00:07:25,910 --> 00:07:27,810 ahora, el problema ahora es este 160 00:07:27,810 --> 00:07:29,990 es decir, a ver, si voy a mostrar 161 00:07:29,990 --> 00:07:31,069 el contenido de mi 162 00:07:31,069 --> 00:07:32,910 para empezar a 163 00:07:32,910 --> 00:07:35,670 Bueno, a dar nombres de variables con un poco más de sentido 164 00:07:35,670 --> 00:07:37,949 En lugar del n famoso, vamos a llamarlo resultado 165 00:07:37,949 --> 00:07:41,449 ¿Vale? Mucho más bonito 166 00:07:41,449 --> 00:07:42,610 Vamos a llamarlo resultado 167 00:07:42,610 --> 00:07:47,560 Bueno, pues ese es el objetivo, ¿no? 168 00:07:47,779 --> 00:07:48,860 Mostrar el resultado 169 00:07:48,860 --> 00:07:52,480 Entonces, para mostrar el resultado voy a necesitar 170 00:07:52,480 --> 00:07:54,680 Hacer una asignación 171 00:07:54,680 --> 00:07:55,660 Obviamente 172 00:07:55,660 --> 00:07:57,279 Si no hago una asignación 173 00:07:57,279 --> 00:07:59,199 No puedo mostrar 174 00:07:59,199 --> 00:08:02,579 Entonces, este es el meollo del asunto 175 00:08:02,579 --> 00:08:06,600 ¿cómo saco yo el valor que tengo que mostrar? 176 00:08:06,939 --> 00:08:07,959 ¿qué es lo que me pide el programa? 177 00:08:08,079 --> 00:08:08,720 pues traigo un valor 178 00:08:08,720 --> 00:08:12,019 vale, pues ahora sigo refinando y sigo analizando el enunciado 179 00:08:12,019 --> 00:08:15,300 me dice, anda pues tendrás que pedir dos valores 180 00:08:15,300 --> 00:08:20,519 y asignar a resultado el que sea mayor de los dos 181 00:08:20,519 --> 00:08:23,480 entonces ahora ya el programa empieza a cobrar más sentido 182 00:08:23,480 --> 00:08:25,819 porque ya tenemos una primera estructura 183 00:08:25,819 --> 00:08:27,199 tenemos una primera estructura 184 00:08:27,199 --> 00:08:30,519 sabemos que tenemos que mostrar una variable 185 00:08:30,519 --> 00:08:47,700 Y a esta variable habrá que darle un valor. Y este es lo complicado. ¿Y qué valor le doy? Pues es cuando vienen las siguientes lecturas que nos permiten ir acotando. Las siguientes lecturas nos dicen, oye, lee dos números y dale el mayor de los dos. 186 00:08:47,700 --> 00:09:04,580 Vale, ya lo tengo un poco más claro, voy a leer los dos números, ahora ya sí me pongo a escribir los dos números y ahora ya pienso qué tipo de asignación hago para asignar a este el mayor de los dos, porque eso es lo que tengo que hacer y ya está, y programa finiquitado, ¿vale? 187 00:09:04,580 --> 00:09:09,399 Pero insisto, no se lee y se va haciendo lo que el enunciado te dice 188 00:09:09,399 --> 00:09:10,980 Eso nunca, no tiene ningún sentido 189 00:09:10,980 --> 00:09:15,740 Se lee todo en conjunto, se entiende, se piensa, se analiza 190 00:09:15,740 --> 00:09:21,340 Y luego ya se va programando, no de arriba a abajo 191 00:09:21,340 --> 00:09:23,279 Se va programando de abajo a arriba 192 00:09:23,279 --> 00:09:28,320 De cajas según vaya yo dando las sucesivas iteraciones 193 00:09:28,320 --> 00:09:30,320 Que me van conduciendo al resultado final 194 00:09:30,320 --> 00:09:35,259 Bueno, pues entonces, ahora ya leer los datos 195 00:09:35,259 --> 00:09:38,320 Ya tengo que hacer y sé cómo hacerlo 196 00:09:38,320 --> 00:09:43,299 Porque hemos aprendido ya a leer números enteros del teclado 197 00:09:43,299 --> 00:09:48,559 Bueno, pues como hemos aprendido a leer números enteros del teclado 198 00:09:48,559 --> 00:09:50,080 Eso lo podemos hacer ya sin pensar 199 00:09:50,080 --> 00:09:51,879 Ahora ya es la parte en la cual 200 00:09:51,879 --> 00:09:54,519 Aquí uno no tiene que perder ni medio segundo 201 00:09:54,519 --> 00:09:58,120 Porque ya él memorizó en su cabeza 202 00:09:58,120 --> 00:10:00,480 que leer del teclado es tan fácil 203 00:10:00,480 --> 00:10:02,840 como crear una variable de tipo objeto 204 00:10:02,840 --> 00:10:04,200 y usar las 205 00:10:04,200 --> 00:10:06,840 sentencias que os dije, entonces como ya está en la cabeza 206 00:10:06,840 --> 00:10:08,899 ahí el segundo 207 00:10:08,899 --> 00:10:10,759 que se pierde es cero 208 00:10:10,759 --> 00:10:11,700 no se pierde tiempo 209 00:10:11,700 --> 00:10:16,179 si uno no almacena 210 00:10:16,179 --> 00:10:18,139 las cosas en la cabeza, entonces ni siquiera 211 00:10:18,139 --> 00:10:20,080 sabe de que recursos dispone, no los 212 00:10:20,080 --> 00:10:21,759 tiene a mano para sacarlos de ahí 213 00:10:21,759 --> 00:10:23,820 entonces si no los tiene a mano para sacarlos de ahí 214 00:10:23,820 --> 00:10:25,860 es que construir el programa va a ser una locura 215 00:10:25,860 --> 00:10:28,080 ¿vale? porque uno tiene que decidir 216 00:10:28,080 --> 00:10:30,019 qué ladrillos usar, y para decidir 217 00:10:30,019 --> 00:10:32,100 qué ladrillos usar, toda esa caja de ladrillos 218 00:10:32,100 --> 00:10:34,019 tiene que estar aquí, y luego ya nos ponemos 219 00:10:34,019 --> 00:10:35,980 a ordenarla, esa caja de ladrillos no puede 220 00:10:35,980 --> 00:10:37,500 estar en Google, en Internet, ni en nada 221 00:10:37,500 --> 00:10:39,779 bueno, pues como me han dicho, leer por teclado 222 00:10:39,779 --> 00:10:41,580 así yo sé perfectamente cómo es por teclado 223 00:10:41,580 --> 00:10:43,659 pues venga, leer por teclado 224 00:10:43,659 --> 00:10:46,580 entonces, declarábamos 225 00:10:46,580 --> 00:10:48,059 una variable que yo llamé 226 00:10:48,059 --> 00:10:49,840 objeto, aún sin entender lo que significa 227 00:10:49,840 --> 00:10:52,059 la variable objeto, y os dije, os lo tenéis que creer 228 00:10:52,059 --> 00:10:53,879 ahora, no hay más remedio, pues nada 229 00:10:53,879 --> 00:10:55,879 lo creéis, y esto lo hacíamos 230 00:10:55,879 --> 00:10:56,720 de esta manera 231 00:10:56,720 --> 00:11:29,090 lo hacíamos así, eso implicaba que teníamos que poner esta línea aquí y ahora ya leer dos números enteros con esta variable que me permite leerlo, vale, si yo voy a leer dos números enteros, necesito dos espacios en memoria para guardarlos, lógicamente, bueno, pues entonces ya me viene la siguiente vuelta para arriba, 232 00:11:29,090 --> 00:11:32,230 Venga, pues voy a declarar dos variables enteras más 233 00:11:32,230 --> 00:11:34,129 Para guardar esos dos numeritos 234 00:11:34,129 --> 00:11:36,230 Dato uno 235 00:11:36,230 --> 00:11:38,330 Dato dos 236 00:11:38,330 --> 00:11:39,909 Ala 237 00:11:39,909 --> 00:11:42,389 Vale, ahora ya tengo 238 00:11:42,389 --> 00:11:44,129 Estas dos cajitas para los dos números 239 00:11:44,129 --> 00:11:45,669 Que voy a leer, ahora ya los leo 240 00:11:45,669 --> 00:11:47,610 Porque ya sé perfectamente que lo tengo en la memoria 241 00:11:47,610 --> 00:11:49,690 Como sobre un lato, entonces todo eso tiene que estar 242 00:11:49,690 --> 00:11:51,289 Nadie puede hacer una pregunta 243 00:11:51,289 --> 00:11:53,710 Porque ha puesto mal esta sentencia 244 00:11:53,710 --> 00:11:55,210 Y le da error y porque nadie 245 00:11:55,210 --> 00:11:57,230 Debería hacer una pregunta de esas, porque ya 246 00:11:57,230 --> 00:11:59,590 tiene todo el mundo que saber como se lee 247 00:11:59,590 --> 00:12:00,889 del teclado con escáner 248 00:12:00,889 --> 00:12:02,750 bueno 249 00:12:02,750 --> 00:12:04,970 y lo hacíamos así ¿verdad? 250 00:12:05,690 --> 00:12:07,710 poníamos aquí la variable con el nombre 251 00:12:07,710 --> 00:12:09,870 que nos hubiera dado la gana ponerle 252 00:12:09,870 --> 00:12:11,970 y poníamos 253 00:12:11,970 --> 00:12:12,610 esta llamada 254 00:12:12,610 --> 00:12:15,690 y ya sabíamos que esto lo que 255 00:12:15,690 --> 00:12:17,549 hacía era quedarse esperando un 256 00:12:17,549 --> 00:12:19,549 dato y mandarlo a la variable que le 257 00:12:19,549 --> 00:12:21,649 dijéramos, para que el programa no fuera 258 00:12:21,649 --> 00:12:23,470 tan desagradable 259 00:12:23,470 --> 00:12:25,549 para el usuario y diera información 260 00:12:25,549 --> 00:12:28,029 pues solíamos poner un mensajito 261 00:12:28,029 --> 00:12:30,470 donde le decíamos introduzca 262 00:12:30,470 --> 00:12:35,820 el primer número 263 00:12:35,820 --> 00:12:38,840 no pongo tildes a propósito 264 00:12:38,840 --> 00:12:40,519 porque no en la consola 265 00:12:40,519 --> 00:12:42,960 la codificación que tiene me las pone feas 266 00:12:42,960 --> 00:12:44,480 vale 267 00:12:44,480 --> 00:12:46,980 ahora introduzca el segundo número 268 00:12:46,980 --> 00:13:04,330 vale pues ya tenemos esta parte 269 00:13:04,330 --> 00:13:05,490 que es la más fácil 270 00:13:05,490 --> 00:13:06,470 leer por teclado 271 00:13:06,470 --> 00:13:08,110 como ya nos sabemos de memoria 272 00:13:08,110 --> 00:13:09,370 como leer por teclado 273 00:13:09,370 --> 00:13:10,450 esta parte ya la tenemos 274 00:13:10,450 --> 00:13:13,330 y ahora nos queda este agujero negro de aquí 275 00:13:13,330 --> 00:13:15,690 nos queda este agujero negro 276 00:13:15,690 --> 00:13:18,190 que este agujero negro es 277 00:13:18,190 --> 00:13:18,590 a ver 278 00:13:18,590 --> 00:13:20,789 lo que yo tengo que mostrar 279 00:13:20,789 --> 00:13:23,250 porque mi objetivo final en este código 280 00:13:23,250 --> 00:13:25,470 es esto, es mostrar esto 281 00:13:25,470 --> 00:13:27,070 lo que yo tengo que mostrar 282 00:13:27,070 --> 00:13:28,950 tiene que recibir un valor 283 00:13:28,950 --> 00:13:31,149 que depende 284 00:13:31,149 --> 00:13:33,669 el valor que reciba de si este 285 00:13:33,669 --> 00:13:34,549 es mayor que este 286 00:13:34,549 --> 00:13:36,710 o de si este es mayor que este 287 00:13:36,710 --> 00:13:39,549 luego automáticamente como yo ya me lo he estudiado todo 288 00:13:39,549 --> 00:13:41,309 y lo tengo en la cabeza y sé que existe 289 00:13:41,309 --> 00:13:42,710 una asignación condicionada 290 00:13:42,710 --> 00:13:45,429 pues me doy cuenta de que lo que me estoy 291 00:13:45,429 --> 00:13:47,289 diciendo es exactamente 292 00:13:47,289 --> 00:13:49,789 la definición de asignación condicionada 293 00:13:49,789 --> 00:13:51,509 que hemos estudiado y que tenéis ahí 294 00:13:51,509 --> 00:13:51,970 grabada 295 00:13:51,970 --> 00:13:55,629 la definición de asignación condicionada 296 00:13:55,629 --> 00:13:57,389 es una asignación 297 00:13:57,389 --> 00:13:59,169 en la cual tú puedes dar 298 00:13:59,169 --> 00:14:00,389 dos valores 299 00:14:00,389 --> 00:14:03,429 o uno 300 00:14:03,429 --> 00:14:06,090 u otro 301 00:14:06,090 --> 00:14:08,289 y esos dos valores 302 00:14:08,289 --> 00:14:14,710 y tú darás uno u otro en función de una condición que pongas ahí. 303 00:14:15,269 --> 00:14:17,309 Entonces eso ya lo sabemos, de nuevo está en nuestra memoria. 304 00:14:18,009 --> 00:14:21,889 Entonces justo el problema que se nos plantea con esta asignación 305 00:14:21,889 --> 00:14:26,169 automáticamente conectamos y nos damos cuenta de que nos lo resuelve esa asignación. 306 00:14:26,649 --> 00:14:30,370 Si eso no está en la memoria nuestra, sino que está en Google, 307 00:14:30,830 --> 00:14:34,789 pues aquí nos hemos plantado y estamos 3 horas, 4 horas tratando de resolver el ejercicio. 308 00:14:34,789 --> 00:14:37,090 pero si está nuestra cabeza grabado 309 00:14:37,090 --> 00:14:38,970 automáticamente hacemos la conexión y decimos, claro 310 00:14:38,970 --> 00:14:40,690 si yo al resultado 311 00:14:40,690 --> 00:14:43,450 le tengo que asignar dato 1 o dato 2 312 00:14:43,450 --> 00:14:44,570 es decir, uno de los dos 313 00:14:44,570 --> 00:14:47,549 en función de si dato 1 es mayor que dato 2 314 00:14:47,549 --> 00:14:49,429 o no, pues justo 315 00:14:49,429 --> 00:14:51,669 me estoy diciendo la definición de asignación 316 00:14:51,669 --> 00:14:53,529 condicionada, justo me estoy diciendo eso 317 00:14:53,529 --> 00:14:55,549 pues ya está, tiro de ese recurso 318 00:14:55,549 --> 00:14:56,590 y lo pongo 319 00:14:56,590 --> 00:14:59,649 ¿vale? bueno, pues lo vamos a cascar tal cual 320 00:14:59,649 --> 00:15:01,730 el recurso era, a esta variable 321 00:15:01,730 --> 00:15:03,629 resultado, o le doy dato 1 322 00:15:03,629 --> 00:15:05,830 o le doy dato 2 323 00:15:05,830 --> 00:15:11,149 y en función 324 00:15:11,149 --> 00:15:12,909 de qué condición 325 00:15:12,909 --> 00:15:15,509 le doy o dato 1 o dato 2 326 00:15:15,509 --> 00:15:17,210 pues en función de si dato 1 327 00:15:17,210 --> 00:15:19,210 es mayor que dato 2 o no 328 00:15:19,210 --> 00:15:20,730 o sea, las condiciones 329 00:15:20,730 --> 00:15:23,169 o se cumplen o no se cumplen 330 00:15:23,169 --> 00:15:24,889 ¿vale? 331 00:15:25,289 --> 00:15:26,590 entonces, esa condición 332 00:15:26,590 --> 00:15:28,389 dato 1 ser mayor que dato 2 333 00:15:28,389 --> 00:15:30,970 es una condición sencilla 334 00:15:30,970 --> 00:15:32,669 que sabemos expresar 335 00:15:32,669 --> 00:15:34,409 porque el mayor que, menor que 336 00:15:34,409 --> 00:15:36,509 esos dos solamente 337 00:15:36,509 --> 00:15:38,850 luego hay muchos más operadores relacionales que ya veremos 338 00:15:38,850 --> 00:15:40,590 pero el mayor que y el menor que 339 00:15:40,590 --> 00:15:42,370 los podemos usar desde ya 340 00:15:42,370 --> 00:15:44,490 porque son operadores con los que estamos familiarizados 341 00:15:44,490 --> 00:15:45,490 que hemos usado toda la vida 342 00:15:45,490 --> 00:15:47,090 entonces 343 00:15:47,090 --> 00:15:50,210 si dato 1 344 00:15:50,210 --> 00:15:52,809 es mayor que dato 2 345 00:15:52,809 --> 00:15:55,009 esta es la condición que yo quiero expresar 346 00:15:55,009 --> 00:15:56,730 ¿vale? y entonces este operador 347 00:15:56,730 --> 00:15:58,590 el mayor que y el menor que 348 00:15:58,590 --> 00:15:59,710 un operador relacional 349 00:15:59,710 --> 00:16:02,289 lo podemos usar siempre 350 00:16:02,289 --> 00:16:04,149 con variables numéricas, está claro 351 00:16:04,149 --> 00:16:05,850 porque los números tienen un orden natural 352 00:16:05,850 --> 00:16:08,190 y Java si orden natural lo respeta 353 00:16:08,190 --> 00:16:09,789 ¿vale? entonces 354 00:16:09,789 --> 00:16:11,889 que nos quede ya desde ya 355 00:16:11,889 --> 00:16:13,029 está 356 00:16:13,029 --> 00:16:14,789 este conocimiento 357 00:16:14,789 --> 00:16:18,429 el conocimiento de que las variables numéricas 358 00:16:18,429 --> 00:16:19,549 sean float 359 00:16:19,549 --> 00:16:22,029 sean enteras, sean decimales 360 00:16:22,029 --> 00:16:24,149 sean enteras, las podemos comparar 361 00:16:24,149 --> 00:16:25,929 con el operador relacional mayor que y menor que 362 00:16:25,929 --> 00:16:27,110 que nos quede desde ya 363 00:16:27,110 --> 00:16:29,490 hay más operadores 364 00:16:29,490 --> 00:16:31,389 relacionales pero 365 00:16:31,389 --> 00:16:33,750 ya cuando nos centremos ya en 366 00:16:33,750 --> 00:16:36,169 ver todos los operadores que tenemos, ya lo veremos 367 00:16:36,169 --> 00:16:37,929 bueno, pues ya está, ya he terminado 368 00:16:37,929 --> 00:16:39,409 ya he terminado el programa 369 00:16:39,409 --> 00:16:42,049 y como veis, no he programado en línea 370 00:16:42,049 --> 00:16:43,230 no, en línea no 371 00:16:43,230 --> 00:16:45,629 he ido saltando de arriba a abajo 372 00:16:45,629 --> 00:16:47,929 ¿vale? según me he ido aproximando 373 00:16:47,929 --> 00:16:49,690 a la solución, ¿vale? 374 00:16:49,730 --> 00:16:52,230 luego, primera conclusión, así es como tenéis que programar 375 00:16:52,230 --> 00:16:54,289 entendiendo 376 00:16:54,289 --> 00:16:55,230 todo en 377 00:16:55,230 --> 00:16:58,210 en conjunto el funcionamiento 378 00:16:58,210 --> 00:17:00,350 lo que pide el ejercicio 379 00:17:00,350 --> 00:17:01,830 para lo cual 380 00:17:01,830 --> 00:17:04,369 se lee una, dos, tres veces 381 00:17:04,369 --> 00:17:05,349 las veces que haga falta 382 00:17:05,349 --> 00:17:08,549 y si después de leerlo tres, cuatro, cinco veces 383 00:17:08,549 --> 00:17:09,410 las veces que haga falta 384 00:17:09,410 --> 00:17:12,150 sigue sin estar claro lo que pide 385 00:17:12,150 --> 00:17:14,349 pues puede ocurrir que el enunciado 386 00:17:14,349 --> 00:17:16,509 esté un poco afortunado 387 00:17:16,509 --> 00:17:17,529 esté mal escrito 388 00:17:17,529 --> 00:17:20,589 pues en ese caso habrá que pedirle cuentas 389 00:17:20,589 --> 00:17:22,009 a quien haya escrito ese enunciado 390 00:17:22,009 --> 00:17:24,430 y decirle, haberlo leído siete veces 391 00:17:24,430 --> 00:17:26,549 y no entiendo lo que quieres decir 392 00:17:26,549 --> 00:17:27,670 bueno 393 00:17:27,670 --> 00:17:29,910 pues una vez que ya se ha entendido 394 00:17:29,910 --> 00:17:32,509 lo que se quiere decir, se ha leído 6, 7, 8 veces 395 00:17:32,509 --> 00:17:35,569 ahora ya empieza esta otra parte 396 00:17:35,569 --> 00:17:37,589 que es, a ver, ¿cuál es el objetivo final? 397 00:17:38,009 --> 00:17:39,829 este, ¿cómo lo puedo ir construyendo? 398 00:17:40,509 --> 00:17:43,210 pues voy usando los ladrillos que tengo en mi cabeza 399 00:17:43,210 --> 00:17:45,650 no en otro sitio, que los tengo todos ahí 400 00:17:45,650 --> 00:17:48,089 todos los que hemos visto hasta ahora tienen que estar ahí 401 00:17:48,089 --> 00:17:50,650 hemos usado el ladrillo de leer por teclado 402 00:17:50,650 --> 00:17:51,589 que lo tenemos en la cabeza 403 00:17:51,589 --> 00:17:54,930 hemos usado el ladrillo de la asignación condicional 404 00:17:54,930 --> 00:17:55,950 que lo tenemos en la cabeza 405 00:17:55,950 --> 00:17:58,809 por supuesto el de cómo mostrar por consola 406 00:17:58,809 --> 00:18:00,809 el de cómo declarar variables 407 00:18:00,809 --> 00:18:02,670 si para hacer algo de esto 408 00:18:02,670 --> 00:18:05,109 hemos necesitado mirar en Google 409 00:18:05,109 --> 00:18:07,049 o algo, es que tenemos 410 00:18:07,049 --> 00:18:08,910 que estudiar más historia 411 00:18:08,910 --> 00:18:11,170 más codos, hay que estudiar más 412 00:18:11,170 --> 00:18:12,309 más codos, ¿vale? 413 00:18:14,450 --> 00:18:15,349 habrá situaciones 414 00:18:15,349 --> 00:18:17,369 en las cuales sí, o sea, hay pequeños espacios 415 00:18:17,369 --> 00:18:19,069 de conocimiento que uno sabe, ah, vale 416 00:18:19,069 --> 00:18:20,250 con esto se puede hacer esto 417 00:18:20,250 --> 00:18:22,970 pero los detalles no tiene sentido 418 00:18:22,970 --> 00:18:25,170 memorizarlos, pues entonces ya, yo almaceno 419 00:18:25,170 --> 00:18:27,009 en mi cabeza que tengo esta herramienta para 420 00:18:27,009 --> 00:18:29,289 hacer esto y cuando la necesite 421 00:18:29,289 --> 00:18:30,910 ya si busco los detalles a lo mejor 422 00:18:30,910 --> 00:18:32,450 en internet o en la documentación 423 00:18:32,450 --> 00:18:35,009 pero hasta ahora todo lo que hemos visto aquí 424 00:18:35,009 --> 00:18:35,910 es no 425 00:18:35,910 --> 00:18:40,650 lo podemos tener todo en la cabeza y no pasa nada 426 00:18:40,650 --> 00:18:42,930 bueno pues 427 00:18:42,930 --> 00:18:44,930 entonces esto conduciría al primer 428 00:18:44,930 --> 00:18:46,809 boceto de mi ejercicio, al primer boceto 429 00:18:46,809 --> 00:18:48,809 ahora ya es 430 00:18:48,809 --> 00:18:50,690 cuando yo ya sobre el escrito 431 00:18:50,690 --> 00:18:52,829 pues empiezo a mirarlo, a pensarlo 432 00:18:53,349 --> 00:18:54,809 a ver si, uy se me ha escapado 433 00:18:54,809 --> 00:18:56,569 esta cosita, cuando 434 00:18:56,569 --> 00:18:58,450 lo tenga más o menos claro hacer pruebas 435 00:18:58,450 --> 00:19:00,490 etcétera, ya me pongo, ya está 436 00:19:00,490 --> 00:19:02,630 pero ya tengo un primer boceto del ejercicio 437 00:19:02,630 --> 00:19:04,069 y además sin errores de compilación 438 00:19:04,069 --> 00:19:06,750 y sobre él ya, pues puedo detectar a lo mejor 439 00:19:06,750 --> 00:19:09,170 cosas que no he tenido en cuenta, etcétera 440 00:19:09,170 --> 00:19:10,410 ¿vale? 441 00:19:11,650 --> 00:19:12,869 pero bueno, esto que hemos 442 00:19:12,869 --> 00:19:14,609 hecho a todo el mundo le suena con sentido, ¿no? 443 00:19:18,180 --> 00:19:19,339 bueno, se ha quedado claro 444 00:19:19,339 --> 00:19:20,359 claro, claro, claro 445 00:19:20,359 --> 00:19:22,240 como tenéis que pensar 446 00:19:22,240 --> 00:19:24,980 luego ya cada uno obviamente tiene sus propios 447 00:19:24,980 --> 00:19:27,380 mecanismos, sus propias formas de programar 448 00:19:27,380 --> 00:19:27,579 y 449 00:19:27,579 --> 00:19:31,180 Y luego cada uno obviamente tiene 450 00:19:31,180 --> 00:19:33,839 Más o menos experiencia en programación 451 00:19:33,839 --> 00:19:35,559 O incluso ninguna 452 00:19:35,559 --> 00:19:37,119 ¿Vale? 453 00:19:37,180 --> 00:19:39,960 Yo, mi punto de partida 454 00:19:39,960 --> 00:19:41,200 O sea 455 00:19:41,200 --> 00:19:43,980 Mi clase es para los que no tienen 456 00:19:43,980 --> 00:19:45,259 Ni idea de programación 457 00:19:45,259 --> 00:19:47,420 ¿Vale? Para los que no tienen ni idea 458 00:19:47,420 --> 00:19:50,160 Porque esa es la responsabilidad nuestra 459 00:19:50,160 --> 00:19:52,119 Los que sepan más 460 00:19:52,119 --> 00:19:52,960 Pues maravilloso 461 00:19:52,960 --> 00:19:53,839 Porque les 462 00:19:53,839 --> 00:19:56,259 lo tendrán, vamos, le será 463 00:19:56,259 --> 00:19:58,359 todo más cómodo 464 00:19:58,359 --> 00:20:00,420 bueno, pues entonces ahora estamos en la fase 465 00:20:00,420 --> 00:20:02,279 de mirar esto un poquito y decir, vale, esto 466 00:20:02,279 --> 00:20:03,960 que he hecho tiene sentido, tiene buena pinta 467 00:20:03,960 --> 00:20:06,140 podríamos empezar a sacarle peros 468 00:20:06,140 --> 00:20:08,220 ¿alguien le sacaría 469 00:20:08,220 --> 00:20:10,200 algún pero a este código 470 00:20:10,200 --> 00:20:11,640 de aquí? seguro que sí, ¿verdad? 471 00:20:13,880 --> 00:20:15,960 ¿a qué alguien le podría sacar algún pero? 472 00:20:19,250 --> 00:20:20,490 al funcionamiento 473 00:20:20,490 --> 00:20:22,269 ¿alguien se pone ahora ya? nosotros le damos 474 00:20:22,269 --> 00:20:24,309 este código, le damos este código al cliente 475 00:20:24,309 --> 00:20:25,450 que nos ha pedido esa aplicación 476 00:20:25,450 --> 00:20:27,609 y el cliente se pone a usarlo 477 00:20:27,609 --> 00:20:29,529 y es probable que el cliente 478 00:20:29,529 --> 00:20:31,329 en algún momento nos dé un toque y nos diga 479 00:20:31,329 --> 00:20:33,109 uuuh, oye, es que no me está 480 00:20:33,109 --> 00:20:35,250 no es exactamente el funcionamiento 481 00:20:35,250 --> 00:20:37,410 completo y correcto, ¿qué pero me podría 482 00:20:37,410 --> 00:20:38,369 sacar el cliente? 483 00:20:43,720 --> 00:20:44,200 efectivamente 484 00:20:44,200 --> 00:20:46,839 efectivamente, el cliente le puede decir 485 00:20:46,839 --> 00:20:48,619 oye, si meto dos números iguales 486 00:20:48,619 --> 00:20:50,680 entonces yo ahora pienso y digo, anda, claro 487 00:20:50,680 --> 00:20:53,220 es que si meto dos números iguales 488 00:20:53,220 --> 00:20:55,000 esta condición es 489 00:20:55,000 --> 00:20:56,119 falsa, obviamente 490 00:20:56,119 --> 00:20:58,339 entonces al ser falsa 491 00:20:58,339 --> 00:20:59,880 asigna el dato 2 492 00:20:59,880 --> 00:21:02,480 entonces si meto dos números iguales 493 00:21:02,480 --> 00:21:04,700 el programa siempre me muestra el segundo 494 00:21:04,700 --> 00:21:06,279 ¿verdad? 495 00:21:06,500 --> 00:21:08,740 entonces hombre, ese es un funcionamiento 496 00:21:08,740 --> 00:21:10,819 subóptimo, otra cosa es que yo le diga 497 00:21:10,819 --> 00:21:12,160 al cliente, oye te echo un programa 498 00:21:12,160 --> 00:21:14,819 en el que si los dos son iguales te muestra el segundo 499 00:21:14,819 --> 00:21:16,059 ¿eso te vale? 500 00:21:16,880 --> 00:21:18,900 porque vas a introducir dos datos iguales 501 00:21:18,900 --> 00:21:20,759 alguna vez, ¿eso te importa? ¿no te importa? 502 00:21:21,539 --> 00:21:22,519 y si le importa 503 00:21:22,519 --> 00:21:24,380 pues habrá que arreglarlo 504 00:21:24,380 --> 00:21:27,200 ¿vale? si le importa habrá que arreglarlo 505 00:21:27,200 --> 00:21:28,940 arreglarlo, entonces hombre 506 00:21:28,940 --> 00:21:30,799 aquí podríamos empezar a refinar 507 00:21:30,799 --> 00:21:32,799 anidando condiciones, etc 508 00:21:32,799 --> 00:21:34,980 ahora mismo es lo que menos me importa 509 00:21:34,980 --> 00:21:36,839 pero podríamos 510 00:21:36,839 --> 00:21:40,859 empezar a hacerlo, pero bueno 511 00:21:40,859 --> 00:21:43,220 está claro, por lo que tiene claro 512 00:21:43,220 --> 00:21:45,559 que este programa, si los dos son iguales 513 00:21:45,559 --> 00:21:47,440 en ese caso de prueba, me daría el segundo 514 00:21:47,440 --> 00:21:49,460 entonces antes de 515 00:21:49,460 --> 00:21:51,599 entregárselo al cliente, uno habría 516 00:21:51,599 --> 00:21:52,759 probado este código 517 00:21:52,759 --> 00:21:55,180 y lo habría probado dando 518 00:21:55,180 --> 00:21:57,180 datos concretos, que eso es lo que se llama 519 00:21:57,180 --> 00:21:59,119 casos de prueba, conjuntos de datos concretos 520 00:21:59,119 --> 00:22:01,400 y viendo lo que da, a ver si tiene sentido o no 521 00:22:01,400 --> 00:22:03,259 esas pruebas no las hemos 522 00:22:03,259 --> 00:22:05,279 hecho nosotros, vamos a hacerlas 523 00:22:05,279 --> 00:22:08,559 vale, vamos a hacer un caso de prueba 524 00:22:08,559 --> 00:22:10,500 en el cual el primero 525 00:22:10,500 --> 00:22:12,759 es mayor que el segundo 526 00:22:12,759 --> 00:22:15,480 vale, este caso de prueba lo ha pasado con éxito 527 00:22:15,480 --> 00:22:16,180 ha funcionado 528 00:22:16,180 --> 00:22:19,099 vamos a hacer otro caso de prueba 529 00:22:19,099 --> 00:22:21,400 en el cual el primero 530 00:22:21,400 --> 00:22:23,339 es menor 531 00:22:23,339 --> 00:22:25,000 que el segundo 532 00:22:25,000 --> 00:22:27,599 que es el opuesto que he metido antes 533 00:22:27,599 --> 00:22:30,059 vale, este caso de prueba lo ha pasado 534 00:22:30,059 --> 00:22:32,460 vale, entonces si uno 535 00:22:32,460 --> 00:22:34,240 es un buen tester y hace 536 00:22:34,240 --> 00:22:36,420 un buen conjunto 537 00:22:36,420 --> 00:22:38,099 de casos de prueba, habría 538 00:22:38,099 --> 00:22:39,599 metido ese otro 539 00:22:39,599 --> 00:22:42,400 habría metido ese otro caso de prueba, habría dicho 540 00:22:42,400 --> 00:22:44,740 vale, y si yo meto dos números iguales 541 00:22:44,740 --> 00:22:47,940 me muestra el segundo 542 00:22:47,940 --> 00:22:49,519 entonces 543 00:22:49,519 --> 00:22:51,940 esto le puede importar al cliente o no 544 00:22:51,940 --> 00:22:54,500 repito, le puede importar, a lo mejor el cliente me dice 545 00:22:54,500 --> 00:23:04,440 Está bien, está bien porque el mayor de los dos es los dos, es lo mismo, vale, está bien, puede decir sí, sí, vale, me vale. 546 00:23:05,000 --> 00:23:14,140 O puede pedirnos, no, si son iguales, pues entonces tienes que mostrarme otra cosa, tienes que mostrarme otra cosa. 547 00:23:14,619 --> 00:23:19,079 Entonces aquí ya sí que tendríamos que empezar a refinar esto. 548 00:23:19,079 --> 00:23:33,200 Y se complicaría, porque si son iguales, entonces yo aquí, mi sentencia final no es un system out que muestra un numerito, sino que mi sentencia final sería, muestra un mensaje, son iguales. 549 00:23:33,200 --> 00:23:36,480 entonces esto ya con las herramientas que tenemos 550 00:23:36,480 --> 00:23:38,440 hasta ahora, no podemos 551 00:23:38,440 --> 00:23:40,660 incluirlo, no podemos incluirlo 552 00:23:40,660 --> 00:23:42,200 tendríamos aquí ya que sí que meter un if 553 00:23:42,200 --> 00:23:44,380 porque esto ya no es una asignación 554 00:23:44,380 --> 00:23:46,440 condicionada, yo no puedo meter al 555 00:23:46,440 --> 00:23:48,220 resultado que es un entero 556 00:23:48,220 --> 00:23:50,099 meterle una cadena 557 00:23:50,099 --> 00:23:52,279 son iguales y que entonces 558 00:23:52,279 --> 00:23:54,579 resultado me muestre o el número 559 00:23:54,579 --> 00:23:56,579 o me muestre la cadena son iguales que contiene 560 00:23:56,579 --> 00:23:58,140 no, esa variable solo puede tener números 561 00:23:58,140 --> 00:23:59,740 entonces 562 00:23:59,740 --> 00:24:02,720 con las herramientas 563 00:24:02,720 --> 00:24:04,779 conocemos hasta ahora, ese refinado 564 00:24:04,779 --> 00:24:06,160 no podríamos hacerle 565 00:24:06,160 --> 00:24:08,019 ¿vale? pero 566 00:24:08,019 --> 00:24:10,779 en cuanto ya incorporemos el 567 00:24:10,779 --> 00:24:12,940 if, que me permite hacer un conjunto 568 00:24:12,940 --> 00:24:14,640 de sentencias o hacer otro en función 569 00:24:14,640 --> 00:24:16,359 de la condición, pues ya está 570 00:24:16,359 --> 00:24:18,819 podríamos modificar ese 571 00:24:18,819 --> 00:24:21,039 esa 572 00:24:21,039 --> 00:24:25,039 este pequeño mal funcionamiento 573 00:24:25,039 --> 00:24:26,740 si es que al cliente le parece mal 574 00:24:26,740 --> 00:24:28,539 funcionamiento ¿vale? 575 00:24:29,440 --> 00:24:32,599 ¿vale? ¿alguna duda 576 00:24:32,599 --> 00:24:34,140 pregunta o algo similar? 577 00:24:34,480 --> 00:24:36,240 nada de nada 578 00:24:36,240 --> 00:24:40,019 todo está claro 579 00:24:40,019 --> 00:24:41,640 ¿habéis estudiado en casa 580 00:24:41,640 --> 00:24:43,799 las tres tardes que teníais? 581 00:24:46,460 --> 00:24:47,279 solo ha contestado uno 582 00:24:47,279 --> 00:24:47,880 ¿quién ha contestado? 583 00:24:48,839 --> 00:24:50,220 al que menos creo, fíjate 584 00:24:50,220 --> 00:24:53,259 si has estudiado, ¿no? 585 00:24:53,579 --> 00:24:55,019 vale, y los demás no contestan 586 00:24:55,019 --> 00:24:56,880 pues porque normalmente las preguntas que hacen 587 00:24:56,880 --> 00:24:58,220 los profesores no se contestan 588 00:24:58,220 --> 00:25:01,779 bueno, era una pregunta retórica 589 00:25:01,779 --> 00:25:02,839 asumo que lo hayáis hecho 590 00:25:02,839 --> 00:25:04,420 vale 591 00:25:04,420 --> 00:25:17,460 Antes de que sigáis haciendo algún ejercicio más y todo eso, unos pequeños matices más para poder ir haciendo programas un pelinín más sofisticados. 592 00:25:18,700 --> 00:25:31,920 Bueno, a la hora de hacer asignaciones, esto me va a quedar así un poco feo, vale, estábamos con variables y asignaciones a variables, ¿verdad? 593 00:25:31,920 --> 00:25:35,900 Ese ha sido todo nuestro rollo hasta ahora, variables y asignaciones a variables. 594 00:25:35,900 --> 00:25:43,319 Y para asignar valores a variables, habíamos usado algunos operadores, pero algunos muy básicos. 595 00:25:44,019 --> 00:25:52,380 Los aritméticos, más menos multiplicación y división, siempre los podéis usar con su significado natural que conocéis. 596 00:25:52,799 --> 00:25:56,380 Siempre los podéis usar con variables numéricas, sin ningún problema, ¿verdad? Los aritméticos. 597 00:25:57,160 --> 00:26:02,720 Y luego además, es lo único que hemos incorporado en realidad para construir expresiones que operen con variables. 598 00:26:02,720 --> 00:26:05,359 y luego además este, menor que, mayor que 599 00:26:05,359 --> 00:26:07,359 para comparar 600 00:26:07,359 --> 00:26:09,160 números y 601 00:26:09,160 --> 00:26:11,140 de esa manera obtener condiciones 602 00:26:11,140 --> 00:26:13,319 ¿vale? 603 00:26:13,339 --> 00:26:15,460 y las condiciones que peculiaridad tienen 604 00:26:15,460 --> 00:26:17,579 que se pueden asignar a variables 605 00:26:17,579 --> 00:26:18,059 boolean 606 00:26:18,059 --> 00:26:21,319 ¿no? entonces en relación a lo que 607 00:26:21,319 --> 00:26:22,920 preguntabas tú, ¿de cuánta 608 00:26:22,920 --> 00:26:24,519 forma se puede hacer este programa? 609 00:26:25,059 --> 00:26:26,900 hombre, como se puede hacer de tropecientas 610 00:26:26,900 --> 00:26:28,680 siempre y cuando haga esto, por ejemplo 611 00:26:28,680 --> 00:26:29,799 por ejemplo 612 00:26:29,799 --> 00:26:32,220 esto es una condición 613 00:26:32,220 --> 00:26:33,619 luego al ser una condición 614 00:26:33,619 --> 00:26:36,380 se puede asignar a una variable boolean 615 00:26:36,380 --> 00:26:38,680 entonces a lo mejor 616 00:26:38,680 --> 00:26:40,039 a mi me resulta más fácil 617 00:26:40,039 --> 00:26:41,099 meter esa condición 618 00:26:41,099 --> 00:26:43,880 en una variable boolean intermedia 619 00:26:43,880 --> 00:26:48,420 por ejemplo la variable boolean 620 00:26:48,420 --> 00:26:49,160 que la llamo así 621 00:26:49,160 --> 00:26:52,500 y a esta variable boolean 622 00:26:52,500 --> 00:26:53,920 le asigno 623 00:26:53,920 --> 00:26:56,519 esta condición 624 00:26:56,519 --> 00:26:58,380 y esta es una condición 625 00:26:58,380 --> 00:27:00,759 perfectamente bien hecha 626 00:27:00,759 --> 00:27:02,859 porque compara con este operador relacional 627 00:27:02,859 --> 00:27:04,980 dos numeritos, es una condición muy bien hecha 628 00:27:04,980 --> 00:27:06,880 su valor será true o false 629 00:27:06,880 --> 00:27:08,819 y ese valor va a parar 630 00:27:08,819 --> 00:27:10,380 cae a una variable booleana 631 00:27:10,380 --> 00:27:12,400 que las variables booleanas solo pueden recibir 632 00:27:12,400 --> 00:27:14,920 verdad o mentira, resultados de evaluar 633 00:27:14,920 --> 00:27:16,680 condiciones, es lo único que pueden recibir 634 00:27:16,680 --> 00:27:19,279 o cascarle a capón true o false 635 00:27:19,279 --> 00:27:22,539 bueno, pues entonces si yo me hago 636 00:27:22,539 --> 00:27:24,920 una variable booleana intermedia, pues hombre 637 00:27:24,920 --> 00:27:26,839 entonces puedo poner 638 00:27:26,839 --> 00:27:27,420 esto aquí 639 00:27:27,420 --> 00:27:32,250 que era lo que estábamos comentando ahí 640 00:27:32,250 --> 00:27:34,369 el martes 641 00:27:34,369 --> 00:27:36,210 entonces lo que es el código 642 00:27:36,210 --> 00:27:38,930 el código luego se puede poner de mil formas 643 00:27:38,930 --> 00:27:40,890 distintas, se puede poner de mil maneras 644 00:27:40,890 --> 00:27:42,769 ¿vale? entonces 645 00:27:42,769 --> 00:27:44,990 lo que yo he hecho antes, lo que tenía escrito antes 646 00:27:44,990 --> 00:27:47,029 y esto es lo mismo 647 00:27:47,029 --> 00:27:48,490 en realidad, es lo mismo 648 00:27:48,490 --> 00:27:51,230 lo que pasa es que con esto uso una variable 649 00:27:51,230 --> 00:27:52,029 intermedia 650 00:27:52,029 --> 00:27:54,710 que el único efecto 651 00:27:54,710 --> 00:27:56,509 podría ser en este caso 652 00:27:56,509 --> 00:27:58,410 que a lo mejor el código quede más claro 653 00:27:58,410 --> 00:28:00,410 porque 654 00:28:00,410 --> 00:28:02,170 en este caso esta condición es fácil 655 00:28:02,170 --> 00:28:04,210 sencilla, pero hay veces que la condición 656 00:28:04,210 --> 00:28:06,250 a poner aquí es una condición muy grande 657 00:28:06,250 --> 00:28:08,109 entonces poner ahí una pedazo de condición 658 00:28:08,109 --> 00:28:09,750 pues a lo mejor me hace perder ya un poco 659 00:28:09,750 --> 00:28:11,950 la estética del programa 660 00:28:11,950 --> 00:28:14,190 entonces ponerlo con una 661 00:28:14,190 --> 00:28:16,089 booleana intermedia pues a lo mejor hace que 662 00:28:16,089 --> 00:28:18,009 la estética, la elegibilidad 663 00:28:18,009 --> 00:28:19,410 del código sea un poquito mejor 664 00:28:19,410 --> 00:28:22,069 y como esto podría yo poner 665 00:28:22,069 --> 00:28:23,509 obviamente mil 666 00:28:23,509 --> 00:28:26,390 pequeños cambios en el código 667 00:28:26,390 --> 00:28:28,089 por ejemplo, podría 668 00:28:28,089 --> 00:28:30,210 declarar a la vez que 669 00:28:30,210 --> 00:28:31,869 inicializo, ¿vale? digo 670 00:28:31,869 --> 00:28:39,630 oye, voy a quitar esto de aquí, venga, y lo declaro a la vez, y así no tengo tanto lío de líneas, bueno, pues otro cambio de código que podría hacer, 671 00:28:40,210 --> 00:28:47,730 ¿verdad?, recordad que a la vez que damos el primer valor a una variable, a la vez que le damos el primer valor, yo ya la puedo declarar en ese momento, 672 00:28:48,730 --> 00:28:58,710 que es la, bueno, pues otro pequeño cambio que puedo hacer, en lugar de declararla, dejarla asignada, y luego asignarle, puedo declararla y a la vez asignarle su primer valor, 673 00:28:58,710 --> 00:29:02,410 pues si quiero, y así esta línea se hace más cortita 674 00:29:02,410 --> 00:29:06,529 ¿vale? entonces este primer valor que yo asigno 675 00:29:06,529 --> 00:29:10,329 me da igual que sea un valor fijo 3, 7 676 00:29:10,329 --> 00:29:14,589 o lo que yo quiera, siempre y cuando sea un valor, y esto es un valor, lo que pasa es que ese valor 677 00:29:14,589 --> 00:29:18,369 no se va a resolver hasta que alguien ponga un número en el teclado 678 00:29:18,369 --> 00:29:22,890 y ese número caiga en dato 1, ¿vale? entonces cambios en el código 679 00:29:22,890 --> 00:29:26,750 pues muchas, muchas combinaciones, bueno este no tiene muchas líneas 680 00:29:26,750 --> 00:29:28,970 un mismo código que hace lo mismo 681 00:29:28,970 --> 00:29:31,029 se puede escribir de muchas maneras 682 00:29:31,029 --> 00:29:33,450 y la idea es que sea 683 00:29:33,450 --> 00:29:35,089 lo más legible posible 684 00:29:35,089 --> 00:29:36,509 para el que no lo ha hecho lo vea 685 00:29:36,509 --> 00:29:39,369 lo entienda, no vea ahí líneas enormes 686 00:29:39,369 --> 00:29:40,809 que no sabe de donde han salido 687 00:29:40,809 --> 00:29:42,670 que le cuesta ligarlas con otra 688 00:29:42,670 --> 00:29:44,349 vale 689 00:29:44,349 --> 00:29:48,940 bueno, pues a ver 690 00:29:48,940 --> 00:29:55,809 estamos con asignaciones de variables 691 00:29:55,809 --> 00:29:57,589 vamos a ponerlo aquí en 692 00:29:57,589 --> 00:29:59,069 esto estaba 693 00:29:59,069 --> 00:30:07,230 en la esta de ejercicio 694 00:30:07,230 --> 00:30:12,890 voy a hacer otra clase que sea 695 00:30:12,890 --> 00:30:14,329 ejemplo con cadenas 696 00:30:14,329 --> 00:30:17,630 para incorporar 697 00:30:17,630 --> 00:30:22,240 ejemplos con 698 00:30:22,240 --> 00:30:24,799 cadenas 699 00:30:24,799 --> 00:30:31,569 ah no, un proyecto no, perdón, una clase 700 00:30:31,569 --> 00:30:40,000 clase ejemplos 701 00:30:40,000 --> 00:30:43,619 con cadenas 702 00:30:43,619 --> 00:30:53,940 vale, pues venga, vamos a ver 703 00:30:53,940 --> 00:31:09,589 bueno, pues variables, tipos de variables 704 00:31:09,589 --> 00:31:10,470 que hemos visto 705 00:31:10,470 --> 00:31:13,329 tipos de variables primitivos, ya de nuevo los tenemos 706 00:31:13,329 --> 00:31:15,529 también todos en la cabeza, números enteros 707 00:31:15,529 --> 00:31:17,569 by, short, int y long, depende de lo grandote 708 00:31:17,569 --> 00:31:18,349 que quiero que sea el número 709 00:31:18,349 --> 00:31:20,809 números decimales, float y double 710 00:31:20,809 --> 00:31:22,529 dependiendo de la precisión 711 00:31:22,529 --> 00:31:25,130 en la cantidad de cifras decimales 712 00:31:25,130 --> 00:31:27,349 booleano, si quiero guardar una condición 713 00:31:27,349 --> 00:31:28,410 o algo que es true o false 714 00:31:28,410 --> 00:31:31,609 y char si quiero guardar un único carácter 715 00:31:31,609 --> 00:31:33,470 con los matices que vimos 716 00:31:33,470 --> 00:31:35,549 en la asignación, que si yo asigno 717 00:31:35,549 --> 00:31:36,190 algo a un char 718 00:31:36,190 --> 00:31:39,450 cuando si doy un número 719 00:31:39,450 --> 00:31:41,369 para java es lo mismo 720 00:31:41,369 --> 00:31:42,690 lo busca en la tabla y ya está 721 00:31:42,690 --> 00:31:45,730 entonces si java ve que ahí necesita 722 00:31:45,730 --> 00:31:47,309 tiene un hueco para un char 723 00:31:47,309 --> 00:31:49,049 y le estamos dando un número, no le molesta 724 00:31:49,049 --> 00:31:51,329 no le molesta porque coge ese número, se va a la tabla 725 00:31:51,329 --> 00:31:53,549 y lo sustituye por el carácter correspondiente 726 00:31:53,549 --> 00:31:55,430 si le damos el carácter directamente entre comillas simple 727 00:31:55,430 --> 00:31:57,490 pues se lo ponemos más fácil, da un poco igual 728 00:31:57,490 --> 00:31:59,509 esos eran los matices que estábamos viendo 729 00:31:59,509 --> 00:32:01,710 vale, bueno pues 730 00:32:01,710 --> 00:32:04,089 obviamente esas variables 731 00:32:04,089 --> 00:32:05,609 se quedan cortas 732 00:32:05,609 --> 00:32:07,789 y por eso aparecen las variables objeto 733 00:32:07,789 --> 00:32:10,289 en las que ya nos detendremos durante mucho tiempo 734 00:32:10,289 --> 00:32:12,150 para aprender a construirlas 735 00:32:12,150 --> 00:32:14,170 pero desde ya, desde ya 736 00:32:14,170 --> 00:32:15,450 vamos a necesitar 737 00:32:15,450 --> 00:32:17,730 un tipo de variable adicional 738 00:32:17,730 --> 00:32:19,750 a estos tipos primitivos que hemos visto 739 00:32:19,750 --> 00:32:21,890 porque desde ya, desde ya 740 00:32:21,890 --> 00:32:24,009 es que lo estamos usando, de hecho lo estamos usando 741 00:32:24,009 --> 00:32:26,250 a veces incluso sin saber como se llama 742 00:32:26,250 --> 00:32:28,829 que son las cadenas 743 00:32:28,829 --> 00:32:30,569 de caracteres enteras, vale, o sea 744 00:32:30,569 --> 00:32:32,730 un char solo me guarda un carácter 745 00:32:32,730 --> 00:32:34,569 yo con un carácter no hago nada, con un carácter 746 00:32:34,569 --> 00:32:36,509 yo no puedo guardar un nombre, no puedo guardar 747 00:32:36,509 --> 00:32:38,750 una descripción, en un carácter no puedo guardar 748 00:32:38,750 --> 00:32:40,910 nada, tendría que tener un montón de char para cada carácter 749 00:32:40,910 --> 00:32:42,069 de ese nombre, es una locura 750 00:32:42,069 --> 00:32:44,450 entonces, desde ya 751 00:32:44,450 --> 00:32:46,569 desde ya, aun sin entender 752 00:32:46,569 --> 00:32:48,470 algunas de las cosas que implica, desde ya 753 00:32:48,470 --> 00:32:50,210 vamos a tener que usar variables 754 00:32:50,210 --> 00:32:52,430 que sirvan para guardarme 755 00:32:52,430 --> 00:32:54,049 cadenas de caracteres 756 00:32:54,049 --> 00:32:55,990 enteras, no solo un carácter 757 00:32:56,869 --> 00:33:00,910 Bueno, pues ese tipo de dato, ¿cómo se llama? 758 00:33:01,789 --> 00:33:08,829 Ese tipo de dato se llama así, como uno podría imaginar, con la S mayúscula, ¿vale? 759 00:33:08,890 --> 00:33:13,250 Con la S mayúscula, no con la S minúscula, con la S mayúscula. 760 00:33:14,730 --> 00:33:22,769 Entonces, si yo declaro un dato de este tipo, porque yo sé que va a contener una cadena de caracteres, 761 00:33:22,769 --> 00:33:24,430 Lo declaró de tipo string 762 00:33:24,430 --> 00:33:27,109 Y ahora cadena sirve para contener 763 00:33:27,109 --> 00:33:29,269 Toda una cadena de caracteres 764 00:33:29,269 --> 00:33:30,630 ¿Vale? 765 00:33:31,190 --> 00:33:32,630 Porque su tipo es string 766 00:33:32,630 --> 00:33:35,710 Entonces ya apreciamos 767 00:33:35,710 --> 00:33:36,670 Una primera diferencia 768 00:33:36,670 --> 00:33:38,750 Los tipos primitivos y indavelchar 769 00:33:38,750 --> 00:33:40,849 Todos empezaban con minúscula 770 00:33:40,849 --> 00:33:42,670 Y string 771 00:33:42,670 --> 00:33:44,849 Ya empieza con mayúscula 772 00:33:44,849 --> 00:33:46,309 Eso no es casual 773 00:33:46,309 --> 00:33:47,970 Tiene una razón de ser 774 00:33:47,970 --> 00:33:50,569 Y es que string no es lo que hemos llamado tipo primitivo 775 00:33:50,569 --> 00:33:52,289 Es también como escáner 776 00:33:52,289 --> 00:33:55,470 que Scanner si recordáis también empezaba con mayúscula y no es casual 777 00:33:55,470 --> 00:33:58,390 es un tipo objeto también 778 00:33:58,390 --> 00:34:00,990 entonces que sea un tipo objeto 779 00:34:00,990 --> 00:34:02,910 tiene un montón de implicaciones 780 00:34:02,910 --> 00:34:05,289 que de nuevo ahora mismo no podemos entender 781 00:34:05,289 --> 00:34:07,849 porque no sabemos exactamente que son los objetos 782 00:34:07,849 --> 00:34:08,989 no podemos entenderlo 783 00:34:08,989 --> 00:34:10,550 tiene un montón de implicaciones 784 00:34:10,550 --> 00:34:12,230 esas implicaciones ya las veremos 785 00:34:12,230 --> 00:34:14,909 pero aun sin conocer todas esas implicaciones 786 00:34:14,909 --> 00:34:17,469 podemos usar este tipo de datos 787 00:34:17,469 --> 00:34:18,710 podemos usarlo 788 00:34:18,710 --> 00:34:21,989 podemos hacer un primer uso sencillo 789 00:34:21,989 --> 00:34:29,369 Porque, hombre, nombres y cadenas y textos necesitamos desde ya para mostrar contenidos, para mostrar cosas. 790 00:34:30,710 --> 00:34:35,090 Vale, bueno, pues entonces, a las variables string, ¿qué tipo de valor les asignamos? 791 00:34:35,750 --> 00:34:36,789 Hombre, pues ya lo hemos dicho. 792 00:34:37,710 --> 00:34:43,489 Las variables string están pensadas para recibir cadenas de caracteres, no un solo carácter. 793 00:34:44,210 --> 00:34:51,849 Y las cadenas de caracteres para Java las espera como el texto que sea entre comillas dobles. 794 00:34:51,989 --> 00:34:54,789 a diferencia de un único char que es entre comillas simples 795 00:34:54,789 --> 00:35:02,239 vale 796 00:35:02,239 --> 00:35:04,519 pues esta es una asignación 797 00:35:04,519 --> 00:35:06,340 perfectamente 798 00:35:06,340 --> 00:35:08,260 válida de una cadena de caracteres 799 00:35:08,260 --> 00:35:10,099 porque está entre 800 00:35:10,099 --> 00:35:11,519 comillas dobles 801 00:35:11,519 --> 00:35:14,179 obviamente esto nunca 802 00:35:14,179 --> 00:35:15,800 lo pondría entre comillas simples 803 00:35:15,800 --> 00:35:18,500 porque Java me diría 804 00:35:18,500 --> 00:35:20,219 no, las comillas simples son para 805 00:35:20,219 --> 00:35:22,519 un único char, cuando tú lo asignas a un char 806 00:35:22,519 --> 00:35:24,179 esto como es una cadena 807 00:35:24,179 --> 00:35:25,639 lo pondría entre comillas dobles 808 00:35:25,639 --> 00:35:30,119 vale, entonces bueno 809 00:35:30,119 --> 00:35:32,179 podemos trabajar con este tipo de dato 810 00:35:32,179 --> 00:35:33,920 casi 811 00:35:33,920 --> 00:35:36,159 como si fuera un tipo de dato primitivo 812 00:35:36,159 --> 00:35:38,440 normal, que no lo es 813 00:35:38,440 --> 00:35:40,179 y eso tiene muchas implicaciones 814 00:35:40,179 --> 00:35:40,920 en su uso 815 00:35:40,920 --> 00:35:44,239 pero no las podemos entender ahora, pero para un uso 816 00:35:44,239 --> 00:35:46,019 básico podemos usarlo como si fuera 817 00:35:46,019 --> 00:35:47,960 un tipo de dato primitivo 818 00:35:47,960 --> 00:35:50,519 entonces, que yo quiero mostrar una variable 819 00:35:50,519 --> 00:35:52,619 stream por teclado 820 00:35:52,619 --> 00:35:54,559 por consola 821 00:35:54,559 --> 00:35:56,219 pues como muestro 822 00:35:56,219 --> 00:35:56,860 cualquier otra 823 00:35:56,860 --> 00:35:59,900 la paso al system.out.print.dln 824 00:35:59,900 --> 00:36:15,559 Y ya está, y mostrará el contenido de la variable, y en este caso, pues ha mostrado el contenido de la variable cadena, ¿vale? El contenido de la variable cadena, ¿vale? 825 00:36:15,559 --> 00:36:19,400 esto que nos abre 826 00:36:19,400 --> 00:36:21,579 bueno nos abre 827 00:36:21,579 --> 00:36:23,900 ahora nos abre la pregunta 828 00:36:23,900 --> 00:36:26,260 de igual que yo puedo 829 00:36:26,260 --> 00:36:28,159 operar 830 00:36:28,159 --> 00:36:29,820 con variables primitivas 831 00:36:29,820 --> 00:36:31,619 que hemos visto que podemos operar 832 00:36:31,619 --> 00:36:34,099 con variables numéricas para sumarlas 833 00:36:34,099 --> 00:36:35,159 restarlas 834 00:36:35,159 --> 00:36:37,400 igual que puedo 835 00:36:37,400 --> 00:36:39,840 operar con variables 836 00:36:39,840 --> 00:36:41,039 para hacer expresiones 837 00:36:41,039 --> 00:36:43,000 y esas expresiones asignarlas 838 00:36:43,000 --> 00:36:45,420 puedo operar con cadenas también 839 00:36:45,420 --> 00:36:49,119 para asignar a una variable string 840 00:36:49,119 --> 00:36:51,880 asignar el resultado de una expresión 841 00:36:51,880 --> 00:36:52,900 que involucre cadenas 842 00:36:52,900 --> 00:36:55,619 en realidad también podemos operar con cadenas 843 00:36:55,619 --> 00:36:56,679 pero operar con cadenas 844 00:36:56,679 --> 00:36:59,519 ¿qué es la única operación interesante con cadenas? 845 00:36:59,800 --> 00:37:00,519 concatenarlas 846 00:37:00,519 --> 00:37:02,420 vale, concatenarlas 847 00:37:02,420 --> 00:37:04,840 bueno, pues podemos concatenar cadenas 848 00:37:04,840 --> 00:37:06,639 construir una expresión 849 00:37:06,639 --> 00:37:09,679 que sea el resultado de concatenar cadenas 850 00:37:09,679 --> 00:37:13,440 es decir, si aquí declaramos 2 851 00:37:13,440 --> 00:37:14,179 por ejemplo 852 00:37:14,179 --> 00:37:29,000 vale, entonces a la cadena 2 853 00:37:29,000 --> 00:37:34,239 le ponemos un espacio 854 00:37:34,239 --> 00:37:37,780 y yo también 855 00:37:37,780 --> 00:37:38,719 vale 856 00:37:38,719 --> 00:37:42,940 bueno, pues podríamos 857 00:37:42,940 --> 00:37:47,320 por ejemplo hacer algo así 858 00:37:47,320 --> 00:37:49,340 y es 859 00:37:49,340 --> 00:37:51,360 vamos a hacer a la cadena 1 860 00:37:51,360 --> 00:37:52,260 una asignación 861 00:37:52,260 --> 00:37:54,699 a la cadena 1 vamos a hacerle 862 00:37:54,699 --> 00:37:56,480 otra asignación más 863 00:37:56,480 --> 00:37:58,340 otra asignación más 864 00:37:58,340 --> 00:38:14,059 Y esta asignación que sea el resultado de concatenar otras dos cadenas, porque es una operación que podemos hacer perfectamente entre cadenas, concatenar dos cadenas. ¿Y cómo se concatenan? Con el operador más, con el operador más. 865 00:38:14,059 --> 00:38:16,579 entonces yo puedo hacer esto 866 00:38:16,579 --> 00:38:19,179 cadena1 867 00:38:19,179 --> 00:38:20,679 más 868 00:38:20,679 --> 00:38:22,599 cadena2 869 00:38:22,599 --> 00:38:25,340 y esta es una expresión 870 00:38:25,340 --> 00:38:27,360 perfectamente válida en Java 871 00:38:27,360 --> 00:38:29,059 perfectamente válida 872 00:38:29,059 --> 00:38:31,119 esto es una suma 873 00:38:31,119 --> 00:38:32,340 es un operador suma 874 00:38:32,340 --> 00:38:35,420 pero el operador suma cuando trabaja 875 00:38:35,420 --> 00:38:37,599 con operadores que son 876 00:38:37,599 --> 00:38:38,760 cadenas 877 00:38:38,760 --> 00:38:41,500 entonces no funciona 878 00:38:41,500 --> 00:38:43,400 como la suma algebraica que conocemos 879 00:38:43,400 --> 00:38:45,760 sino que funciona como la concatenación 880 00:38:45,760 --> 00:38:48,199 entonces este operador es un operador 881 00:38:48,199 --> 00:38:50,480 que en función de las variables 882 00:38:50,480 --> 00:38:51,780 que le pongamos a los lados 883 00:38:51,780 --> 00:38:54,860 o bien es la suma algebraica 884 00:38:54,860 --> 00:38:56,619 o bien es la concatenación 885 00:38:56,619 --> 00:38:58,280 y eso para Java 886 00:38:58,280 --> 00:39:00,719 es perfectamente distinguible 887 00:39:00,719 --> 00:39:02,480 dice, ah, me has puesto 888 00:39:02,480 --> 00:39:04,019 el operador suma, ¿qué tengo a los lados? 889 00:39:04,119 --> 00:39:06,579 tengo cadenas, ah, vale, pues lo que quieres es que concatene 890 00:39:06,579 --> 00:39:08,340 pues ya está, entonces evalúa 891 00:39:08,340 --> 00:39:10,380 esta expresión y el resultado 892 00:39:10,380 --> 00:39:11,980 de esa expresión será la concatenación 893 00:39:11,980 --> 00:39:16,039 y el resultado va a cadena 1, que es perfectamente compatible 894 00:39:16,039 --> 00:39:19,880 porque como la concatenación de dos cadenas es también una cadena 895 00:39:19,880 --> 00:39:22,599 pues puede ir a cadena 1, que es una cadena 896 00:39:22,599 --> 00:39:26,860 recordad que las asignaciones, el resultado de la expresión 897 00:39:26,860 --> 00:39:31,079 tiene que ser del mismo tipo de la variable a la que asigno 898 00:39:31,079 --> 00:39:35,159 salvo con el matiz de la promoción automática que ya hemos visto 899 00:39:35,159 --> 00:39:37,300 que también tenéis memorizado en la cabeza 900 00:39:37,300 --> 00:39:41,960 vale, entonces si mostramos el resultado de cadena 1 otra vez 901 00:39:41,960 --> 00:39:43,820 cadena 1 aquí 902 00:39:43,820 --> 00:39:45,699 ha quedado pisoteada 903 00:39:45,699 --> 00:39:47,820 el valor que tenía de antes, que era este 904 00:39:47,820 --> 00:39:49,639 ha quedado pisoteado 905 00:39:49,639 --> 00:39:50,860 por el nuevo 906 00:39:50,860 --> 00:39:56,469 ¿vale? o sea, para construir el nuevo 907 00:39:56,469 --> 00:39:58,510 hemos usado 908 00:39:58,510 --> 00:40:00,269 el valor que tenía, claro, porque el orden 909 00:40:00,269 --> 00:40:02,809 que sigue la máquina virtual cuando ve una asignación 910 00:40:02,809 --> 00:40:04,010 el orden es 911 00:40:04,010 --> 00:40:06,369 primero, me voy a la derecha 912 00:40:06,369 --> 00:40:08,130 y evalúo la expresión 913 00:40:08,130 --> 00:40:10,610 la evalúo con el valor que tuviera 914 00:40:10,610 --> 00:40:11,690 cadena 1 en ese momento 915 00:40:11,690 --> 00:40:13,969 con el valor que tuviera, ¿cuál tiene? 916 00:40:14,230 --> 00:40:16,130 Este, vale, pues la evalúo. 917 00:40:16,190 --> 00:40:17,750 ¿Y cuál tiene cadena 2? Este, vale. 918 00:40:18,429 --> 00:40:24,210 Una vez que ya he construido el valor final, voy y se lo asigno a la variable que hay aquí, 919 00:40:25,170 --> 00:40:27,289 pisando el que tuviera de antes, pisando. 920 00:40:27,989 --> 00:40:33,050 Entonces cadena 1 aquí ha perdido su valor original y se ha quedado con el nuevo. 921 00:40:33,530 --> 00:40:38,389 De hecho, si lo ejecutamos, pues este es el primer valor que tenía cadena 1 922 00:40:38,389 --> 00:40:43,550 y este es el segundo valor con el que se ha quedado después de hacer esta asignación. 923 00:40:44,230 --> 00:40:45,809 vale 924 00:40:45,809 --> 00:40:50,820 entonces podemos hacer 925 00:40:50,820 --> 00:40:52,699 podemos usar cadenas de texto 926 00:40:52,699 --> 00:40:54,579 en nuestros programas 927 00:40:54,579 --> 00:40:58,619 a nivel muy básico 928 00:40:58,619 --> 00:40:59,699 sabiendo estas cosas 929 00:40:59,699 --> 00:41:01,920 y a veces lo necesitamos desde ya 930 00:41:01,920 --> 00:41:04,579 luego string, repito, tiene muchas 931 00:41:04,579 --> 00:41:05,940 implicaciones por debajo 932 00:41:05,940 --> 00:41:08,460 porque es un objeto, entonces tiene muchas cosas 933 00:41:08,460 --> 00:41:09,800 pero esas ya las iremos incorporando 934 00:41:09,800 --> 00:41:11,340 vale 935 00:41:11,340 --> 00:41:14,480 vale, entonces 936 00:41:14,480 --> 00:41:16,639 como somos curiosos 937 00:41:16,639 --> 00:41:19,159 y nos van surgiendo preguntas, ahora diríamos. 938 00:41:19,739 --> 00:41:22,880 Vale, entonces, operador más, ya empezamos a liarla. 939 00:41:23,460 --> 00:41:26,559 Si involucra números, es la suma algebraica, no hay duda, 940 00:41:26,900 --> 00:41:28,099 y el resultado va a un número. 941 00:41:28,860 --> 00:41:32,019 Si involucra cadenas, no hay duda, es la concatenación, 942 00:41:32,480 --> 00:41:33,800 y el resultado es una cadena. 943 00:41:34,619 --> 00:41:36,599 ¿Y si involucra un número y una cadena? 944 00:41:38,780 --> 00:41:40,219 ¿Se puede? ¿Lo deja Java? 945 00:41:41,320 --> 00:41:42,239 Pues vamos a verlo. 946 00:41:42,860 --> 00:41:44,519 Vamos a declarar ahora un numerito, 947 00:41:44,519 --> 00:41:48,960 y vamos a leerlo por teclado 948 00:41:48,960 --> 00:41:50,280 el numerito 949 00:41:50,280 --> 00:41:53,599 voy a copiar y pegar el escáner este 950 00:41:53,599 --> 00:41:59,780 lo voy a poner aquí arriba 951 00:41:59,780 --> 00:42:01,500 para que no moleste 952 00:42:01,500 --> 00:42:02,659 algo tan feo ahí en medio 953 00:42:02,659 --> 00:42:05,219 y ahora 954 00:42:05,219 --> 00:42:12,570 y este numerito N 955 00:42:12,570 --> 00:42:17,829 vale, ahora paramos 956 00:42:17,829 --> 00:42:18,889 cuando terminemos esto 957 00:42:18,889 --> 00:42:21,429 vale, este numerito N 958 00:42:21,429 --> 00:42:24,050 lo declaro y a la vez que lo declaro 959 00:42:24,050 --> 00:42:26,050 le doy ya su primer valor, lo inicializo 960 00:42:26,050 --> 00:42:27,449 con un valor leído por teclado 961 00:42:27,449 --> 00:42:30,269 O sea, el programa cuando llegue aquí se va a quedar esperando 962 00:42:30,269 --> 00:42:32,389 De nuevo, como es un poco feo 963 00:42:32,389 --> 00:42:34,590 Vamos a ponerle un mensajito antes 964 00:42:34,590 --> 00:42:35,789 Para que el usuario sepa 965 00:42:35,789 --> 00:42:38,269 Que tiene que introducir un número 966 00:42:38,269 --> 00:42:46,650 ¿Vale? Por ejemplo así 967 00:42:46,650 --> 00:42:48,050 Vale 968 00:42:48,050 --> 00:42:49,510 Se muestra el mensaje 969 00:42:49,510 --> 00:42:50,929 El programa se queda ahí esperando 970 00:42:50,929 --> 00:42:53,690 Cuando ya hemos metido el numerito, sale el numerito 971 00:42:53,690 --> 00:42:54,750 Y va la variable n 972 00:42:54,750 --> 00:42:57,070 Y ahora ya 973 00:42:57,070 --> 00:42:58,929 Nos podríamos plantear hacer esto 974 00:42:58,929 --> 00:43:01,610 Cadena 1 igual 975 00:43:01,610 --> 00:43:03,730 Vamos a conquetar 976 00:43:03,730 --> 00:43:09,869 El valor leído es 977 00:43:09,869 --> 00:43:12,010 Esto es una cadena 978 00:43:12,010 --> 00:43:15,429 Y la voy a concatenar con un valor entero 979 00:43:15,429 --> 00:43:19,869 Vale, pues Java me ha dejado 980 00:43:19,869 --> 00:43:22,210 Dejarme sin errores de compilación me ha dejado 981 00:43:22,210 --> 00:43:25,530 O sea, me ha dejado usar el operador más 982 00:43:25,530 --> 00:43:27,550 Mezclando tipos 983 00:43:27,550 --> 00:43:31,530 Mezclando la cadena string y mezclando el número 984 00:43:31,530 --> 00:43:37,010 no poniendo solamente dos cadenas como es el caso 985 00:43:37,010 --> 00:43:40,050 o no poniendo solo dos números como hemos hecho hasta ahora 986 00:43:40,050 --> 00:43:42,409 me deja mezclarlos 987 00:43:42,409 --> 00:43:47,050 vale, bueno, pues en el caso de que mezclemos y el operador tenga 988 00:43:47,050 --> 00:43:50,230 a un lado una cadena y a otro lado un número 989 00:43:50,230 --> 00:43:54,489 ¿qué es lo que hace Java? dice, ah, pues gana la cadena 990 00:43:54,489 --> 00:43:58,650 siempre gana la cadena, entonces lo que hace Java es 991 00:43:58,650 --> 00:44:01,829 convierte este numerito 992 00:44:01,829 --> 00:44:04,150 a la cadena 993 00:44:04,150 --> 00:44:05,489 que lo representa 994 00:44:05,489 --> 00:44:07,550 si hemos metido 37 995 00:44:07,550 --> 00:44:09,829 lo convierte a la cadena 37 996 00:44:09,829 --> 00:44:10,829 que representa 997 00:44:10,829 --> 00:44:13,090 y ahora ya que tiene la cadena 998 00:44:13,090 --> 00:44:14,530 la concatena con esta 999 00:44:14,530 --> 00:44:17,929 ¿vale? luego cuando el operador 1000 00:44:17,929 --> 00:44:20,010 más mezcla números y cadenas 1001 00:44:20,010 --> 00:44:21,989 la que tiene mayor 1002 00:44:21,989 --> 00:44:23,949 peso es la cadena, da igual que esté antes 1003 00:44:23,949 --> 00:44:25,110 o que esté después, da igual 1004 00:44:25,110 --> 00:44:27,710 aunque yo lo concatene en otro orden 1005 00:44:27,710 --> 00:44:29,469 la que tiene mayor peso es la cadena 1006 00:44:29,469 --> 00:44:32,289 y lo que hace es, saca el valor de la variable 1007 00:44:32,289 --> 00:44:33,429 512 1008 00:44:33,429 --> 00:44:35,869 y dice, pues voy a transformarlo 1009 00:44:35,869 --> 00:44:37,909 no me queda más remedio, a una cadena 1010 00:44:37,909 --> 00:44:39,650 que represente 512 1011 00:44:39,650 --> 00:44:41,570 que no es lo mismo 1012 00:44:41,570 --> 00:44:44,030 el número binario 512 1013 00:44:44,030 --> 00:44:45,230 que está dentro de n 1014 00:44:45,230 --> 00:44:46,889 el número binario 512 1015 00:44:46,889 --> 00:44:50,070 que la sucesión de caracteres asti 5, 1 y 2 1016 00:44:50,070 --> 00:44:51,389 son dos cosas muy distintas 1017 00:44:51,389 --> 00:44:53,829 pues esa conversión la hace 1018 00:44:53,829 --> 00:44:55,889 la máquina virtual, ahí, porque necesita 1019 00:44:55,889 --> 00:44:57,869 una cadena, la necesita, porque la cadena ha ganado 1020 00:44:57,869 --> 00:44:59,849 la necesita, pues se va 1021 00:44:59,849 --> 00:45:01,949 al número n, saca lo que hay dentro 1022 00:45:01,949 --> 00:45:03,789 y obtiene 1023 00:45:03,789 --> 00:45:06,150 los caracteres asti que representan 1024 00:45:06,150 --> 00:45:07,530 el numerito binario que hay ahí 1025 00:45:07,530 --> 00:45:08,969 512, lo que sea 1026 00:45:08,969 --> 00:45:11,590 y ahora ya lo concatena, ahora ya que ya lo tiene 1027 00:45:11,590 --> 00:45:14,030 convertido en cadena, concatena 1028 00:45:14,030 --> 00:45:15,949 y ya 1029 00:45:15,949 --> 00:45:17,750 esa concatenación lo asigna 1030 00:45:17,750 --> 00:45:19,789 a una variable de tipo compatible 1031 00:45:19,789 --> 00:45:21,110 tiene que ser cadena sí o sí 1032 00:45:21,110 --> 00:45:23,730 vale, tiene que ser cadena 1033 00:45:23,730 --> 00:45:25,869 sí o sí, y ahora ya 1034 00:45:25,869 --> 00:45:30,329 si mostramos cadena 1 1035 00:45:30,329 --> 00:45:31,550 pues esto nos dirá 1036 00:45:31,550 --> 00:45:33,829 el valor leído es 1037 00:45:33,829 --> 00:45:37,300 el que hayamos leído 1038 00:45:37,300 --> 00:45:40,300 vamos a comprobarlo 1039 00:45:40,300 --> 00:45:45,619 vale, me muestra el primero 1040 00:45:45,619 --> 00:45:47,460 que teníamos arriba, me muestra el segundo 1041 00:45:47,460 --> 00:45:49,320 me muestra el mensaje, efectivamente 1042 00:45:49,320 --> 00:45:51,519 se ha quedado esperando, porque aquí no aparece 1043 00:45:51,519 --> 00:45:53,059 el terminate de este ni nada 1044 00:45:53,059 --> 00:45:55,420 está ahí esperando, el programa no ha acabado, está esperando 1045 00:45:55,420 --> 00:45:57,300 vale, le meto un numerito 1046 00:45:57,300 --> 00:45:58,920 y ya está 1047 00:45:58,920 --> 00:46:01,639 y de eso me informa, el valor leído es 1048 00:46:01,639 --> 00:46:02,940 con catena 1049 00:46:02,940 --> 00:46:04,699 con la transformación 1050 00:46:04,699 --> 00:46:07,840 a cadena de caracteres 1051 00:46:07,840 --> 00:46:08,880 de ese número 1052 00:46:08,880 --> 00:46:12,260 y luego me muestra esto 1053 00:46:12,260 --> 00:46:16,039 luego este primer uso básico de cadenas 1054 00:46:16,039 --> 00:46:17,780 ya nos permite hacer programas 1055 00:46:17,780 --> 00:46:18,480 un poquito más 1056 00:46:18,480 --> 00:46:24,539 un poquito más prácticos 1057 00:46:24,539 --> 00:46:27,809 ¿vale? 1058 00:46:29,110 --> 00:46:30,429 entonces cuidado, no os liéis 1059 00:46:30,429 --> 00:46:33,550 que la máquina virtual haya necesitado 1060 00:46:33,550 --> 00:46:34,730 convertir esto a cadena 1061 00:46:34,730 --> 00:46:37,010 no significa para nada que la variable n 1062 00:46:37,010 --> 00:46:38,789 el valor que tenga haya cambiado 1063 00:46:38,789 --> 00:46:41,070 no, porque cuando se coge 1064 00:46:41,070 --> 00:46:43,469 un valor para construir una expresión 1065 00:46:43,469 --> 00:46:44,690 la máquina virtual 1066 00:46:44,690 --> 00:46:46,630 va a la variable y saca su valor 1067 00:46:46,630 --> 00:46:48,789 saca una copia y la variable se queda ahí 1068 00:46:48,789 --> 00:46:50,329 con lo que tenía tan feliz, no la toca 1069 00:46:50,329 --> 00:46:52,789 saca una copia de su valor 1070 00:46:52,789 --> 00:46:54,329 y hace todo lo que tenga que hacer 1071 00:46:54,329 --> 00:46:55,909 para construir el resultado 1072 00:46:55,909 --> 00:46:57,909 ¿vale? 1073 00:46:58,530 --> 00:47:01,010 pero lo que tenía esa variable ahí sigue, no se toca 1074 00:47:01,010 --> 00:47:02,829 ese valor no va a cambiar 1075 00:47:02,829 --> 00:47:04,809 hasta que no le hagamos una asignación 1076 00:47:04,809 --> 00:47:06,630 a ella, hasta que no hagamos un n igual 1077 00:47:06,630 --> 00:47:08,809 ¿vale? 1078 00:47:08,849 --> 00:47:10,869 eso tiene que estar claro, cuando las variables 1079 00:47:10,869 --> 00:47:13,190 aparecen en la parte derecha en las expresiones 1080 00:47:13,190 --> 00:47:14,969 se coge una copia 1081 00:47:14,969 --> 00:47:16,409 de su valor para operar 1082 00:47:16,409 --> 00:47:18,929 pero la variable sigue teniendo lo que tuviera y eso no ha 1083 00:47:18,929 --> 00:47:20,349 cambiado, el n sigue teniendo 1084 00:47:20,349 --> 00:47:21,969 el valor numérico 875 1085 00:47:21,969 --> 00:47:23,769 pero la máquina virtual 1086 00:47:23,769 --> 00:47:26,369 ha cogido una copia del 875 1087 00:47:26,369 --> 00:47:29,010 lo ha transformado en la cadena 1088 00:47:29,010 --> 00:47:31,269 de caracteres así 8, 7 y 5 1089 00:47:31,269 --> 00:47:32,690 lo ha concatenado 1090 00:47:32,690 --> 00:47:34,670 y ha hecho todo eso para obtener un valor 1091 00:47:34,670 --> 00:47:36,010 y asignárselo a cadena 1 1092 00:47:36,010 --> 00:47:37,489 ¿vale? 1093 00:47:39,969 --> 00:47:40,989 vale, pues 1094 00:47:40,989 --> 00:47:42,929 sí 1095 00:47:42,929 --> 00:47:45,269 aquí 1096 00:47:45,269 --> 00:47:49,269 sí, a ver, lo puedes poner 1097 00:47:49,269 --> 00:47:51,210 como es una declaración de variable más 1098 00:47:51,210 --> 00:47:52,650 lo puedes poner en cualquier sitio 1099 00:47:52,650 --> 00:47:55,250 antes de usarlo, por supuesto, antes de usarlo 1100 00:47:55,250 --> 00:47:56,369 podría haber puesto aquí arriba 1101 00:47:56,369 --> 00:47:59,269 pero bueno, es más fácil para no meter 1102 00:47:59,269 --> 00:48:01,230 cosas raras en medio, si uno sabe 1103 00:48:01,230 --> 00:48:03,150 que va a usar el escáner, lo pones en la primera línea 1104 00:48:03,150 --> 00:48:04,150 y ya está 1105 00:48:04,150 --> 00:48:06,909 vale, vamos a parar aquí 1106 00:48:06,909 --> 00:48:08,170 un momentito entonces