1 00:00:01,139 --> 00:00:08,320 Hola a todos. Último vídeo. Este es el programa que ha dado como más dolor de cabeza y no era tan difícil. 2 00:00:09,519 --> 00:00:19,260 Tenía dos cosas. Una, que pedía que utilizases un... ¿un hazmat? No pedía. A ver... 3 00:00:19,260 --> 00:00:24,640 Sí, lo pedía, almacenar un hazmat. De repente he dicho, ¿por qué? Y lo decían todos. Sí, no lo pedía. 4 00:00:26,019 --> 00:00:30,140 Vale, la idea es que yo quería regalar bombones y quería un programa que me los repartiera. 5 00:00:30,140 --> 00:00:37,460 Entonces, el programa debería preguntarme cuántos alumnos juegan y cuántos bombones máximo tendrá cada alumno. 6 00:00:37,939 --> 00:00:42,140 Entonces, si yo digo que quiero N alumnos y M bombones, ¿vale? 7 00:00:42,939 --> 00:00:50,759 Desde ese archivo CSV, tiene que leerlo una sola vez y amanecer en un hashtag en nombre de los alumnos que yo ya he dicho. 8 00:00:50,899 --> 00:00:58,100 O sea, si he dicho 7, 7 alumnos y una cantidad aleatoria de bombones, máximo M por alumno. 9 00:00:58,100 --> 00:01:03,159 Entonces me va a preguntar un nombre, lo voy a teclear y me va a decir si tiene bombones o no. 10 00:01:03,780 --> 00:01:06,980 Y que manejo excepciones, que es no hay bombones para ti. 11 00:01:08,299 --> 00:01:10,959 Y que tenga en cuenta si hay problemas al leer el archivo. 12 00:01:11,959 --> 00:01:13,140 Vale, pues vamos allá. 13 00:01:13,780 --> 00:01:16,840 He cogido, hay varios que están bien. 14 00:01:19,319 --> 00:01:22,739 Y he hecho de manera diferente, pero como ya es tarde, 15 00:01:22,739 --> 00:01:29,939 Voy a coger el que es más sencillo, que en este caso es el de María y que además le funciona. 16 00:01:30,879 --> 00:01:31,680 Os cuento. 17 00:01:34,159 --> 00:01:43,180 El programa hace un try para leer del teclado y pregunta cuántos alumnos juegan. 18 00:01:43,459 --> 00:01:46,519 Entonces guarda el número de alumnos, el entero que yo haya escrito. 19 00:01:47,000 --> 00:01:51,000 Y luego cuántos bombones y también me lo guarda en el entero. 20 00:01:51,000 --> 00:01:53,120 lee la siguiente línea 21 00:01:53,120 --> 00:01:54,659 imagino que por lo del salto 22 00:01:54,659 --> 00:01:59,540 y dice que el file 23 00:01:59,540 --> 00:02:01,939 está en resources participantes 24 00:02:01,939 --> 00:02:03,920 he cambiado porque estaba diferente 25 00:02:03,920 --> 00:02:05,859 pero era eso, estaba en su carpeta 26 00:02:05,859 --> 00:02:06,439 de resources 27 00:02:06,439 --> 00:02:10,000 si os abriera 28 00:02:10,000 --> 00:02:11,680 el archivo original lo tiene aquí 29 00:02:11,680 --> 00:02:14,599 al lado de programa 2.3 30 00:02:14,599 --> 00:02:16,120 está el resources 31 00:02:16,120 --> 00:02:17,599 creo que está aquí 32 00:02:17,599 --> 00:02:24,199 ¿Dónde lo he visto? Ah, no, aquí no se ve, en el LED no se ve, pero fuera sí se ve, tiene los ausis. 33 00:02:24,479 --> 00:02:29,560 Bueno, me la ha mandado ella. Está guay que los archivos vengan en vuestro propio programa, 34 00:02:29,719 --> 00:02:32,340 no te hagan que estar buscando donde los tengo yo en el ordenador. 35 00:02:33,240 --> 00:02:40,759 Vale, ha utilizado un file reader, coge un lector con el file reader de archivo y el buffer reader. 36 00:02:42,180 --> 00:02:45,400 Estuve probando con el random, pero al final no le funcionaba. 37 00:02:47,599 --> 00:02:53,340 A Guillermo le funciona el random y lee aleatoriamente, pero tuvo problemas al final, 38 00:02:53,500 --> 00:02:58,620 entonces como no está terminado, no quiero marearos con él, con la solución. 39 00:02:59,500 --> 00:03:03,560 Vale, aquí tiene una raíz gris para guardar la lista de alumnos que va a leer, 40 00:03:03,759 --> 00:03:07,060 porque solo la va a leer una vez. 41 00:03:08,780 --> 00:03:13,419 Así que, vale, tiene un string que es línea donde lee la línea. 42 00:03:13,419 --> 00:03:19,080 entonces aquí lo que hace María es eliminar las partes que no le interesan 43 00:03:19,080 --> 00:03:24,379 así que para cada línea que hay en el buffer que es distinta de null 44 00:03:24,379 --> 00:03:30,319 la lee, si es distinta de null, mientras sea distinta de null la lee 45 00:03:30,319 --> 00:03:36,680 así que la línea que la tiene aquí leída utiliza el split para separarla por comas 46 00:03:36,680 --> 00:03:40,719 y lo guarda en contenido, que es un array de string 47 00:03:40,719 --> 00:03:45,759 Así que tendrá un array de tantos nombres y apellidos como tenga el alumno. 48 00:03:45,919 --> 00:03:49,180 Y aquí ha utilizado este método para quitar las comillas. 49 00:03:50,639 --> 00:03:57,939 Coge el primer nombre, o sea, porque si fuese María Luisa, cogería María. 50 00:03:58,180 --> 00:04:01,580 Así que coge a María y coge un substring de María. 51 00:04:01,819 --> 00:04:05,500 Entonces le quita el primer carácter, porque sabe que hay comillas, ¿vale? 52 00:04:05,500 --> 00:04:06,960 y luego 53 00:04:06,960 --> 00:04:10,020 si os fijáis en Substream, que no he pinchado 54 00:04:10,020 --> 00:04:11,300 ahora no lo recuerdo 55 00:04:11,300 --> 00:04:13,979 lo que le está diciendo es la longitud que quiere de la cadena 56 00:04:13,979 --> 00:04:15,539 le dice donde empieza 57 00:04:15,539 --> 00:04:18,060 y donde termina 58 00:04:18,060 --> 00:04:20,920 aquí me equivoco 59 00:04:20,920 --> 00:04:23,860 entonces 60 00:04:23,860 --> 00:04:28,100 le está preguntando 61 00:04:28,100 --> 00:04:30,160 al nombre que está en contenido 0 62 00:04:30,160 --> 00:04:32,220 cuál es su longitud y le he quitado 63 00:04:32,220 --> 00:04:34,240 una, entonces le está quitando 64 00:04:34,240 --> 00:04:43,060 la última comilla. Entonces si mide la longitud 7, le dice que va a coger 6 caracteres y como 65 00:04:43,060 --> 00:04:47,740 empieza en la segunda posición, pues se salta la primera comilla. Entonces como ya tiene 66 00:04:47,740 --> 00:04:54,120 el nombre, en alumnos lista, que es un array, lo añade. Así que tiene una lista de alumnos 67 00:04:54,120 --> 00:05:00,579 donde solo están los nombres y va contando las líneas que tiene. Y aquí es donde usa 68 00:05:00,579 --> 00:05:06,980 hazmat y un contador. Un contador para ver, ahora os lo enseño, cuántos alumnos, 69 00:05:06,980 --> 00:05:12,399 cuántos bombones, cuántos bombones o alumnos se han metido en la lista. 70 00:05:12,399 --> 00:05:17,579 Así que empieza con cero. Por ahora no tiene ningún alumno metido en la lista y 71 00:05:17,579 --> 00:05:22,660 el número de alumnos es el número que he dicho yo. Entonces, mientras no haya metido en la 72 00:05:22,660 --> 00:05:27,980 lista suficientes alumnos, va a buscar una posición aleatoria y la posición, que 73 00:05:27,980 --> 00:05:38,339 es un entero, lo utiliza multiplicando las líneas que hay en el ArrayList, que le podría 74 00:05:38,339 --> 00:05:42,740 haber preguntado el tamaño, de acuerdo al ArrayList, lo multiplica por un random de 75 00:05:42,740 --> 00:05:51,300 0 a 1 y lo convierte en entero. Entonces sale una posición en concreto. Puede ser la 14, 76 00:05:51,300 --> 00:05:57,439 la 15, no sabe quién está en esa posición. Así que le pregunta a la lista que le dé 77 00:05:57,439 --> 00:06:04,360 esa posición, hace un get de esa posición y guarda el nombre que puede ser Raquel o 78 00:06:04,360 --> 00:06:12,079 Alejandro y va a guardar los bombones que hay para ti. ¿Cuántos bombones? Pues el 79 00:06:12,079 --> 00:06:18,560 máximo y lo multiplica por el math.random y lo convierte entero. Entonces para saber 80 00:06:18,560 --> 00:06:24,420 si hay alguien con ese nombre, está muy bien comentado, lo comprueba y si no está lo añado 81 00:06:24,420 --> 00:06:28,259 y le da el contador de bombones para saber cuántos personas lleva, perdón, el contador 82 00:06:28,259 --> 00:06:34,540 de personas. Y si estaba, pues vuelve al inicio del bucle sin haber sumado al contador. Entonces, 83 00:06:34,540 --> 00:06:41,980 le pregunta al alumnosMap, que es el HashMap, con el método containsKey, si existe una 84 00:06:41,980 --> 00:06:48,339 clave que se llame nombre. Entonces, si no existe, lo que hace es meterlo. Mete el nombre 85 00:06:48,339 --> 00:06:50,779 y los bombones que hay para ese alumno 86 00:06:50,779 --> 00:06:53,620 y suma el contador de alumnos 87 00:06:53,620 --> 00:06:55,100 entonces si lo ha metido 88 00:06:55,100 --> 00:06:58,000 ahora ya ha repartido bombones a un alumno 89 00:06:58,000 --> 00:06:59,500 así que va a seguir dando vueltas 90 00:06:59,500 --> 00:07:00,720 hasta que los tenga todos 91 00:07:00,720 --> 00:07:05,959 aquí es cuando estaba probando con el random 92 00:07:05,959 --> 00:07:11,230 cierra el lector, cierra el buffer 93 00:07:11,230 --> 00:07:13,110 y voy a poner aquí 94 00:07:13,110 --> 00:07:14,850 yo aquí he puesto un punto 95 00:07:14,850 --> 00:07:16,269 un breakpoint 96 00:07:16,269 --> 00:07:18,750 para poder ejecutarlo viendo que alumnos 97 00:07:18,750 --> 00:07:24,490 se han metido en la en la lista entonces dice escribe el nombre del alumno lo lee 98 00:07:24,490 --> 00:07:31,430 por teclado y ahora comprueba si es el nombre de alumno está en el hasma 99 00:07:31,430 --> 00:07:36,329 entonces está lo imprime y dice cuántos le han tocado y si no está lanza la 100 00:07:36,329 --> 00:07:41,009 excepción no hay bombones para ti no hay bombones para ti lo siento te han tocado 101 00:07:41,009 --> 00:07:48,250 bombones. Y aquí tiene las excepciones que está 102 00:07:48,250 --> 00:07:53,629 controlando. Primero, si metes una letra en vez de un número, cuando te pregunta 103 00:07:53,629 --> 00:07:58,449 número de bombones. Luego, si no encuentra el archivo y 104 00:07:58,449 --> 00:08:03,029 luego si lanzó la excepción. Si lanzó la excepción lo que hace es que imprime por 105 00:08:03,029 --> 00:08:09,870 la consola de errores la excepción convertida a string. Y luego cualquier 106 00:08:09,870 --> 00:08:14,990 otra excepción por si acaso. Algo ha salido mal. Así que lo voy a ejecutar con el debug. 107 00:08:14,990 --> 00:08:38,120 Programa 3. Bien, me voy al output. ¿Cuántos alumnos juegan? Y le digo 6. ¿Y cuántos bombones 108 00:08:38,120 --> 00:08:48,519 máximos tiene cada uno? Voy a poner 9. Vale, entonces me vuelvo al programa y me dice, 109 00:08:48,519 --> 00:08:53,620 Escribe el nombre de alumno comprobado, porque se supone que ya ha repartido los bombones. 110 00:08:53,860 --> 00:08:55,659 Os voy a enseñar que los ha repartido. 111 00:09:03,659 --> 00:09:06,419 Fijaros que estas son las variables que hay en este programa. 112 00:09:06,620 --> 00:09:08,019 Y aquí está alumnosMap. 113 00:09:08,759 --> 00:09:15,639 En alumnosMap tiene 5, de 0 a 5, quiere decir exactamente los alumnos que he pedido, 6. 114 00:09:15,639 --> 00:09:19,220 aquí, ah mira 115 00:09:19,220 --> 00:09:22,039 este es un error 116 00:09:22,039 --> 00:09:22,700 que le he colado 117 00:09:22,700 --> 00:09:24,600 vale 118 00:09:24,600 --> 00:09:28,159 en la posición 1 119 00:09:28,159 --> 00:09:30,159 por ejemplo, la clave es Lucía 120 00:09:30,159 --> 00:09:32,179 y le ha tocado un bombón 121 00:09:32,179 --> 00:09:33,940 y a 122 00:09:33,940 --> 00:09:35,620 María ha tocado 7 123 00:09:35,620 --> 00:09:37,039 a Antonio han tocado 7 124 00:09:37,039 --> 00:09:39,220 cada alumno le ha tocado 125 00:09:39,220 --> 00:09:41,659 una cantidad, es decir, yo pensaba 126 00:09:41,659 --> 00:09:43,679 que iba a coger el nombre solo con un espacio 127 00:09:43,679 --> 00:09:46,799 ah, porque usa las comas, es verdad 128 00:09:46,799 --> 00:09:48,340 es hasta donde llegaba la 129 00:09:48,340 --> 00:09:50,720 la coma, lo separó por comas 130 00:09:50,720 --> 00:09:51,759 está en nombre complejo 131 00:09:51,759 --> 00:09:53,860 y a mí me han tocado dos 132 00:09:53,860 --> 00:09:55,820 y esto es un error 133 00:09:55,820 --> 00:09:58,360 porque deberían, o sea, un error 134 00:09:58,360 --> 00:09:59,960 porque no debería haber leído 135 00:09:59,960 --> 00:10:02,480 alguien que no sea un 136 00:10:02,480 --> 00:10:04,460 ¿cómo se dice? 137 00:10:04,899 --> 00:10:06,580 un nombre, no tiene letras 138 00:10:06,580 --> 00:10:07,820 he puesto números 139 00:10:07,820 --> 00:10:09,919 vale, nos dezo 140 00:10:09,919 --> 00:10:12,740 vale, entonces me dice, escribe el nombre por el teclado 141 00:10:12,740 --> 00:10:15,200 Y voy a poner 142 00:10:15,200 --> 00:10:17,039 A Lucía 143 00:10:17,039 --> 00:10:18,740 Así que me voy a salir 144 00:10:18,740 --> 00:10:20,759 Y lo voy a poner con mayúsculas 145 00:10:20,759 --> 00:10:21,820 Porque no he fijado 146 00:10:21,820 --> 00:10:28,960 Y con tilde 147 00:10:28,960 --> 00:10:35,720 Ay, es que no me he quedado ahí 148 00:10:35,720 --> 00:10:38,320 Es que me... 149 00:10:38,320 --> 00:10:38,740 Ahora 150 00:10:38,740 --> 00:10:41,740 No me ha salido el mensaje todavía 151 00:10:41,740 --> 00:10:43,679 No sé si va a fallar 152 00:10:43,679 --> 00:10:45,419 Porque he escrito antes de tiempo 153 00:10:45,419 --> 00:10:47,639 Sí, he escrito antes de tiempo 154 00:10:47,639 --> 00:10:49,860 Y el programa se ha quedado tontado 155 00:10:49,860 --> 00:10:51,639 Un segundo que lo vuelvo a arrancar 156 00:10:51,639 --> 00:10:54,440 Vale, entonces ahora 157 00:10:54,440 --> 00:10:56,759 Si el nombre que he puesto es Roberto 158 00:10:56,759 --> 00:10:59,000 Anda 159 00:10:59,000 --> 00:11:01,340 Os juro que me funcionaba 160 00:11:01,340 --> 00:11:09,299 Ah, bueno 161 00:11:09,299 --> 00:11:11,080 Es que ya lo pienso 162 00:11:11,080 --> 00:11:15,190 Vale, entonces estoy siguiendo 163 00:11:15,190 --> 00:11:16,889 Es que cuando estudiaba en Google no me acordaba 164 00:11:16,889 --> 00:11:19,169 Ya he leído el nombre 165 00:11:19,169 --> 00:11:21,110 Si os fijáis 166 00:11:21,110 --> 00:11:23,750 El nombre lo ha leído en nombre alumno 167 00:11:23,750 --> 00:11:26,769 Que está por aquí 168 00:11:26,769 --> 00:11:27,610 Que es Roberto 169 00:11:27,610 --> 00:11:30,690 y si os fijáis en alumnos más 170 00:11:30,690 --> 00:11:32,409 le he colado otro error 171 00:11:32,409 --> 00:11:33,970 que es este en la posición 1 172 00:11:33,970 --> 00:11:36,070 o sea que le he colado yo un dato que no está bien 173 00:11:36,070 --> 00:11:37,490 porque tiene letras 174 00:11:37,490 --> 00:11:38,789 pero aquí está Roberto 175 00:11:38,789 --> 00:11:40,690 estoy en este punto 176 00:11:40,690 --> 00:11:43,230 va a comprobar si alumno más contiene 177 00:11:43,230 --> 00:11:45,309 esa clave 178 00:11:45,309 --> 00:11:46,509 le doy al siguiente paso 179 00:11:46,509 --> 00:11:48,429 entonces sí que está 180 00:11:48,429 --> 00:11:50,990 y como sí que está va a imprimir el nombre del alumno 181 00:11:50,990 --> 00:11:52,350 no ha tocado tantos bombones 182 00:11:52,350 --> 00:11:55,070 y ha terminado 183 00:11:55,070 --> 00:11:56,110 si voy a la salida 184 00:11:56,110 --> 00:11:58,250 aquí tenéis, a Roberto le han tocado 185 00:11:58,250 --> 00:11:59,289 tres bombones 186 00:11:59,289 --> 00:12:02,250 y si lo vuelvo a ejecutar 187 00:12:03,029 --> 00:12:13,009 ¿cuántos aún nos juegan? 188 00:12:13,230 --> 00:12:13,649 cuatro 189 00:12:13,649 --> 00:12:15,690 bombones, ocho 190 00:12:15,690 --> 00:12:17,429 nombre de alumno, Pepe 191 00:12:17,429 --> 00:12:20,250 y me dice, no hay bombones para ti, lo siento 192 00:12:20,250 --> 00:12:21,389 te han tocado bombones 193 00:12:21,389 --> 00:12:23,690 y ya está 194 00:12:23,690 --> 00:12:26,750 si yo cambiara el nombre 195 00:12:26,750 --> 00:12:28,990 del archivo o eliminara el archivo 196 00:12:28,990 --> 00:12:30,929 me saltaría 197 00:12:30,929 --> 00:12:32,570 el Final Fund Exception 198 00:12:32,570 --> 00:12:35,049 y si yo quito 199 00:12:35,049 --> 00:12:36,549 el punto de ruptura 200 00:12:36,549 --> 00:12:38,830 y lo vuelvo a ejecutar 201 00:12:38,830 --> 00:12:40,889 una prueba que no la he hecho antes 202 00:12:40,889 --> 00:12:45,570 ¿cuántos aún nos juegan? 203 00:12:45,690 --> 00:12:46,690 le digo una T 204 00:12:46,690 --> 00:12:50,710 me dice 205 00:12:50,710 --> 00:12:52,029 no has metido un número entero 206 00:12:52,029 --> 00:12:54,330 y el programa termina correctamente 207 00:12:54,330 --> 00:12:56,210 simplemente me dice que no he metido un número entero 208 00:12:56,210 --> 00:12:58,330 gracias