1 00:00:00,880 --> 00:00:12,500 Venga, pues a ver, insisto. Obviamente tiene bastante interés que los que no lo hayáis clavado especialmente, los que les haya resultado facilísimo y lo hayáis clavado, pues no. 2 00:00:13,039 --> 00:00:15,900 Pero los que no, pues vayáis siguiendo la corrección. 3 00:00:16,519 --> 00:00:16,780 Claro. 4 00:00:18,559 --> 00:00:19,160 Leche. 5 00:00:21,980 --> 00:00:23,160 Vale, pues venga. 6 00:00:25,179 --> 00:00:27,059 Vamos a empezarlo, ¿vale? 7 00:00:35,619 --> 00:00:44,539 a ver, Andoni 8 00:00:44,539 --> 00:00:45,380 y Moisés 9 00:00:45,380 --> 00:00:46,979 os calláis 10 00:00:46,979 --> 00:00:51,079 ¿qué ha pasado? 11 00:00:54,759 --> 00:00:56,140 que Moisés no estaba haciendo nada 12 00:00:56,140 --> 00:00:58,359 dado la vuelta 13 00:00:58,359 --> 00:01:01,179 señándome ahí el torso 14 00:01:01,179 --> 00:01:02,280 digo, la espalda 15 00:01:05,620 --> 00:01:08,859 A ver, así estaba, ha dado la vuelta 16 00:01:08,859 --> 00:01:17,079 Eh, no, pero os lo paso luego 17 00:01:17,079 --> 00:01:23,260 Vale, silencio 18 00:01:23,260 --> 00:01:26,159 A ver, silencio 19 00:01:26,159 --> 00:01:28,120 Venga, pues entonces 20 00:01:28,120 --> 00:01:30,099 Nosotros lo vamos a ir haciendo como se supone 21 00:01:30,099 --> 00:01:32,579 Que lo ibais haciendo vosotros en el examen 22 00:01:32,579 --> 00:01:34,760 Y por tanto encontrándoos las cosas raras 23 00:01:34,760 --> 00:01:35,959 Diciendo, ¿y ahora qué hago con esto? 24 00:01:36,099 --> 00:01:37,299 No es que lo vaya a hacer yo así 25 00:01:37,299 --> 00:01:38,579 Ah, lo haces en el examen, perfecto 26 00:01:38,579 --> 00:01:40,620 no, puede que haga alguna burrada 27 00:01:40,620 --> 00:01:42,599 también, como seguramente a lo mejor 28 00:01:42,599 --> 00:01:44,120 hicisteis vosotros 29 00:01:44,120 --> 00:01:45,400 díganme 30 00:01:45,400 --> 00:01:50,939 ¿por qué? por el 2, si el 2 lo hacemos en un pijas 31 00:01:50,939 --> 00:01:53,739 ¿para qué? ¿para animarte? 32 00:01:55,019 --> 00:01:56,400 ¿quieres empezar por el 2 para animarte? 33 00:01:57,260 --> 00:01:58,379 a ver, por el 1 34 00:01:58,379 --> 00:02:00,420 que tenéis que estar más frescos mentalmente 35 00:02:00,420 --> 00:02:01,019 ¿vale? 36 00:02:03,159 --> 00:02:04,159 venga, pues ya está 37 00:02:04,159 --> 00:02:06,640 aquí se supone que uno lo leía 38 00:02:06,640 --> 00:02:08,240 hasta que lo entendía, yo os lo leí 39 00:02:08,240 --> 00:02:10,080 de cabo a rabo para explicar bien 40 00:02:10,080 --> 00:02:11,740 cómo tenía que funcionar y de hecho 41 00:02:11,740 --> 00:02:14,120 os di bastantes pistas 42 00:02:14,120 --> 00:02:15,620 sobre cómo solucionar algunos problemas. 43 00:02:16,900 --> 00:02:18,139 Os expliqué algunas cosas 44 00:02:18,139 --> 00:02:18,879 sobre cómo 45 00:02:18,879 --> 00:02:21,539 podríais solucionar algunos problemas. 46 00:02:21,900 --> 00:02:23,500 Entonces, bueno, esa parte de entender 47 00:02:23,500 --> 00:02:25,520 cómo funciona y todo eso, 48 00:02:26,500 --> 00:02:28,219 pues uno ya la tiene hecha y ha entendido 49 00:02:28,219 --> 00:02:30,080 de qué va esto. Ahora ya empieza a programar 50 00:02:30,080 --> 00:02:31,900 porque ya ha entendido más o menos 51 00:02:31,900 --> 00:02:33,680 el conjunto del ejercicio de qué va. 52 00:02:34,599 --> 00:02:36,159 Entonces, cuando ya lo ha entendido, el conjunto 53 00:02:36,159 --> 00:02:37,939 del ejercicio de qué va y tiene en su cabeza 54 00:02:37,939 --> 00:02:40,180 un poquito, algunas ideas 55 00:02:40,180 --> 00:02:42,060 sobre el diseño, ya se puede 56 00:02:42,060 --> 00:02:44,000 empezar a programar, pero no se pone uno 57 00:02:44,000 --> 00:02:45,539 directamente a jimineas de código 58 00:02:45,539 --> 00:02:47,879 sin haber pasado esa fase, directamente 59 00:02:47,879 --> 00:02:50,000 venga, carta, me hago la carta, baraja 60 00:02:50,000 --> 00:02:52,360 me hago la baraja, no, se pone uno entero 61 00:02:52,360 --> 00:02:54,460 entiende en su conjunto 62 00:02:54,460 --> 00:02:56,020 se para a pensar un poco 63 00:02:56,020 --> 00:02:57,879 en él, luego ya dice, venga 64 00:02:57,879 --> 00:03:00,379 yo creo que esto más o menos va a tener este aspecto 65 00:03:00,379 --> 00:03:01,340 y ahora ya empieza 66 00:03:01,340 --> 00:03:03,860 venga, pues empezamos porque 67 00:03:03,860 --> 00:03:05,240 esa fase, repito, ya la hemos hecho 68 00:03:05,240 --> 00:03:07,719 pues hala, una carta 69 00:03:07,719 --> 00:03:10,939 Se caracteriza por el palo, que será un string 70 00:03:10,939 --> 00:03:13,860 Y el número de carta, que será un entero 71 00:03:13,860 --> 00:03:16,560 Pues ala, hacemos entonces eso 72 00:03:16,560 --> 00:03:19,699 Lo voy a poner todo en el mismo paquete 73 00:03:19,699 --> 00:03:20,620 Ejercicio 1 74 00:03:20,620 --> 00:03:22,680 Y así no voy a separar ni el main 75 00:03:22,680 --> 00:03:24,860 Ni el modelo de datos, ni nada 76 00:03:24,860 --> 00:03:27,240 ¡Los de atrás, callaos! 77 00:03:30,659 --> 00:03:31,639 ¿Cómo que no se ve? 78 00:03:32,780 --> 00:03:34,300 A ver, espérate un segundo 79 00:03:34,300 --> 00:03:39,129 A ver, carta 80 00:03:39,129 --> 00:03:40,550 vale 81 00:03:40,550 --> 00:03:46,590 ya está, carta 82 00:03:46,590 --> 00:03:49,289 vale, pues la carta tendrá 83 00:03:49,289 --> 00:03:51,069 hemos dicho, su palo, que como es 84 00:03:51,069 --> 00:03:53,310 oros, copas, espadas, bastos, pues tendrá que ser 85 00:03:53,310 --> 00:03:53,810 un string 86 00:03:53,810 --> 00:03:58,419 y su numerito 87 00:03:58,419 --> 00:04:07,139 aquí es donde caería 88 00:04:07,139 --> 00:04:08,259 que ni pintado 89 00:04:08,259 --> 00:04:10,860 el concepto, que a lo mejor os suena a algunos 90 00:04:10,860 --> 00:04:12,240 de 91 00:04:12,240 --> 00:04:15,099 tipo enumerado, pero como no lo hemos 92 00:04:15,099 --> 00:04:17,300 visto, pues no lo podemos usar, no lo hemos visto todavía 93 00:04:17,300 --> 00:04:19,199 o sea, un tipo enumerado es 94 00:04:19,199 --> 00:04:20,480 un tipo 95 00:04:20,480 --> 00:04:22,439 que solo tiene un conjunto finito de valores 96 00:04:22,439 --> 00:04:23,060 posibles 97 00:04:23,060 --> 00:04:26,360 y este es el caso, porque el palo 98 00:04:26,360 --> 00:04:28,180 solamente puede tener oros 99 00:04:28,180 --> 00:04:30,740 copas, espadas y bastos 100 00:04:30,740 --> 00:04:32,040 entonces hemos puesto un string 101 00:04:32,040 --> 00:04:34,639 el string no se adapta en realidad muy bien 102 00:04:34,639 --> 00:04:36,300 porque un string puede ser cualquier cosa 103 00:04:36,300 --> 00:04:38,620 también podría yo poner el palo de bastitos 104 00:04:38,620 --> 00:04:39,720 ¿vale? 105 00:04:40,060 --> 00:04:42,639 entonces lo ideal sería ahí hacer un tipo 106 00:04:42,639 --> 00:04:44,519 enumerado que se llaman, pero no lo hemos 107 00:04:44,519 --> 00:04:45,899 visto todavía, entonces 108 00:04:45,899 --> 00:04:47,779 obviamente no lo podemos incorporar 109 00:04:47,779 --> 00:04:57,399 Pero bueno, que os vaya sonando, un tipo enumerado es un tipo que restringe los posibles valores a un conjunto finito. 110 00:04:58,079 --> 00:05:03,839 Entonces los posibles valores de este queremos que sean oros, copas, espadas y bastos, solo eso, no queremos que sean más. 111 00:05:04,379 --> 00:05:06,560 Pues justo, esa es la definición de tipo enumerado. 112 00:05:07,500 --> 00:05:13,360 Un tipo enumerado es un tipo que solo tiene un conjunto finito de valores posibles. 113 00:05:13,360 --> 00:05:16,839 bueno, aquí lo ideal sería ponerlo 114 00:05:16,839 --> 00:05:18,560 pero como no lo hemos puesto, lo dejamos 115 00:05:18,560 --> 00:05:20,860 string, pues string, el palo es string 116 00:05:20,860 --> 00:05:22,399 vale, entonces aquí 117 00:05:22,399 --> 00:05:24,519 haríamos lo de siempre 118 00:05:24,519 --> 00:05:26,800 entonces aquí pues habríais hecho 119 00:05:26,800 --> 00:05:29,100 habréis hecho los getty set 120 00:05:29,100 --> 00:05:30,860 y seguramente 121 00:05:30,860 --> 00:05:32,560 pues hayáis hecho algún 122 00:05:32,560 --> 00:05:40,720 constructor y ya está 123 00:05:40,720 --> 00:05:41,680 entonces en principio 124 00:05:41,680 --> 00:05:44,319 pues uno lo deja así 125 00:05:44,319 --> 00:05:46,899 y luego según va avanzando 126 00:05:46,899 --> 00:05:48,660 a lo mejor tiene que volver aquí 127 00:05:48,660 --> 00:05:50,899 para decir, a ver, voy a usar carta en este tipo 128 00:05:50,899 --> 00:05:52,939 de colección. Entonces voy a 129 00:05:52,939 --> 00:05:54,939 necesitar un icon. Yo necesito... 130 00:05:54,939 --> 00:05:56,740 Vale, bueno, podéis añadir un toString. Bueno, 131 00:05:57,259 --> 00:05:59,000 en principio esta es la información básica. 132 00:05:59,720 --> 00:06:00,980 Luego uno, según va avanzando 133 00:06:00,980 --> 00:06:02,819 la aplicación, dice, ah, me interesa meter en 134 00:06:02,819 --> 00:06:04,920 carta este método. Bueno, pues entonces vuelve y lo mete. 135 00:06:05,279 --> 00:06:07,060 Pero ahora mismo lo podemos 136 00:06:07,060 --> 00:06:08,639 dejar así. ¿Vale? 137 00:06:09,319 --> 00:06:10,819 Bueno, pues uno sigue avanzando 138 00:06:10,819 --> 00:06:12,860 con la enunciada y dice, ya tengo carta. Vale. 139 00:06:13,699 --> 00:06:14,879 Baraja. Pues venga, 140 00:06:14,959 --> 00:06:16,120 vamos a hacer la siguiente clase. 141 00:06:16,120 --> 00:06:26,889 vale, la clase baraja nos dicen 142 00:06:26,889 --> 00:06:28,850 oye, la clase baraja se caracteriza 143 00:06:28,850 --> 00:06:30,829 solo por el 144 00:06:30,829 --> 00:06:33,089 conjunto de cartas que contiene la baraja 145 00:06:33,089 --> 00:06:34,730 que tiene que ser un set 146 00:06:34,730 --> 00:06:36,870 vale, pues 147 00:06:36,870 --> 00:06:38,810 entonces, la clase 148 00:06:38,810 --> 00:06:40,769 baraja se caracteriza 149 00:06:40,769 --> 00:06:42,990 solo, en principio, pues lo ponemos 150 00:06:42,990 --> 00:06:44,949 así, por el conjunto de cartas 151 00:06:44,949 --> 00:06:45,990 que tiene que ser un set 152 00:06:45,990 --> 00:06:53,660 de cartas, estas son 153 00:06:53,660 --> 00:06:54,939 las cartas de la baraja 154 00:06:54,939 --> 00:06:56,579 al nombre de la variable 155 00:06:56,579 --> 00:06:58,560 pues llamadla como mejor 156 00:06:58,560 --> 00:07:00,899 os apañéis 157 00:07:00,899 --> 00:07:01,720 entonces 158 00:07:01,720 --> 00:07:04,180 aquí como hemos dicho siempre 159 00:07:04,180 --> 00:07:06,740 cuando tenemos un tipo, una propiedad 160 00:07:06,740 --> 00:07:07,740 de tipo colección 161 00:07:07,740 --> 00:07:10,699 en ese punto la solemos 162 00:07:10,699 --> 00:07:12,600 instanciar, para aunque siga 163 00:07:12,600 --> 00:07:14,639 estando vacía, al menos 164 00:07:14,639 --> 00:07:16,699 no sea null, entonces sigue estando 165 00:07:16,699 --> 00:07:19,019 vacía, ya la rellenaré de cartas 166 00:07:19,019 --> 00:07:20,779 cuando este objeto aparezca 167 00:07:20,779 --> 00:07:22,980 o cuando la aplicación me diga, ya la rellenaré 168 00:07:22,980 --> 00:07:24,800 pero ahora mismo al menos la dejo instanciada 169 00:07:24,800 --> 00:07:26,220 para que no haya ahí un null 170 00:07:26,220 --> 00:07:28,879 que los null, pues pueden molestar 171 00:07:28,879 --> 00:07:31,279 si alguien se dedica a hacer un cartas.size 172 00:07:31,279 --> 00:07:33,560 por ejemplo, si hacen algo en cartas.size 173 00:07:33,560 --> 00:07:34,819 pues 174 00:07:34,819 --> 00:07:36,939 si no está inicializada, pues le sale 175 00:07:36,939 --> 00:07:39,199 un null pointer exception, y si está inicializada 176 00:07:39,199 --> 00:07:41,240 le sale 0, que es mucho mejor que te salga 177 00:07:41,240 --> 00:07:43,199 0 que un null pointer exception 178 00:07:43,199 --> 00:07:45,079 vale, bueno, lo bajo 179 00:07:45,079 --> 00:07:46,240 aquí para que se vea bien 180 00:07:46,240 --> 00:07:47,339 entonces 181 00:07:47,339 --> 00:07:50,139 este es el que hemos visto 182 00:07:50,139 --> 00:07:55,779 entonces, este de aquí 183 00:07:55,779 --> 00:07:56,879 importamos 184 00:07:56,879 --> 00:08:04,000 bueno, pues entonces ahora ya 185 00:08:04,000 --> 00:08:06,540 llegados a este punto, es cuando uno de repente 186 00:08:06,540 --> 00:08:08,319 tal cual 187 00:08:08,319 --> 00:08:10,600 tiene que hacer ya la conexión 188 00:08:10,600 --> 00:08:11,220 neuronal 189 00:08:11,220 --> 00:08:12,899 que dice 190 00:08:12,899 --> 00:08:16,560 en mi aplicación 191 00:08:16,560 --> 00:08:17,740 hay un haset 192 00:08:17,740 --> 00:08:20,519 de objetos 193 00:08:20,519 --> 00:08:21,139 carta 194 00:08:21,139 --> 00:08:24,399 pues para que un haset de objetos carta 195 00:08:24,399 --> 00:08:26,399 funcione correctamente 196 00:08:26,399 --> 00:08:28,319 en la clase 197 00:08:28,319 --> 00:08:30,480 carta tienen que estar declarados 198 00:08:30,480 --> 00:08:35,419 que métodos y el hash code 199 00:08:35,419 --> 00:08:37,399 entonces automáticamente 200 00:08:37,399 --> 00:08:38,659 desde el momento en que uno 201 00:08:38,659 --> 00:08:40,799 ve que en su aplicación 202 00:08:40,799 --> 00:08:43,139 en la clase que sea, da igual, en su aplicación 203 00:08:43,139 --> 00:08:44,460 entra en juego 204 00:08:44,460 --> 00:08:46,779 un hash set de objetos 205 00:08:46,779 --> 00:08:49,299 carta, para que el hash set funcione 206 00:08:49,299 --> 00:08:51,059 correctamente y haga 207 00:08:51,059 --> 00:08:52,799 los add detectando duplicados 208 00:08:52,799 --> 00:08:54,159 funcione con los remove 209 00:08:54,159 --> 00:08:57,039 porque si no hay, funcione con el 210 00:08:57,039 --> 00:08:58,960 contains para que sus métodos funcionen 211 00:08:58,960 --> 00:09:00,919 como hemos dicho mil veces 212 00:09:00,919 --> 00:09:03,080 en esta clase tiene que estar 213 00:09:03,080 --> 00:09:05,159 el hascod y el equals, porque si no 214 00:09:05,159 --> 00:09:06,820 el remove, el método equals no 215 00:09:06,820 --> 00:09:09,139 le va a funcionar, y el método contains tampoco 216 00:09:09,139 --> 00:09:11,059 porque va a tirar del hascod y el equals 217 00:09:11,059 --> 00:09:13,059 de object, y eso son por dirección de 218 00:09:13,059 --> 00:09:14,639 memoria, no son por propiedades 219 00:09:14,639 --> 00:09:17,100 pues entonces aquí rápidamente, en cuanto uno 220 00:09:17,100 --> 00:09:18,580 hace esto, hace ya la conexión neuronal 221 00:09:18,580 --> 00:09:19,759 y se va a carta 222 00:09:19,759 --> 00:09:22,919 y eso no lo habéis hecho prácticamente nadie 223 00:09:22,919 --> 00:09:25,039 el hascod y el equals en 224 00:09:25,039 --> 00:09:26,840 carta ha sido una rareza 225 00:09:26,840 --> 00:09:30,539 y esto sí que no es de pensar 226 00:09:30,539 --> 00:09:31,779 esto es de 227 00:09:31,779 --> 00:09:34,559 pues a ver, de alguna manera he estudiado y he trabajado 228 00:09:34,559 --> 00:09:35,259 no es de pensar 229 00:09:35,259 --> 00:09:36,940 pero vamos, no 230 00:09:36,940 --> 00:09:40,379 os echo broncas, lo que os trato 231 00:09:40,379 --> 00:09:42,519 es de incidir en las 232 00:09:42,519 --> 00:09:42,919 cosas 233 00:09:42,919 --> 00:09:46,200 venga, pues entonces 234 00:09:46,200 --> 00:09:49,389 ahora 235 00:09:49,389 --> 00:09:52,269 cuando decidimos el 236 00:09:52,269 --> 00:09:53,169 jasco de equals 237 00:09:53,169 --> 00:09:56,210 o sea, antes de ponerlo, ahora es cuando nos hacemos la 238 00:09:56,210 --> 00:09:57,870 pregunta, vamos a ver 239 00:09:57,870 --> 00:10:00,529 ¿qué propiedades marcan la unicidad 240 00:10:00,529 --> 00:10:01,190 de mi carta? 241 00:10:01,190 --> 00:10:06,269 El palo, el número, la combinación de los dos 242 00:10:06,269 --> 00:10:10,629 En este caso, la combinación de los dos 243 00:10:10,629 --> 00:10:14,690 Es decir, dos cartas con el mismo palo no tienen por qué ser la misma 244 00:10:14,690 --> 00:10:17,429 Puede ser el 3 de oros y el 3 de copas 245 00:10:17,429 --> 00:10:21,889 Y dos cartas con el mismo número no tienen por qué ser la misma 246 00:10:21,889 --> 00:10:24,549 Puede ser el 3 de oros y el 3 de copas 247 00:10:24,549 --> 00:10:26,190 entonces 248 00:10:26,190 --> 00:10:28,950 dos cartas van a ser iguales 249 00:10:28,950 --> 00:10:30,309 solo si, si tienen 250 00:10:30,309 --> 00:10:32,210 el mismo palo y el mismo número 251 00:10:32,210 --> 00:10:34,710 entonces sí, el 3 de copas 252 00:10:34,710 --> 00:10:36,889 y el 3 de copas son la misma carta 253 00:10:36,889 --> 00:10:39,090 aunque estén en direcciones de memoria distintas 254 00:10:39,090 --> 00:10:40,750 3 de copas y 3 de copas 255 00:10:40,750 --> 00:10:42,370 son la misma, sin embargo 256 00:10:42,370 --> 00:10:43,870 3 de oros y 3 de copas, ¿no? 257 00:10:45,029 --> 00:10:46,909 y 3 de copas y 7 de copas 258 00:10:46,909 --> 00:10:48,730 tampoco, luego para que 259 00:10:48,730 --> 00:10:50,730 dos cartas sean la misma tienen que tener 260 00:10:50,730 --> 00:10:52,289 el mismo palo y el mismo número 261 00:10:52,289 --> 00:10:55,090 entonces ahora, una vez que uno 262 00:10:55,090 --> 00:10:56,870 ya ha caracterizado eso 263 00:10:56,870 --> 00:10:58,830 ahora ya hace el hashcode y el equals 264 00:10:58,830 --> 00:11:00,509 basada en las dos propiedades 265 00:11:00,509 --> 00:11:03,070 ¿vale? cuando hacíamos el hashcode 266 00:11:03,070 --> 00:11:04,690 y el equals basado en una única propiedad 267 00:11:04,690 --> 00:11:06,029 como nif, como código 268 00:11:06,029 --> 00:11:08,809 es porque dos objetos con mismo nif eran el mismo 269 00:11:08,809 --> 00:11:10,870 o dos objetos con mismo código eran el mismo 270 00:11:10,870 --> 00:11:12,909 pero es que aquí para que dos cartas 271 00:11:12,909 --> 00:11:14,990 sean la misma, tienen que tener el mismo 272 00:11:14,990 --> 00:11:16,870 palo y el mismo número 273 00:11:16,870 --> 00:11:17,529 las dos cosas 274 00:11:17,529 --> 00:11:19,149 pues entonces 275 00:11:19,149 --> 00:11:21,269 hacemos aquí 276 00:11:21,269 --> 00:11:23,289 el Hasco de Equals 277 00:11:23,289 --> 00:11:25,049 basado en las dos propiedades 278 00:11:25,049 --> 00:11:28,429 ala 279 00:11:28,429 --> 00:11:31,649 entonces ya podemos volver aquí ya tranquilos 280 00:11:31,649 --> 00:11:33,389 ya hemos hecho 281 00:11:33,389 --> 00:11:34,870 un HashSet de objetos carta 282 00:11:34,870 --> 00:11:36,870 y esto ya todos sus métodos 283 00:11:36,870 --> 00:11:38,809 remove, contains, add 284 00:11:38,809 --> 00:11:40,710 van a funcionar de forma coherente 285 00:11:40,710 --> 00:11:42,269 con las cartas 286 00:11:42,269 --> 00:11:44,990 si yo tengo en mi baraja un 3 de copas 287 00:11:44,990 --> 00:11:46,470 e intento hacer un add 288 00:11:46,470 --> 00:11:48,350 de un 3 de copas, no lo va a hacer 289 00:11:48,350 --> 00:11:51,149 no lo va a hacer porque ya tengo el Hasco de Equals 290 00:11:51,149 --> 00:11:54,029 antes de tener el hashcode del equal, si yo tenía un 3 de copas 291 00:11:54,029 --> 00:11:55,950 en mi baraja y le hago un add 292 00:11:55,950 --> 00:11:57,789 de otro 3 de copas, lo va a meter también 293 00:11:57,789 --> 00:12:00,210 porque le va a parecer 294 00:12:00,210 --> 00:12:02,289 que son distintos, porque no tiene el hashcode 295 00:12:02,289 --> 00:12:03,850 del equal y no queremos eso, no queremos 296 00:12:03,850 --> 00:12:05,289 dos 3 de copas en la baraja 297 00:12:05,289 --> 00:12:07,769 ¿vale? bueno, pues entonces 298 00:12:07,769 --> 00:12:09,549 fundamental, esto 299 00:12:09,549 --> 00:12:10,850 fundamental 300 00:12:10,850 --> 00:12:13,909 y basado en las propiedades 301 00:12:13,909 --> 00:12:15,690 que lo identifican de forma única 302 00:12:15,690 --> 00:12:18,210 vale, pues 303 00:12:18,210 --> 00:12:19,710 nada, esta es nuestra baraja 304 00:12:19,710 --> 00:12:23,750 Entonces, podemos hacer el get set de esto de aquí 305 00:12:23,750 --> 00:12:30,730 Y ahora, dejo el constructor después 306 00:12:30,730 --> 00:12:33,269 Porque si uno lee lo que viene por aquí, le dice 307 00:12:33,269 --> 00:12:34,830 A ver, cuidado 308 00:12:34,830 --> 00:12:37,870 El constructor sin parámetros lo vas a hacer 309 00:12:37,870 --> 00:12:39,009 Para que dentro de él 310 00:12:39,009 --> 00:12:42,250 Se construya una baraja de 40 cartas 311 00:12:42,250 --> 00:12:46,230 Porque como todas las barajas en el momento inicial 312 00:12:46,230 --> 00:12:48,789 Sabemos las propiedades que van a tener 313 00:12:48,789 --> 00:12:51,289 Todas las barajas, cuando inician 314 00:12:51,289 --> 00:12:53,529 En esta aplicación concreta, van a ser 315 00:12:53,529 --> 00:12:55,629 40 capas de cartas 316 00:12:55,629 --> 00:12:57,529 del 1 al 10 de cada palo 317 00:12:57,529 --> 00:13:00,409 hay otros objetos que cuando se crean 318 00:13:00,409 --> 00:13:02,330 cada uno se crea con propiedades distintas 319 00:13:02,330 --> 00:13:04,389 en el arranque, yo creo un objeto alumno 320 00:13:04,389 --> 00:13:06,230 y uno se creará rubio, y otro no, y otro no sé qué 321 00:13:06,230 --> 00:13:08,509 pero aquí cada vez que yo creo una baraja 322 00:13:08,509 --> 00:13:10,350 todas se crean iguales 323 00:13:10,350 --> 00:13:11,590 40 cartas 324 00:13:11,590 --> 00:13:13,830 entonces el constructor 325 00:13:13,830 --> 00:13:16,389 que ya haga esa construcción en el inicio 326 00:13:16,389 --> 00:13:18,269 es lo que me está diciendo 327 00:13:18,269 --> 00:13:20,409 bueno pues nada, hacemos aquí 328 00:13:20,409 --> 00:13:22,309 el constructor sin parámetros 329 00:13:22,309 --> 00:13:23,870 Como me habían dicho 330 00:13:23,870 --> 00:13:27,250 El constructor de baraja 331 00:13:27,250 --> 00:13:30,070 Y ahora aquí se trata de meter las 10 cartas 332 00:13:30,070 --> 00:13:31,669 ¿Vale? 333 00:13:31,710 --> 00:13:33,210 Pues entonces, aquí ya 334 00:13:33,210 --> 00:13:36,370 A ver 335 00:13:36,370 --> 00:13:39,230 Veo de todo, pero es que 336 00:13:39,230 --> 00:13:42,649 Se trata de no ser vago 337 00:13:42,649 --> 00:13:44,610 Y no hacer esto 338 00:13:44,610 --> 00:13:46,070 Que se supone que sois programadores 339 00:13:46,070 --> 00:13:48,289 Es decir 340 00:13:48,289 --> 00:13:51,110 Se supone, ¿no? 341 00:13:51,149 --> 00:13:51,750 Lo sois 342 00:13:51,750 --> 00:13:56,679 Es decir 343 00:13:56,679 --> 00:13:58,840 no se trata 344 00:13:58,840 --> 00:14:00,620 de escribir esta línea 345 00:14:00,620 --> 00:14:02,879 40 veces 346 00:14:02,879 --> 00:14:04,340 40 veces 347 00:14:04,340 --> 00:14:06,679 y en cada una de ellas cambiar esto 348 00:14:06,679 --> 00:14:08,200 ahora otras 10 349 00:14:08,200 --> 00:14:10,759 copas 1, copas 2, otras 10 350 00:14:10,759 --> 00:14:11,460 hombre 351 00:14:11,460 --> 00:14:14,700 que funciona así, pero es que 352 00:14:14,700 --> 00:14:15,960 sois programadores 353 00:14:15,960 --> 00:14:18,519 no escribáis 40 líneas 354 00:14:18,519 --> 00:14:19,639 para qué están los bucles 355 00:14:19,639 --> 00:14:23,139 y si la baraja es una baraja de 300 cartas 356 00:14:24,740 --> 00:14:26,100 de esas raras de rol 357 00:14:26,100 --> 00:14:29,539 Pues 300 líneas 358 00:14:29,539 --> 00:14:32,000 Entonces, hombre, para eso están los bucles 359 00:14:32,000 --> 00:14:34,139 Entonces, hombre, a ver 360 00:14:34,139 --> 00:14:35,399 Se puede hacer 361 00:14:35,399 --> 00:14:37,659 Desde lo más reducido de todo 362 00:14:37,659 --> 00:14:38,799 Hasta intermedio 363 00:14:38,799 --> 00:14:41,740 Lo más natural, pues a lo mejor es hacerse 4 bucles 364 00:14:41,740 --> 00:14:43,480 Lo que os ha salido a casi todos 365 00:14:43,480 --> 00:14:46,200 Es hacer 4 bucles for que interen con esto 366 00:14:46,200 --> 00:14:47,960 El primer bucle for para oros 367 00:14:47,960 --> 00:14:50,659 El segundo para copas 368 00:14:50,659 --> 00:14:52,299 Vale, eso sería una opción 369 00:14:52,299 --> 00:14:54,120 Bueno, ya intermedia 370 00:14:54,120 --> 00:14:55,720 No esta, por ejemplo 371 00:14:55,720 --> 00:14:57,759 Las voy a hacer las dos 372 00:14:57,759 --> 00:14:59,419 Pues para que nos sirva todo esto 373 00:14:59,419 --> 00:15:00,659 Como repaso incluso 374 00:15:00,659 --> 00:15:02,779 Básico desde el principio 375 00:15:02,779 --> 00:15:26,429 Vale, pues bueno 376 00:15:26,429 --> 00:15:28,090 Repetir este bucle cuatro veces 377 00:15:28,090 --> 00:15:29,549 Vale, vale, tampoco ya 378 00:15:29,549 --> 00:15:31,669 Es algo un poquito más profesional realmente 379 00:15:31,669 --> 00:15:39,100 Y es un poco lo que 380 00:15:39,100 --> 00:15:40,879 Esperábamos que hicierais 381 00:15:40,879 --> 00:15:41,740 Pues la mayoría 382 00:15:41,740 --> 00:16:02,340 Bueno, pues este constructor 383 00:16:02,340 --> 00:16:03,820 Vale, bueno, es decente 384 00:16:03,820 --> 00:16:05,240 Es decente 385 00:16:05,240 --> 00:16:06,779 rellena con 386 00:16:06,779 --> 00:16:09,139 40 cartas 387 00:16:09,139 --> 00:16:11,679 10 de oros, 10 de copas, 10 de espaldas y 10 de vasos 388 00:16:11,679 --> 00:16:12,740 pero insisto 389 00:16:12,740 --> 00:16:15,299 este add funciona 390 00:16:15,299 --> 00:16:17,519 si se ha hecho el hascode y el equals 391 00:16:17,519 --> 00:16:19,139 funciona correctamente 392 00:16:19,139 --> 00:16:21,759 si no se ha hecho el hascode y el equals 393 00:16:21,759 --> 00:16:23,539 y si yo aquí me he equivocado 394 00:16:23,539 --> 00:16:24,960 y 395 00:16:24,960 --> 00:16:27,720 hago dos veces este for por ejemplo 396 00:16:27,720 --> 00:16:30,120 no me va a detectar los duplicados 397 00:16:30,120 --> 00:16:31,940 y me va a meter dos veces la misma 398 00:16:31,940 --> 00:16:34,740 y si hemos hecho un hasset 399 00:16:34,740 --> 00:16:36,600 Precisamente es porque no queremos duplicar 400 00:16:36,600 --> 00:16:38,080 ¿Vale? 401 00:16:39,460 --> 00:16:40,639 Bueno, entonces, a ver 402 00:16:40,639 --> 00:16:42,419 Si queremos hacerlo más profesional todavía 403 00:16:42,419 --> 00:16:43,559 Hacemos, hombre, cuatro for 404 00:16:43,559 --> 00:16:46,720 Y si me hago otro for que lo contenga iterando 405 00:16:46,720 --> 00:16:48,679 Por oros, copas, espadas y bastos 406 00:16:48,679 --> 00:16:50,620 Pues eso sería todavía mucho más bonito 407 00:16:50,620 --> 00:16:51,639 ¿No? 408 00:16:52,700 --> 00:16:53,600 Por ejemplo 409 00:16:53,600 --> 00:16:56,179 ¿Qué otra versión podríamos hacer? 410 00:16:56,840 --> 00:16:58,100 Nos vamos a hacer un string 411 00:16:58,100 --> 00:17:00,500 Una raíz de string 412 00:17:00,500 --> 00:17:02,539 Con los cuatro palos 413 00:17:02,539 --> 00:17:06,150 Así 414 00:17:06,150 --> 00:17:26,789 vale, a ver 415 00:17:26,789 --> 00:17:29,529 ah, es que aquí me falta este 416 00:17:29,529 --> 00:17:31,569 vale, nos vamos a hacer 417 00:17:31,569 --> 00:17:33,529 un string con los cuatro 418 00:17:33,529 --> 00:17:35,190 palos, vale, recordad 419 00:17:35,190 --> 00:17:36,829 no olvidéis que esto era una forma 420 00:17:36,829 --> 00:17:38,950 en la cual uno podía 421 00:17:38,950 --> 00:17:40,789 cuando declaraba un array 422 00:17:40,789 --> 00:17:42,549 y en el momento de declararlo solo 423 00:17:42,549 --> 00:17:45,269 una vez que estaba declarado ya no puedes asignarle un valor 424 00:17:45,269 --> 00:17:46,109 de este tipo 425 00:17:46,109 --> 00:17:49,069 recordad que cuando uno declaraba un array 426 00:17:49,069 --> 00:17:50,569 de lo que fuera, podía 427 00:17:50,569 --> 00:17:52,869 crearlo e inicializarlo 428 00:17:52,869 --> 00:17:55,410 todo junto a la vez, poniendo entre llaves 429 00:17:55,410 --> 00:17:56,470 los valores que dirán la gana 430 00:17:56,470 --> 00:17:59,170 entonces si hacemos esto 431 00:17:59,170 --> 00:18:01,430 ahora podemos iterar por aquí 432 00:18:01,430 --> 00:18:03,549 y en cada parada 433 00:18:03,549 --> 00:18:05,549 a su vez hacer ya el bucle 434 00:18:05,549 --> 00:18:07,210 de dentro, entonces nos queda un código 435 00:18:07,210 --> 00:18:09,789 pues de bastantes menos líneas 436 00:18:09,789 --> 00:18:11,890 podríamos hacer esto 437 00:18:11,890 --> 00:18:19,329 podemos hacer 438 00:18:19,329 --> 00:18:21,309 vamos a iterar por los palos 439 00:18:21,309 --> 00:18:23,309 desde igual a 0 440 00:18:23,309 --> 00:18:25,730 mientras si sea menor que palos.led 441 00:18:25,730 --> 00:18:26,349 que es 4 442 00:18:26,349 --> 00:18:28,230 incrementando y 443 00:18:28,230 --> 00:18:30,670 Pues ahora ya sí que hacemos esto 444 00:18:30,670 --> 00:18:34,609 Bueno, me falta el for de dentro, claro 445 00:18:34,609 --> 00:18:37,009 Ahora hacemos 446 00:18:37,009 --> 00:18:40,680 Desde j igual a 1 447 00:18:40,680 --> 00:18:43,839 Mientras j sea menor o igual que 10 448 00:18:43,839 --> 00:18:46,220 Incrementando j 449 00:18:46,220 --> 00:18:49,319 Ahora ya sí que hacemos 450 00:18:49,319 --> 00:18:51,039 Pero aquí ponemos palos de i 451 00:18:51,039 --> 00:18:55,279 Y aquí j 452 00:18:55,279 --> 00:18:59,160 Vale, pues esta es otra versión de lo de arriba 453 00:18:59,160 --> 00:19:00,700 Que hace lo mismo 454 00:19:00,700 --> 00:19:04,640 Pero bueno, esta es un poquito más bonita 455 00:19:04,640 --> 00:19:08,759 ¿Vale? 456 00:19:09,119 --> 00:19:11,420 El bucle de arriba va pasando 457 00:19:11,420 --> 00:19:13,460 Por oros, copas, espadas y bastos 458 00:19:13,460 --> 00:19:14,599 Entonces, palos de ahí 459 00:19:14,599 --> 00:19:16,779 En la primera iteración es oros 460 00:19:16,779 --> 00:19:18,880 En las segundas copas, donde espadas y donde bastos 461 00:19:18,880 --> 00:19:21,579 Y ahora el de abajo, para cada palo en concreto 462 00:19:21,579 --> 00:19:23,380 Para cada palo crea la pieza 463 00:19:23,380 --> 00:19:24,039 ¿Vale? 464 00:19:26,670 --> 00:19:28,670 Entonces, bueno, hombre, esta más bonita que la de arriba 465 00:19:28,670 --> 00:19:31,910 Entonces voy a dejar en la corrección 466 00:19:31,910 --> 00:19:32,809 Puestas las dos 467 00:19:32,809 --> 00:19:35,329 Pero para que no se me... 468 00:19:35,329 --> 00:19:36,769 Porque en realidad 469 00:19:36,769 --> 00:19:40,170 aunque esté hecho dos veces 470 00:19:40,170 --> 00:19:42,690 si llamáis a este constructor 471 00:19:42,690 --> 00:19:44,990 esto no lo va a meter 472 00:19:44,990 --> 00:19:46,549 porque va a ver 473 00:19:46,549 --> 00:19:48,430 que esta carta está duplicada 474 00:19:48,430 --> 00:19:51,799 porque es un haset 475 00:19:51,799 --> 00:19:54,980 entonces yo voy a dejar los dos códigos 476 00:19:54,980 --> 00:19:55,579 puestos 477 00:19:55,579 --> 00:19:58,480 para cuando se suba la corrección 478 00:19:58,480 --> 00:19:59,819 veáis las dos versiones 479 00:19:59,819 --> 00:20:02,880 y no afecta al funcionamiento 480 00:20:02,880 --> 00:20:05,099 no afecta al funcionamiento 481 00:20:05,099 --> 00:20:06,900 precisamente por cómo funciona el haset 482 00:20:06,900 --> 00:20:09,079 Aquí ya hemos metido 40 cartas 483 00:20:09,079 --> 00:20:12,079 Y cuando aquí intentemos meterlas otra vez 484 00:20:12,079 --> 00:20:14,079 Como va a detectar que están duplicadas 485 00:20:14,079 --> 00:20:15,400 Porque el 1 de oro ya existe 486 00:20:15,400 --> 00:20:16,940 El 2 de oro ya existe 487 00:20:16,940 --> 00:20:18,359 El 1 de espadas ya existe 488 00:20:18,359 --> 00:20:20,900 Pues este add no va a meter nada 489 00:20:20,900 --> 00:20:22,740 Va a meter nada porque es un hash set 490 00:20:22,740 --> 00:20:24,180 Y hemos hecho el hasco de equals 491 00:20:24,180 --> 00:20:27,359 Si no hubiéramos hecho el hasco de equals 492 00:20:27,359 --> 00:20:28,279 Aquí en carta 493 00:20:28,279 --> 00:20:30,160 Si no lo hubiéramos hecho 494 00:20:30,160 --> 00:20:31,279 El hasco de equals 495 00:20:31,279 --> 00:20:35,220 Esto metería 80 cartas en la baraja 496 00:20:35,220 --> 00:20:35,819 80 497 00:20:35,819 --> 00:20:38,140 Luego este mismo código 498 00:20:38,140 --> 00:20:39,799 Mete 40 cartas 499 00:20:39,799 --> 00:20:40,700 O mete 80 500 00:20:40,700 --> 00:20:43,420 En función de si en carta hemos hecho 501 00:20:43,420 --> 00:20:44,720 Fasco de hijos o no hemos hecho 502 00:20:44,720 --> 00:20:48,410 ¿Vale? Importante entender eso 503 00:20:48,410 --> 00:20:50,170 Bueno, pues nada 504 00:20:50,170 --> 00:20:53,130 El constructor de baraja ya está 505 00:20:53,130 --> 00:20:56,789 Vale 506 00:20:56,789 --> 00:21:00,970 La baraja ya estaría 507 00:21:00,970 --> 00:21:03,329 Bueno 508 00:21:03,329 --> 00:21:06,490 Y ahora, la clase jugador 509 00:21:06,490 --> 00:21:09,809 Que es la tercera clase entidad 510 00:21:09,809 --> 00:21:11,369 Y luego ya viene el main 511 00:21:11,369 --> 00:21:13,670 Y la clase jugador, pues ya tiene tres métodos 512 00:21:13,670 --> 00:21:14,750 Entonces esta ya es más 513 00:21:14,750 --> 00:21:17,150 Más rarita 514 00:21:17,150 --> 00:21:35,529 Vale, pues venga 515 00:21:35,529 --> 00:21:37,049 La clase jugador 516 00:21:37,049 --> 00:21:38,849 ¿El jugador por qué se caracteriza? 517 00:21:39,930 --> 00:21:41,049 Pues el jugador se caracteriza 518 00:21:41,049 --> 00:21:52,710 Se caracteriza por su nombre, los puntos que tiene y las cartas que tiene en la mano en cada momento, que tiene que ser una lista. 519 00:21:54,109 --> 00:21:54,710 Silencio. 520 00:21:56,509 --> 00:22:14,140 Vale, pues entonces el jugador se caracteriza por su nombre, los puntos que tiene y las cartas que tiene, que va a ser una lista de cartas, nos han dicho. 521 00:22:17,000 --> 00:22:33,299 Entonces, estas son las cartas que tiene en la mano, cartas jugador, por ejemplo, y lo de siempre, no es mala costumbre, no es mala costumbre, pues ya dejar este objeto instanciado, vacío, sin cartas, pero instanciado. 522 00:22:33,299 --> 00:22:36,339 Entonces pues aquí lo que más le guste a uno 523 00:22:36,339 --> 00:22:39,380 Como lo que estamos 524 00:22:39,380 --> 00:22:41,480 El juego al final va a ser todo el rato 525 00:22:41,480 --> 00:22:44,799 Echar la carta, robar, echar, robar 526 00:22:44,799 --> 00:22:45,480 Echar, robar 527 00:22:45,480 --> 00:22:47,039 Pues cuando uno está echando y robando 528 00:22:47,039 --> 00:22:48,259 Echando y robando, echando y robando 529 00:22:48,259 --> 00:22:49,779 Un ArrayList es una locura 530 00:22:49,779 --> 00:22:51,799 Entonces pues siempre sería mejor un LinkedList 531 00:22:51,799 --> 00:22:55,730 Pues muy bien Moisés 532 00:22:55,730 --> 00:23:02,890 Vale 533 00:23:02,890 --> 00:23:06,170 Bueno entonces uno por sistema 534 00:23:06,170 --> 00:23:08,569 Por defecto haría ya GetSet y Constructores 535 00:23:08,569 --> 00:23:10,430 Y luego ya se pone en el trabajo duro 536 00:23:10,430 --> 00:23:12,049 Que es los métodos de esa clase 537 00:23:12,049 --> 00:23:13,910 Que esta ya sí que tiene métodos 538 00:23:13,910 --> 00:23:20,529 Venga, vamos a hacer un constructor 539 00:23:20,529 --> 00:23:24,900 Aquí es útil 540 00:23:24,900 --> 00:23:26,220 Con nombre y puntuación 541 00:23:26,220 --> 00:23:29,279 Y así podemos iniciar un jugador sin cartas 542 00:23:29,279 --> 00:23:31,099 ¿Vale? 543 00:23:31,119 --> 00:23:33,240 Tenemos un constructor con nombre y puntuación 544 00:23:33,240 --> 00:23:33,819 Solamente 545 00:23:33,819 --> 00:23:36,500 Y las cartas por ahora vacías 546 00:23:36,500 --> 00:23:38,339 Ahí ese constructor 547 00:23:38,339 --> 00:23:39,920 Pues siempre queda mejor, ¿no? 548 00:23:39,920 --> 00:23:41,180 Cuando una propiedad es colección 549 00:23:41,180 --> 00:23:44,259 Pues un constructor que inicialice todo 550 00:23:44,259 --> 00:23:45,299 Menos lo que es colección 551 00:23:45,299 --> 00:23:47,180 Y luego las colecciones ya se irán metiendo 552 00:23:47,180 --> 00:23:49,680 Pero bueno, que luego nos hace falta otro 553 00:23:49,680 --> 00:23:51,019 Según hagamos el programa vemos que 554 00:23:51,019 --> 00:23:52,539 Uy, me viene bien un constructor que meta esto 555 00:23:52,539 --> 00:23:54,099 Pues lo añadimos después, no pasa nada 556 00:23:54,099 --> 00:23:58,519 Venga, como hemos deshabilitado el constructor sin parámetros 557 00:23:58,519 --> 00:23:59,359 Pues vamos a hacerlo 558 00:23:59,359 --> 00:24:05,039 Que siempre viene bien también un constructor sin parámetros 559 00:24:05,039 --> 00:24:07,000 Get y set 560 00:24:07,000 --> 00:24:13,250 Y ala 561 00:24:13,250 --> 00:24:14,769 Estupendo 562 00:24:14,769 --> 00:24:17,289 Pero ahora ya viene lo complicado 563 00:24:17,289 --> 00:24:20,650 El jugador puede hacer tres cosas 564 00:24:20,650 --> 00:24:23,390 Mostrar las cartas que tiene en la mano 565 00:24:23,390 --> 00:24:25,869 Recibir una carta 566 00:24:25,869 --> 00:24:29,609 Y jugar una carta 567 00:24:29,609 --> 00:24:30,630 Puede hacer tres cosas 568 00:24:30,630 --> 00:24:32,849 Pues hay que programar esas tres cosas 569 00:24:32,849 --> 00:24:35,549 Vale, si uno le aleve que la más sencillita 570 00:24:35,549 --> 00:24:37,009 Es mostrar las cartas que tiene 571 00:24:37,009 --> 00:24:38,089 Porque recorre el linked list 572 00:24:38,089 --> 00:24:40,529 Entonces uno se quita cuanto antes este método 573 00:24:40,529 --> 00:24:41,950 Que es el más sencillito y ya está 574 00:24:41,950 --> 00:24:44,029 Pues venga 575 00:24:44,029 --> 00:24:46,910 Nos quitamos primero este método 576 00:24:46,910 --> 00:24:57,410 Bueno, pues a ver 577 00:24:57,410 --> 00:25:02,430 Aquí vamos a recorrer la lista y mostrarlo 578 00:25:02,430 --> 00:25:03,029 Pues ya está 579 00:25:03,029 --> 00:25:05,569 Como vamos a mostrar solamente un for each 580 00:25:05,569 --> 00:25:07,170 Que es muy sencillo 581 00:25:07,170 --> 00:25:13,190 A ver, María 582 00:25:13,190 --> 00:25:21,069 Bueno, pues luego lo hablamos 583 00:25:21,069 --> 00:25:23,349 Pero hombre, sed un poquito más finos y delicados 584 00:25:23,349 --> 00:25:25,589 A ver 585 00:25:25,589 --> 00:25:31,450 vale, entonces 586 00:25:31,450 --> 00:25:35,329 aquí es donde uno dice 587 00:25:35,329 --> 00:25:37,690 bueno, si me hago 588 00:25:37,690 --> 00:25:38,809 un toString en carta 589 00:25:38,809 --> 00:25:41,549 que no me cuesta nada porque lo escribo 590 00:25:41,549 --> 00:25:43,589 rapidísimo, pues le puedo pasar 591 00:25:43,589 --> 00:25:45,470 c directamente al system.println 592 00:25:45,470 --> 00:25:47,589 y bueno, pues me voy a carta, me hago un toString 593 00:25:47,589 --> 00:25:49,470 y así no tengo que hacer aquí c.get 594 00:25:49,470 --> 00:25:50,730 palo, c.get número 595 00:25:50,730 --> 00:25:53,170 pero bueno, que si uno hace aquí 596 00:25:53,170 --> 00:25:55,009 c.get palo, c.get número 597 00:25:55,009 --> 00:26:00,609 No, porque este método 598 00:26:00,609 --> 00:26:02,089 Ya llama directamente 599 00:26:02,089 --> 00:26:03,470 Cuando le pasas aquí un objeto 600 00:26:03,470 --> 00:26:06,250 Lo que hace es llamar al toString de ese objeto 601 00:26:06,250 --> 00:26:07,269 Y mostrar el resultado 602 00:26:07,269 --> 00:26:09,890 O sea, poner aquí c.toString y no ponerlo 603 00:26:09,890 --> 00:26:10,809 Es el mismo efecto 604 00:26:10,809 --> 00:26:14,150 Porque este método ya está programado para que llame al toString 605 00:26:14,150 --> 00:26:17,309 Vale, pues entonces 606 00:26:17,309 --> 00:26:21,390 A ver 607 00:26:21,390 --> 00:26:24,829 System.out.println 608 00:26:24,829 --> 00:26:27,210 es un método que necesita que aquí se le pase 609 00:26:27,210 --> 00:26:29,069 un string sí o sí, porque está así 610 00:26:29,069 --> 00:26:31,130 programado, entonces si le pasas algo que no es 611 00:26:31,130 --> 00:26:33,109 un string, él si entráramos 612 00:26:33,109 --> 00:26:35,289 dentro, él vería instance of no es string 613 00:26:35,289 --> 00:26:36,789 pues lo que hace es llamar a tu string 614 00:26:36,789 --> 00:26:37,990 que lo hace él automáticamente 615 00:26:37,990 --> 00:26:40,069 no hace falta que lo llamemos nosotros 616 00:26:40,069 --> 00:26:43,029 entonces 617 00:26:43,029 --> 00:26:45,170 pues bueno 618 00:26:45,170 --> 00:26:46,930 vamos a hacer aquí un toString 619 00:26:46,930 --> 00:26:51,470 bueno, que 620 00:26:51,470 --> 00:26:54,049 para mostrar la mano nos gusta este aspecto 621 00:26:54,049 --> 00:26:54,890 como no nos han dicho 622 00:26:54,890 --> 00:26:57,809 ningún aspecto para mostrar las cartas de la baraja 623 00:26:57,809 --> 00:26:59,349 pues bueno, dejamos esto y ya está 624 00:26:59,349 --> 00:27:00,329 y nos complicamos la vida 625 00:27:00,329 --> 00:27:03,410 bueno, pues el método mostrar mano 626 00:27:03,410 --> 00:27:05,250 ya está 627 00:27:05,250 --> 00:27:07,210 entonces con esto 628 00:27:07,210 --> 00:27:09,829 ya tenemos 629 00:27:09,829 --> 00:27:12,349 un dos y medio 630 00:27:12,349 --> 00:27:13,190 que parece que no 631 00:27:13,190 --> 00:27:15,410 pero es la mitad del aprobado 632 00:27:15,410 --> 00:27:17,089 con lo que hemos hecho hasta aquí 633 00:27:17,089 --> 00:27:19,930 que era fácil 634 00:27:19,930 --> 00:27:21,349 hasta aquí no había nada que pensar 635 00:27:21,349 --> 00:27:24,250 ahora ya sí que empiezan las cosas de pensar 636 00:27:24,250 --> 00:27:27,170 vale, pues venga, nos vamos al método 637 00:27:27,170 --> 00:27:28,349 recibir carta 638 00:27:28,349 --> 00:27:32,799 de jugador 639 00:27:32,799 --> 00:27:38,900 recibir carta 640 00:27:38,900 --> 00:27:44,779 este método recibe una carta 641 00:27:44,779 --> 00:27:46,500 como parámetro 642 00:27:46,500 --> 00:27:48,839 recibe una carta como parámetro 643 00:27:48,839 --> 00:27:50,559 vale, y quien nos dice esto 644 00:27:50,559 --> 00:27:52,099 que tiene que hacer 645 00:27:52,099 --> 00:27:54,759 tiene que, primero 646 00:27:54,759 --> 00:27:55,400 dos cosas 647 00:27:55,400 --> 00:27:59,160 esa carta, meterla en la lista de cartas del jugador 648 00:27:59,160 --> 00:28:01,660 hasta ahí facilísimo 649 00:28:01,660 --> 00:28:04,319 hasta ahí facilísimo 650 00:28:04,319 --> 00:28:07,940 las cartas de jugador 651 00:28:07,940 --> 00:28:09,799 están en la propiedad cartas jugador 652 00:28:09,799 --> 00:28:11,619 que está aquí arriba, en esta propiedad 653 00:28:11,619 --> 00:28:12,339 que es una lista 654 00:28:12,339 --> 00:28:14,460 pues meter en la lista 655 00:28:14,460 --> 00:28:16,539 es tan fácil como hacer esto 656 00:28:16,539 --> 00:28:19,700 entonces la primera parte del método 657 00:28:19,700 --> 00:28:21,480 es esta, ya está, cojo la carta 658 00:28:21,480 --> 00:28:22,480 y la lista de cartas 659 00:28:22,480 --> 00:28:24,380 pero ahora viene lo retorcido 660 00:28:24,380 --> 00:28:26,640 lo retorcido es, esa carta 661 00:28:26,640 --> 00:28:28,420 sale de algún lado 662 00:28:28,420 --> 00:28:30,579 sale de la baraja tuya 663 00:28:30,579 --> 00:28:32,339 que se habrá instanciado en el programa 664 00:28:32,339 --> 00:28:34,539 principal y de esa baraja tiene que salir 665 00:28:34,539 --> 00:28:36,039 en algún momento 666 00:28:36,039 --> 00:28:38,079 tienes que hacer, apañártelas 667 00:28:38,079 --> 00:28:40,440 para hacer un remove de este objeto 668 00:28:40,440 --> 00:28:42,140 carta de la baraja 669 00:28:42,140 --> 00:28:43,980 con la que está trabajando tu aplicación 670 00:28:43,980 --> 00:28:46,220 ¿vale? entonces esa es la parte 671 00:28:46,220 --> 00:28:47,240 complicada 672 00:28:47,240 --> 00:28:49,339 que era la otra mitad de este 673 00:28:49,339 --> 00:28:52,460 de este punto, entonces aquí es donde uno ya 674 00:28:52,460 --> 00:28:54,119 se queda desconcertado y piensa 675 00:28:54,119 --> 00:28:56,599 pero vamos a ver, la baraja de mi aplicación 676 00:28:56,599 --> 00:28:58,680 ¿dónde está? La baraja de mi 677 00:28:58,680 --> 00:29:00,660 aplicación está aquí 678 00:29:00,660 --> 00:29:02,559 en esta 679 00:29:02,559 --> 00:29:04,579 propiedad de este 680 00:29:04,579 --> 00:29:07,869 objeto, entonces 681 00:29:07,869 --> 00:29:10,569 se supone que mi aplicación 682 00:29:10,569 --> 00:29:12,250 instanciará ese objeto 683 00:29:12,250 --> 00:29:14,230 baraja, instanciará ese objeto baraja 684 00:29:14,230 --> 00:29:16,109 y al momento de instanciarlo ya se crea 685 00:29:16,109 --> 00:29:18,289 ¿vale? Pero yo aquí 686 00:29:18,289 --> 00:29:19,369 aquí 687 00:29:19,369 --> 00:29:22,190 no tengo opción 688 00:29:22,190 --> 00:29:23,990 de acceder a ese, ¿dónde estoy aquí? 689 00:29:24,690 --> 00:29:26,309 Yo aquí no tengo opción de acceder 690 00:29:26,309 --> 00:29:27,750 a la baraja, o sea, yo aquí tengo que 691 00:29:27,750 --> 00:29:30,410 de alguna manera acceder a las cartas de la baraja 692 00:29:30,410 --> 00:29:32,670 acceder para hacer esto 693 00:29:32,670 --> 00:29:34,329 es lo que me falta 694 00:29:34,329 --> 00:29:36,789 para hacer esto 695 00:29:36,789 --> 00:29:38,670 de alguna manera tengo que acceder 696 00:29:38,670 --> 00:29:39,769 a las cartas de la baraja 697 00:29:39,769 --> 00:29:40,890 y es lo que me falta 698 00:29:40,890 --> 00:29:42,430 entonces ahí es lo que os decía 699 00:29:42,430 --> 00:29:46,269 pues ahí dad la solución que creéis conveniente 700 00:29:46,269 --> 00:29:47,789 uno podía decir 701 00:29:47,789 --> 00:29:49,130 y era sencillo 702 00:29:49,130 --> 00:29:51,869 que os dije que si lo hacéis no pasaba nada tampoco 703 00:29:51,869 --> 00:29:53,809 pues voy a cambiar el diseño 704 00:29:53,809 --> 00:29:56,309 a este método que se le pase la baraja 705 00:29:56,309 --> 00:29:57,210 con la que se está jugando 706 00:29:57,210 --> 00:29:59,990 y no pasa nada, porque eso tiene sentido 707 00:29:59,990 --> 00:30:00,950 es algo que tiene sentido 708 00:30:00,950 --> 00:30:03,029 ¿vale? 709 00:30:03,990 --> 00:30:05,930 entonces os dije, tenéis que cambiar algún método 710 00:30:05,930 --> 00:30:08,369 para que el resultado 711 00:30:08,369 --> 00:30:10,309 final funcione, como tiene que funcionar 712 00:30:10,309 --> 00:30:11,670 no pasa nada, lo que queremos es ver 713 00:30:11,670 --> 00:30:14,289 qué soluciones vais dando, esa sería la más sencilla 714 00:30:14,289 --> 00:30:15,650 es decir, vale, a recibir carta 715 00:30:15,650 --> 00:30:18,230 dame la carta y dame la baraja 716 00:30:18,230 --> 00:30:20,009 de trabajo, me das la baraja 717 00:30:20,009 --> 00:30:28,240 de trabajo, me das la baraja 718 00:30:28,240 --> 00:30:30,200 de trabajo, además de la 719 00:30:30,200 --> 00:30:32,180 carta, y entonces yo ahora aquí 720 00:30:32,180 --> 00:30:33,619 lo único que tengo que hacer es 721 00:30:33,619 --> 00:30:35,920 baraja.getCartas 722 00:30:35,920 --> 00:30:37,039 y remove 723 00:30:37,039 --> 00:30:40,970 ¿vale? esto sería una posibilidad 724 00:30:40,970 --> 00:30:42,230 admisible 725 00:30:42,230 --> 00:30:45,569 y la más sencilla de entender 726 00:30:45,569 --> 00:30:46,349 en realidad 727 00:30:46,349 --> 00:30:49,089 insisto 728 00:30:49,089 --> 00:30:50,809 este add y este remove 729 00:30:50,809 --> 00:30:52,470 funcionan 730 00:30:52,470 --> 00:30:55,369 si en carta está el jascodiel 731 00:30:55,369 --> 00:30:57,529 igual, si no este remove no va a funcionar 732 00:30:57,529 --> 00:30:59,410 la carta no se va a ir de la baraja 733 00:30:59,410 --> 00:31:01,190 no se va a ir 734 00:31:01,190 --> 00:31:03,410 porque aunque tenga el mismo palo 735 00:31:03,410 --> 00:31:04,250 y el mismo número 736 00:31:04,250 --> 00:31:07,450 si no está el jasco de eliquas 737 00:31:07,450 --> 00:31:09,390 va a tirar del de object que va a ser 738 00:31:09,390 --> 00:31:11,329 pero no es la misma dirección de memoria, entonces no la quito 739 00:31:11,329 --> 00:31:13,130 entonces insisto por enesima vez 740 00:31:13,130 --> 00:31:15,349 todo esto con el haset 741 00:31:15,349 --> 00:31:17,049 todos estos add, remove 742 00:31:17,049 --> 00:31:19,029 tienen sentido y funcionan correctamente 743 00:31:19,029 --> 00:31:20,130 si está el jasco de eliquas 744 00:31:20,130 --> 00:31:21,690 entonces esta sería una posibilidad 745 00:31:21,690 --> 00:31:23,710 una posibilidad 746 00:31:23,710 --> 00:31:29,529 pero yo os comenté también otra 747 00:31:29,529 --> 00:31:31,630 cuando os estuve leyendo el enunciado 748 00:31:31,630 --> 00:31:43,509 vale, pues otra posibilidad sería 749 00:31:43,509 --> 00:31:45,269 que vosotros os ocurriera 750 00:31:45,269 --> 00:31:46,589 y dijerais, vamos a ver, 751 00:31:47,329 --> 00:31:49,170 mi aplicación solo tiene una baraja. 752 00:31:49,329 --> 00:31:49,910 Solo tiene una. 753 00:31:51,829 --> 00:31:53,589 Que es la baraja con la que juegan todos. 754 00:31:54,269 --> 00:31:55,109 Solo va a tener una. 755 00:31:55,710 --> 00:31:57,690 Solo voy a tener un objeto baraja 756 00:31:57,690 --> 00:31:59,329 y solo me interesa un set 757 00:31:59,329 --> 00:32:01,730 que es el que esté en ese único objeto baraja. 758 00:32:02,930 --> 00:32:03,650 Pues entonces, 759 00:32:03,849 --> 00:32:04,730 como solo va a haber una 760 00:32:04,730 --> 00:32:06,049 y solo me interesa una, 761 00:32:07,049 --> 00:32:08,470 si yo hago esto estático, 762 00:32:09,650 --> 00:32:11,269 pues gano un mundo de posibilidades. 763 00:32:12,250 --> 00:32:13,269 Porque al hacer esto estático, 764 00:32:13,269 --> 00:32:15,289 estático, ya puedo 765 00:32:15,289 --> 00:32:17,049 acceder desde cualquier sitio 766 00:32:17,049 --> 00:32:19,509 a través del nombre de la clase 767 00:32:19,509 --> 00:32:21,150 sin necesidad de haber 768 00:32:21,150 --> 00:32:23,029 instanciado ningún objeto ni nada. 769 00:32:25,490 --> 00:32:26,210 ¿Vale? Pues entonces, 770 00:32:26,529 --> 00:32:28,710 ¿qué es la otra cosa que os...? 771 00:32:31,230 --> 00:32:31,869 Entonces, si lo hacemos 772 00:32:31,869 --> 00:32:32,410 static, 773 00:32:34,069 --> 00:32:35,869 lo que pasa es que si no 774 00:32:35,869 --> 00:32:36,930 cambiamos el private, 775 00:32:37,529 --> 00:32:39,990 hay que acceder a través del get. 776 00:32:40,710 --> 00:32:41,950 Entonces, había varias opciones. 777 00:32:42,549 --> 00:32:44,150 O lo ponéis public para acceder 778 00:32:44,150 --> 00:32:46,150 directamente con baraja.cartas 779 00:32:46,150 --> 00:32:47,710 o 780 00:32:47,710 --> 00:32:50,410 al ser este static 781 00:32:50,410 --> 00:32:51,730 el get y el set 782 00:32:51,730 --> 00:32:54,190 se convierten en static directamente 783 00:32:54,190 --> 00:32:55,690 ¿vale? 784 00:32:57,910 --> 00:32:58,589 entonces 785 00:32:58,589 --> 00:33:01,930 o bien ponéis aquí static 786 00:33:01,930 --> 00:33:06,500 y al poner aquí 787 00:33:06,500 --> 00:33:08,059 static uno podría ahora 788 00:33:08,059 --> 00:33:08,980 hacer esto 789 00:33:08,980 --> 00:33:12,680 otra posibilidad 790 00:33:12,680 --> 00:33:13,859 vamos a ver 791 00:33:13,859 --> 00:33:16,819 y ya nos vamos con esto 792 00:33:16,819 --> 00:33:20,740 Recibir carta 793 00:33:20,740 --> 00:33:32,140 Vale, pues otra posibilidad 794 00:33:32,140 --> 00:33:35,940 Añadir la carta 795 00:33:35,940 --> 00:33:36,500 Es lo mismo 796 00:33:36,500 --> 00:33:39,819 Y ahora yo ya puedo acceder tranquilamente a la baraja 797 00:33:39,819 --> 00:33:40,539 De esta manera 798 00:33:40,539 --> 00:33:43,940 Baraja.getCartas.remove 799 00:33:44,460 --> 00:33:47,480 Y ala, ya tengo el método hecho 800 00:33:47,480 --> 00:33:50,019 Vale, he podido acceder 801 00:33:50,019 --> 00:33:51,220 Porque es estático 802 00:33:51,220 --> 00:33:52,720 Un segundo y ya nos vamos 803 00:33:52,720 --> 00:33:54,619 Lo que pasa es que 804 00:33:54,619 --> 00:33:57,339 este, eso así está bien 805 00:33:57,339 --> 00:33:59,160 ¿vale? pero hombre para que el diseño 806 00:33:59,160 --> 00:34:00,839 sea más bonito las variables estáticas 807 00:34:00,839 --> 00:34:03,180 normalmente no se hacen para acceder a ellas a través de los 808 00:34:03,180 --> 00:34:05,019 set, sino para acceder 809 00:34:05,019 --> 00:34:07,259 directamente a través de la variable 810 00:34:07,259 --> 00:34:09,300 eso cuando hicimos stat ya lo vimos 811 00:34:09,300 --> 00:34:10,980 entonces si yo cambio una variable 812 00:34:10,980 --> 00:34:13,300 a static, el diseño más habitual 813 00:34:13,300 --> 00:34:15,019 es que entonces ya la ponga public 814 00:34:15,019 --> 00:34:16,760 ya la ponga public 815 00:34:16,760 --> 00:34:19,300 y entonces ya ni get ni set ni nada 816 00:34:19,300 --> 00:34:21,500 de hecho recordad que dijimos 817 00:34:21,500 --> 00:34:23,340 que de las variables estáticas 818 00:34:23,340 --> 00:34:25,099 no se suelen hacer reset, nunca 819 00:34:25,099 --> 00:34:27,780 lo que se las pone es public y accedes directamente 820 00:34:27,780 --> 00:34:28,260 a ellas 821 00:34:28,260 --> 00:34:30,739 bueno, pues si yo hago eso 822 00:34:30,739 --> 00:34:33,639 entonces si yo hago esto 823 00:34:33,639 --> 00:34:35,579 entonces ahora aquí tendría esto 824 00:34:35,579 --> 00:34:35,900 así 825 00:34:35,900 --> 00:34:39,420 con protected 826 00:34:39,420 --> 00:34:42,000 no lo sé 827 00:34:42,000 --> 00:34:43,400 tendría que probarlo porque ahora mismo 828 00:34:43,400 --> 00:34:45,059 no lo tengo claro 829 00:34:45,059 --> 00:34:47,559 pero vamos, lo normal en las variables 830 00:34:47,559 --> 00:34:49,460 estáticas es que sean public, no te vuelvas 831 00:34:49,460 --> 00:34:50,840 tampoco loca por restringir 832 00:34:50,840 --> 00:34:54,739 estando en el mismo paquete 833 00:34:54,739 --> 00:34:55,320 sí, claro 834 00:34:55,320 --> 00:34:58,380 no, no, sigo teniendo mis dudas 835 00:34:58,380 --> 00:35:00,719 porque protected es 836 00:35:00,719 --> 00:35:02,420 ella misma y las herederas 837 00:35:02,420 --> 00:35:04,900 o luego lo comprobamos, pero en cualquier caso 838 00:35:04,900 --> 00:35:05,900 las variables static 839 00:35:05,900 --> 00:35:09,059 normalmente se hacen public 840 00:35:09,059 --> 00:35:10,760 siempre, porque están pensadas para que acceda 841 00:35:10,760 --> 00:35:12,900 cualquiera, están pensadas para eso 842 00:35:12,900 --> 00:35:14,360 entonces como están pensadas para eso 843 00:35:14,360 --> 00:35:15,800 no facilitas la tarea 844 00:35:15,800 --> 00:35:18,380 bueno, pues esta sería 845 00:35:18,380 --> 00:35:20,840 la otra versión de recibir 846 00:35:20,840 --> 00:35:22,260 carta, que como 847 00:35:22,260 --> 00:35:24,780 y esta pasa por darnos cuenta de que 848 00:35:24,780 --> 00:35:26,800 solo va a haber un objeto baraja en toda nuestra aplicación 849 00:35:26,800 --> 00:35:28,860 solo va a haber uno, pues solo va a haber 850 00:35:28,860 --> 00:35:30,840 uno, lo hago estático y facilito el trabajo 851 00:35:30,840 --> 00:35:34,219 de todo el mundo, y así 852 00:35:34,219 --> 00:35:35,840 me queda ya el método así, vale 853 00:35:35,840 --> 00:35:39,849 y ahora esto ya sí que sería 854 00:35:39,849 --> 00:35:41,989 en cuatro, hasta aquí ya en cuatro, dos y medio 855 00:35:41,989 --> 00:35:43,710 tres y cuatro 856 00:35:43,710 --> 00:35:45,869 vale, venga y ahora paramos