1 00:00:00,920 --> 00:00:03,580 Vale, pues venga, ordenar la lista de mayor a menor. 2 00:00:05,179 --> 00:00:10,619 Ordenar, no nos hace falta programar un algoritmo de ordenación, que podríamos, 3 00:00:11,339 --> 00:00:14,300 porque tenemos un método dentro de la interfaz list. 4 00:00:15,679 --> 00:00:17,120 Entonces, números es una lista. 5 00:00:18,559 --> 00:00:22,079 Entonces, como números es una lista, me ofrece un montón de métodos, 6 00:00:22,699 --> 00:00:23,600 uno de ellos el sort. 7 00:00:24,000 --> 00:00:28,600 Entonces, el problema del sort es que tenemos que, como hemos visto hasta ahora nosotros, 8 00:00:28,600 --> 00:00:30,339 darle un criterio de ordenación 9 00:00:30,339 --> 00:00:32,859 al menos tengo que dar un objeto 10 00:00:32,859 --> 00:00:34,759 un objeto que se supone que es un objeto 11 00:00:34,759 --> 00:00:36,560 que cumple la condición 12 00:00:36,560 --> 00:00:38,100 de ser criterio de ordenación 13 00:00:38,100 --> 00:00:39,920 ¿vale? 14 00:00:40,159 --> 00:00:41,460 aquí tendría que dar un objeto 15 00:00:41,460 --> 00:00:46,240 ¿pero qué ocurre? 16 00:00:46,340 --> 00:00:48,439 que uno podría pensar, oye pero a ver 17 00:00:48,439 --> 00:00:49,140 los números 18 00:00:49,140 --> 00:00:51,439 los enteros 19 00:00:51,439 --> 00:00:54,140 ya tienen un orden natural 20 00:00:54,140 --> 00:00:56,719 o sea, hay cosas que ya en Java 21 00:00:56,719 --> 00:00:58,179 tienen su orden natural 22 00:00:58,179 --> 00:00:59,520 que son muy poquitas 23 00:00:59,520 --> 00:01:02,200 son en las variables primitivas 24 00:01:02,200 --> 00:01:04,319 los números 25 00:01:04,319 --> 00:01:05,719 de cualquier tipo 26 00:01:05,719 --> 00:01:08,439 byte, ind, double, todos tienen el orden 27 00:01:08,439 --> 00:01:10,519 el orden algebraico de toda la vida, tienen su orden natural 28 00:01:10,519 --> 00:01:12,200 y los char 29 00:01:12,200 --> 00:01:14,299 que tienen el orden de la tabla 30 00:01:14,299 --> 00:01:16,319 así, vale, entonces todas las variables 31 00:01:16,319 --> 00:01:18,359 primitivas tienen un orden 32 00:01:18,359 --> 00:01:19,739 natural que no hace falta 33 00:01:19,739 --> 00:01:21,019 que yo lo programe 34 00:01:21,019 --> 00:01:24,579 cuando queremos comparar un número n1 con un número n2 35 00:01:24,579 --> 00:01:26,620 ponemos n1 menor que n2 36 00:01:26,620 --> 00:01:28,459 y ya está, no nos complicamos la vida 37 00:01:28,459 --> 00:01:30,700 luego aparte hay otros tipos 38 00:01:30,700 --> 00:01:32,500 de variables que también tienen orden 39 00:01:32,500 --> 00:01:34,900 porque se ha 40 00:01:34,900 --> 00:01:36,840 programado en la clase a través del 41 00:01:36,840 --> 00:01:38,500 compare to etc, como string 42 00:01:38,500 --> 00:01:40,400 ya lo hemos visto otras veces, pero bueno 43 00:01:40,400 --> 00:01:42,120 estamos hablando de enteros 44 00:01:42,120 --> 00:01:45,079 entonces los enteros uno podría decir con todo el criterio del mundo 45 00:01:45,079 --> 00:01:46,859 los enteros tienen ya un orden 46 00:01:46,859 --> 00:01:48,799 natural, que es 3 es menor 47 00:01:48,799 --> 00:01:50,939 que 5, o sea no el orden que conocemos 48 00:01:50,939 --> 00:01:52,099 de toda la vida, tienen ya 49 00:01:52,099 --> 00:01:53,700 entonces es necesario que yo 50 00:01:53,700 --> 00:01:55,780 especifique criterio de ordenación 51 00:01:55,780 --> 00:01:58,420 en este caso concreto sí, porque me han dicho 52 00:01:58,420 --> 00:02:00,219 ordena de mayor a menor 53 00:02:00,219 --> 00:02:02,500 ordena de mayor a menor 54 00:02:02,500 --> 00:02:04,439 pero incluso 55 00:02:04,439 --> 00:02:06,480 si hubiera una forma 56 00:02:06,480 --> 00:02:08,300 de que sort usara 57 00:02:08,300 --> 00:02:10,340 el orden natural de los enteros 58 00:02:10,340 --> 00:02:12,500 pues yo podría ordenarlo 59 00:02:12,500 --> 00:02:13,280 por el orden natural 60 00:02:13,280 --> 00:02:16,400 y luego a la hora de mostrar, hacer el recorrido 61 00:02:16,400 --> 00:02:18,219 al revés, mostrar de la última a la primera 62 00:02:18,219 --> 00:02:20,199 y así lo mostraría en el orden de mayor a menor 63 00:02:20,199 --> 00:02:22,180 ¿entendéis lo que quiero decir? 64 00:02:22,800 --> 00:02:24,219 en cualquier caso, el problema que estoy 65 00:02:24,219 --> 00:02:26,180 planteando es, si los números 66 00:02:26,180 --> 00:02:28,520 tienen un orden ellos, por naturaleza 67 00:02:28,520 --> 00:02:29,219 matemática 68 00:02:29,219 --> 00:02:32,259 realmente, si yo quiero ese 69 00:02:32,259 --> 00:02:34,280 orden natural, es necesario 70 00:02:34,280 --> 00:02:36,520 que yo especifique aquí un criterio de ordenación 71 00:02:36,520 --> 00:02:38,319 pues la respuesta 72 00:02:38,319 --> 00:02:40,039 es no, o sea 73 00:02:40,039 --> 00:02:42,159 si yo aquí no especifico un criterio 74 00:02:42,159 --> 00:02:43,800 de ordenación, si no lo especifico 75 00:02:43,800 --> 00:02:46,000 entonces sort va a tirar 76 00:02:46,000 --> 00:02:47,979 del orden que esté programado 77 00:02:47,979 --> 00:02:50,080 en el tipo de objeto que yo le pase 78 00:02:50,080 --> 00:02:52,120 entonces, ¿qué ocurre? que los 79 00:02:52,120 --> 00:02:53,939 integre, que mi lista de números 80 00:02:53,939 --> 00:02:55,919 los de integer tienen ya un orden programado, 81 00:02:56,439 --> 00:02:57,599 que es el que conocemos nosotros. 82 00:02:58,840 --> 00:03:00,419 Los string también lo tienen, 83 00:03:00,560 --> 00:03:02,759 porque el string tiene dentro el método compareTo. 84 00:03:03,479 --> 00:03:06,300 Es decir, ¿qué es lo que tiene un orden comparado? 85 00:03:06,800 --> 00:03:08,099 Todo lo que sea comparable. 86 00:03:08,960 --> 00:03:11,259 ¿Os acordáis de la famosa interfaz comparable? 87 00:03:13,020 --> 00:03:15,139 Pues vámonos un momento a la clase integer, 88 00:03:15,219 --> 00:03:15,819 esta de aquí. 89 00:03:19,319 --> 00:03:20,919 La clase integer está de aquí, 90 00:03:21,919 --> 00:03:23,139 que no la hemos hecho nosotros, 91 00:03:23,139 --> 00:03:24,139 porque ya está hecha, 92 00:03:24,139 --> 00:03:26,039 y que sirve para guardar 93 00:03:26,039 --> 00:03:27,639 un numerito entero 94 00:03:27,639 --> 00:03:30,139 nada más que para eso y para ofrecerme 95 00:03:30,139 --> 00:03:31,840 métodos para hacer cosas como el parseIn 96 00:03:31,840 --> 00:03:33,960 pues esta clase resulta que implementa 97 00:03:33,960 --> 00:03:35,240 comparable, vale 98 00:03:35,240 --> 00:03:38,240 pues cuando una clase implementaba comparable 99 00:03:38,240 --> 00:03:40,080 no os olvidéis de eso, ¿qué significa que 100 00:03:40,080 --> 00:03:41,020 implementara comparable? 101 00:03:41,539 --> 00:03:43,900 que automáticamente era obligatorio 102 00:03:43,900 --> 00:03:46,259 que implementara el método 103 00:03:46,259 --> 00:03:48,379 compareTu, ¿verdad? el compareTu 104 00:03:48,379 --> 00:03:50,020 y al implementar el método 105 00:03:50,020 --> 00:03:52,120 compareTu, damos un criterio 106 00:03:52,120 --> 00:03:54,080 que define el orden de esos 107 00:03:54,080 --> 00:03:56,139 objetos entre sí, luego 108 00:03:56,139 --> 00:03:57,819 al implementar integer 109 00:03:57,819 --> 00:03:59,800 comparable, los números 110 00:03:59,800 --> 00:04:01,740 integer, los objetos integer 111 00:04:01,740 --> 00:04:03,979 son ya ordenables, son 112 00:04:03,979 --> 00:04:05,180 comparables, ya son ordenables 113 00:04:05,180 --> 00:04:07,979 y cualquier clase que implemente 114 00:04:07,979 --> 00:04:09,979 comparable, como tendrá que implementar el 115 00:04:09,979 --> 00:04:11,520 método compareTo, pues ya es 116 00:04:11,520 --> 00:04:14,080 ordenable, comparable, entonces 117 00:04:14,080 --> 00:04:16,160 aquí, pues el método compareTo 118 00:04:16,160 --> 00:04:18,040 pues estará por ahí abajo, en algún sitio 119 00:04:18,040 --> 00:04:20,360 aquí como era que buscábamos 120 00:04:20,360 --> 00:04:21,100 con control F 121 00:04:21,100 --> 00:04:32,420 sí, ahí, vale 122 00:04:32,420 --> 00:04:35,699 pues aquí lo tenemos, este es el método 123 00:04:35,699 --> 00:04:40,139 compare tú, que implementa la clase integer, que a través de este método 124 00:04:40,139 --> 00:04:43,620 que a su vez tendríamos que meternos en él, pero para qué arrastrar, pues te 125 00:04:43,620 --> 00:04:47,959 fija el criterio de ordenación de los números enteros, que es el natural 126 00:04:47,959 --> 00:04:51,560 el orden natural que te fija, el 3 es menor que 7, el 12 es menor que 15 127 00:04:51,560 --> 00:04:55,240 bueno, pues qué quiero decir con esto, que todas las clases 128 00:04:55,240 --> 00:04:58,500 que implementen comparable como esta 129 00:04:58,500 --> 00:05:00,540 llevan ya ellas dentro 130 00:05:00,540 --> 00:05:02,720 un criterio de ordenación, lo llevan ya dentro 131 00:05:02,720 --> 00:05:05,980 que yo he hecho mi clase alumno 132 00:05:05,980 --> 00:05:08,259 por ejemplo, que es el ejemplo que hicimos 133 00:05:08,259 --> 00:05:10,500 mi clase dos objetos alumno 134 00:05:10,500 --> 00:05:12,220 no son comparables por naturaleza 135 00:05:12,220 --> 00:05:14,579 entonces si yo quiero 136 00:05:14,579 --> 00:05:16,079 que dos objetos alumno sean 137 00:05:16,079 --> 00:05:17,860 ordenables o comparables 138 00:05:17,860 --> 00:05:20,220 en mi clase alumno tendría que hacer 139 00:05:20,220 --> 00:05:22,480 el implement comparable y meter dentro 140 00:05:22,480 --> 00:05:24,519 el compare to, lo que ya hicimos 141 00:05:24,519 --> 00:05:27,779 entonces si yo he hecho eso, ya los objetivos 1 son comparables 142 00:05:27,779 --> 00:05:30,259 bueno, pues si yo tengo una lista 143 00:05:30,259 --> 00:05:33,560 yo tengo una lista de cosas 144 00:05:33,560 --> 00:05:37,019 y la clase a la que pertenecen esas cosas 145 00:05:37,019 --> 00:05:38,939 implementa comparable 146 00:05:38,939 --> 00:05:42,279 ya llevan ellas dentro un criterio de orden 147 00:05:42,279 --> 00:05:45,279 el que se haya decidido el comparator ya lo llevan dentro 148 00:05:45,279 --> 00:05:48,759 bueno, pues entonces yo puedo en ese caso pasar 149 00:05:48,759 --> 00:05:51,800 del comparator este y darle el 1 150 00:05:51,800 --> 00:05:53,480 y entonces sort ¿qué hace? 151 00:05:53,480 --> 00:05:55,939 como no le estás dando ningún criterio de ordenación 152 00:05:55,939 --> 00:05:57,240 coge 153 00:05:57,240 --> 00:05:59,680 el criterio de ordenación que tengan esas clases 154 00:05:59,680 --> 00:06:01,420 programado dentro, en su compare tú 155 00:06:01,420 --> 00:06:03,720 ¿vale? bueno pues 156 00:06:03,720 --> 00:06:05,819 en este caso, si yo ordeno 157 00:06:05,819 --> 00:06:07,819 los números con sort y no le 158 00:06:07,819 --> 00:06:09,839 pasó nada, los va a ordenar 159 00:06:09,839 --> 00:06:11,639 con el criterio de ordenación que tenga 160 00:06:11,639 --> 00:06:13,899 el compare tú de la clase 161 00:06:13,899 --> 00:06:15,680 íntegre y el criterio de ordenación que tiene 162 00:06:15,680 --> 00:06:17,959 el compare tú de la clase íntegre es el natural de los números 163 00:06:17,959 --> 00:06:19,540 el ascendente 164 00:06:19,540 --> 00:06:21,500 o sea de menor a mayor, el natural 165 00:06:21,500 --> 00:06:24,639 ¿vale? entonces, aquí me piden 166 00:06:24,639 --> 00:06:26,639 de mayor a menor, entonces 167 00:06:26,639 --> 00:06:29,220 no me valdría 168 00:06:29,220 --> 00:06:29,980 este sort 169 00:06:29,980 --> 00:06:32,459 tendría que hacer otro criterio de ordenación 170 00:06:32,459 --> 00:06:34,519 a menos que se lo quiera mostrar 171 00:06:34,519 --> 00:06:36,720 pues entonces ordeno así y luego muestro de abajo a arriba 172 00:06:36,720 --> 00:06:38,660 pero si yo quiero tenerla 173 00:06:38,660 --> 00:06:40,699 ordenada en orden descendente, este sort no me vale 174 00:06:40,699 --> 00:06:42,699 vale, vamos a hacer primero esta prueba 175 00:06:42,699 --> 00:06:44,620 porque como decís que el método no funciona bien 176 00:06:44,620 --> 00:06:46,300 el que hemos hecho para probarlo 177 00:06:46,300 --> 00:06:48,459 vamos a ordenar 178 00:06:48,459 --> 00:06:49,160 ahora mismo 179 00:06:49,160 --> 00:06:53,149 de menor a mayor 180 00:06:53,149 --> 00:06:55,930 vamos a ordenarla 181 00:06:55,930 --> 00:06:57,110 de menor a mayor 182 00:06:57,110 --> 00:07:00,759 entonces 183 00:07:00,759 --> 00:07:06,000 ¿vale? entonces 184 00:07:06,000 --> 00:07:11,709 repito, de menor a mayor 185 00:07:11,709 --> 00:07:14,029 como es el orden natural de los números enteros 186 00:07:14,029 --> 00:07:16,410 no le pasó nada 187 00:07:16,410 --> 00:07:18,529 y sort va a coger el compare to 188 00:07:18,529 --> 00:07:20,490 de integer, pero porque integer lo tiene 189 00:07:20,490 --> 00:07:22,689 si yo a sort 190 00:07:22,689 --> 00:07:24,009 no le pasó nada 191 00:07:24,009 --> 00:07:26,750 y los objetos que forman parte de esta lista 192 00:07:26,750 --> 00:07:28,889 no implementan compare, me tienen compare to 193 00:07:28,889 --> 00:07:30,589 aquí sí que nos va a dar un error, nos va a decir 194 00:07:30,589 --> 00:07:33,329 de compilación 195 00:07:33,329 --> 00:07:34,930 no, pero en el momento de ejecutar me va a decir 196 00:07:34,930 --> 00:07:36,949 oye, esto que me estás dando no implementa 197 00:07:36,949 --> 00:07:39,009 comparable, no puedo, pero aquí 198 00:07:39,009 --> 00:07:40,990 los íntegros que forman parte de números 199 00:07:40,990 --> 00:07:42,370 se implementan comparables 200 00:07:42,370 --> 00:07:44,829 luego cuando ejecutemos esto, va a decir 201 00:07:44,829 --> 00:07:47,389 vale, te ordeno según ese criterio, que es el de menor a mayor 202 00:07:47,389 --> 00:07:49,069 bueno, vamos a probarlo 203 00:07:49,069 --> 00:07:50,990 a ver 204 00:07:50,990 --> 00:07:53,029 qué ocurre, primero ordenamos de menor 205 00:07:53,029 --> 00:07:54,389 a mayor y ahora mostramos la lista 206 00:07:54,389 --> 00:07:56,509 entonces para mostrar la lista 207 00:07:56,509 --> 00:07:58,910 Como solamente vamos a mostrar 208 00:07:58,910 --> 00:08:01,610 Es muy cómodo hacer un for each 209 00:08:01,610 --> 00:08:08,389 Y ahora vamos a mostrar n 210 00:08:08,389 --> 00:08:10,769 Esto sería para mostrarla 211 00:08:10,769 --> 00:08:11,889 Vale, vamos a ver 212 00:08:11,889 --> 00:08:15,029 Donde nos salta esto 213 00:08:15,029 --> 00:08:20,610 Ahí abajo 214 00:08:20,610 --> 00:08:27,970 Bueno, como no he puesto introduzca número 215 00:08:27,970 --> 00:08:29,610 En ningún momento, pues está ahí 216 00:08:29,610 --> 00:08:30,709 56 217 00:08:30,709 --> 00:08:32,669 76 218 00:08:32,669 --> 00:08:36,259 76 219 00:08:36,259 --> 00:08:37,659 12 220 00:08:37,659 --> 00:08:39,580 9 221 00:08:39,580 --> 00:08:42,299 Ah, vale, vale, vale 222 00:08:42,299 --> 00:08:43,399 Ya sé lo que está pasando 223 00:08:43,399 --> 00:08:48,100 45, claro, es que 224 00:08:48,100 --> 00:08:50,580 El método leer cadena no captura la excepción 225 00:08:50,580 --> 00:08:51,740 45 226 00:08:51,740 --> 00:08:53,940 Vale, entonces yo le paso aquí una Y 227 00:08:53,940 --> 00:08:59,340 Ah, es que debe ser que 228 00:08:59,340 --> 00:09:01,240 Leer cadena sí que le puse capturar la excepción 229 00:09:01,240 --> 00:09:03,000 Ah, lo miramos, vale, bueno 230 00:09:03,000 --> 00:09:05,159 Pues cuando le he pasado algo que no cumple eso 231 00:09:05,159 --> 00:09:06,840 Eh 232 00:09:06,840 --> 00:09:08,960 No está 233 00:09:08,960 --> 00:09:11,419 Funciona, claro, es que estaba bien todo 234 00:09:11,419 --> 00:09:13,860 si se lo pusimos, claro, que la captura 235 00:09:13,860 --> 00:09:15,419 la adentro, así no tenía que lanzarla afuera 236 00:09:15,419 --> 00:09:17,779 vale, entonces 237 00:09:17,779 --> 00:09:19,779 efectivamente ha ordenado de mayor a menor 238 00:09:19,779 --> 00:09:21,299 bueno, pues todo ha funcionado, no sé 239 00:09:21,299 --> 00:09:22,840 por qué te ha saltado la excepción 240 00:09:22,840 --> 00:09:26,919 pero 241 00:09:26,919 --> 00:09:29,539 ¿te sale la excepción de number, formate, excepción? 242 00:09:31,379 --> 00:09:33,179 ¿y estás leyendo con el cadena o el entero? 243 00:09:33,700 --> 00:09:35,820 porque el entero sí que te saltaría 244 00:09:35,820 --> 00:09:37,559 pero el cadena 245 00:09:37,559 --> 00:09:39,519 le cabe todo, sea la i, sea el 13 246 00:09:39,519 --> 00:09:41,679 igual cuando haces el integer 247 00:09:41,679 --> 00:09:43,799 parseIn estás metiendo otra cosa que no es lo que has 248 00:09:43,799 --> 00:09:45,759 leído o algo, porque ahí también te saldría 249 00:09:45,759 --> 00:09:47,899 si tú al integer parseIn le pasas 250 00:09:47,899 --> 00:09:49,759 hola 251 00:09:49,759 --> 00:09:51,879 el integer parseIn 252 00:09:51,879 --> 00:09:53,500 al tratar de convertir hola a número 253 00:09:53,500 --> 00:09:55,320 te va a salir el number forma exception también 254 00:09:55,320 --> 00:09:57,799 pero en nuestro caso lo estamos haciendo bien 255 00:09:57,799 --> 00:09:58,220 porque 256 00:09:58,220 --> 00:10:01,559 estamos haciendo el parseIn 257 00:10:01,559 --> 00:10:02,379 solo 258 00:10:02,379 --> 00:10:04,799 si es número 259 00:10:04,799 --> 00:10:07,100 solo si hemos verificado que es número 260 00:10:07,100 --> 00:10:09,580 solo si hemos verificado que es número 261 00:10:09,580 --> 00:10:10,799 le hacemos el integer parseIn 262 00:10:10,799 --> 00:10:14,440 no sé, revísalo porque algo 263 00:10:14,440 --> 00:10:16,000 vale, pues entonces 264 00:10:16,000 --> 00:10:18,340 nos ha ordenado de manera 265 00:10:18,340 --> 00:10:19,519 con el orden natural 266 00:10:19,519 --> 00:10:22,279 de comparable, repito 267 00:10:22,279 --> 00:10:23,720 si yo aquí en lugar de números 268 00:10:23,720 --> 00:10:26,500 esa lista fuera de objeto cliente 269 00:10:26,500 --> 00:10:28,440 y cliente no implementara 270 00:10:28,440 --> 00:10:30,440 comparable ni tuviera por tanto 271 00:10:30,440 --> 00:10:32,460 el compare tú, cuando yo 272 00:10:32,460 --> 00:10:34,399 hubiera ejecutado esto, me habría dado el error 273 00:10:34,399 --> 00:10:34,659 de 274 00:10:34,659 --> 00:10:38,279 cliente no implementa 275 00:10:38,279 --> 00:10:40,080 comparable, no puedo ordenar, me habría dado un error 276 00:10:40,080 --> 00:10:41,220 de ejecución 277 00:10:41,220 --> 00:10:44,100 pero integer si que lo implementa 278 00:10:44,100 --> 00:10:44,720 entonces no nos da 279 00:10:44,720 --> 00:10:48,139 bueno, pero ocurre que nosotros no queremos ordenar de menor a mayor 280 00:10:48,139 --> 00:10:50,460 sino que queremos ordenar al revés 281 00:10:50,460 --> 00:10:52,240 y además no solamente 282 00:10:52,240 --> 00:10:53,500 que queramos mostrar al revés 283 00:10:53,500 --> 00:10:56,019 porque si quisiéramos mostrar al revés 284 00:10:56,019 --> 00:10:58,120 pues podríamos dejar esta ordenación 285 00:10:58,120 --> 00:11:00,279 y luego recorrer la lista pero de la otra manera 286 00:11:00,279 --> 00:11:02,200 entonces como es 287 00:11:02,200 --> 00:11:04,039 una lista, puedo recorrer 288 00:11:04,039 --> 00:11:05,940 por posición y entonces 289 00:11:05,940 --> 00:11:08,000 si quiero mostrar la lista en el otro orden 290 00:11:08,000 --> 00:11:08,899 podría hacer esto 291 00:11:08,899 --> 00:11:13,820 mostrar la lista en orden inverso 292 00:11:13,820 --> 00:11:18,379 pues podríamos hacer esto, ¿verdad? 293 00:11:20,320 --> 00:11:25,700 desde i igual a la última posición de la lista 294 00:11:25,700 --> 00:11:26,679 que es números 295 00:11:26,679 --> 00:11:30,139 punto 6 menos 1 296 00:11:30,139 --> 00:11:33,059 por ejemplo, mientras, perdón 297 00:11:33,059 --> 00:11:37,240 claro, desde la última hasta la primera 298 00:11:37,240 --> 00:11:40,720 mientras i sea mayor o igual que 0 299 00:11:40,720 --> 00:11:42,299 decrementando i 300 00:11:42,299 --> 00:11:46,019 mostramos 301 00:11:46,019 --> 00:11:52,720 números.get i 302 00:11:52,720 --> 00:11:54,580 vale 303 00:11:54,580 --> 00:11:56,179 esto me mostraría la lista 304 00:11:56,179 --> 00:11:58,779 en orden, o sea desde la última 305 00:11:58,779 --> 00:11:59,879 posición a la primera 306 00:11:59,879 --> 00:12:02,100 esta es la última posición 307 00:12:02,100 --> 00:12:04,659 decrementando mientras si 308 00:12:04,659 --> 00:12:06,519 sea mayor o igual que cero que es la primera 309 00:12:06,519 --> 00:12:08,759 entonces esto 310 00:12:08,759 --> 00:12:10,000 me la mostraría 311 00:12:10,000 --> 00:12:12,659 en orden del mayor 312 00:12:12,659 --> 00:12:14,500 al más pequeño, lo que pasa es que la lista 313 00:12:14,500 --> 00:12:16,340 no es que estuve ordenada así, la lista estaría ordenada 314 00:12:16,340 --> 00:12:17,539 en orden ascendente 315 00:12:17,539 --> 00:12:20,059 lo que he cambiado es la forma de recorrerla 316 00:12:20,059 --> 00:12:21,559 para mostrarla 317 00:12:21,559 --> 00:12:24,480 vale, es lo único que he cambiado, la forma de recorrerla 318 00:12:24,480 --> 00:12:25,320 para mostrarla 319 00:12:25,320 --> 00:12:28,279 si ejecutamos esto 320 00:12:28,279 --> 00:12:30,419 pues me pide 321 00:12:30,419 --> 00:12:31,299 los números 322 00:12:31,299 --> 00:12:38,200 vale 323 00:12:38,200 --> 00:12:40,220 eh 324 00:12:40,220 --> 00:12:42,460 me dio dos 7 325 00:12:42,460 --> 00:12:44,539 esta es 326 00:12:44,539 --> 00:12:47,440 el primer recorrido con el for each 327 00:12:47,440 --> 00:12:49,639 y el recorrido 328 00:12:49,639 --> 00:12:52,039 de abajo es el segundo 329 00:12:52,039 --> 00:12:53,320 que es al revés 330 00:12:53,320 --> 00:12:55,360 es el espejo de este, obviamente 331 00:12:55,360 --> 00:12:56,600 es el espejo del de arriba 332 00:12:56,600 --> 00:12:59,519 vale, pero bueno 333 00:12:59,519 --> 00:13:01,419 nosotros ahora lo que queremos es 334 00:13:01,419 --> 00:13:03,639 que además esté ordenada la lista 335 00:13:03,639 --> 00:13:05,720 que esté de hecho ordenada 336 00:13:05,720 --> 00:13:07,659 en orden del mayor al menor 337 00:13:07,659 --> 00:13:09,820 entonces ese no es 338 00:13:09,820 --> 00:13:11,419 el orden natural de los integer 339 00:13:11,419 --> 00:13:13,840 entonces como ese no es el orden natural 340 00:13:13,840 --> 00:13:15,919 de los integer, no puedo ordenarla así 341 00:13:15,919 --> 00:13:18,100 no puedo ordenarla así 342 00:13:18,100 --> 00:13:19,340 porque si yo le paso null 343 00:13:19,340 --> 00:13:21,059 me lo va a ordenar como diga 344 00:13:21,059 --> 00:13:22,419 el comparable de la clase 345 00:13:22,419 --> 00:13:25,340 y el comparable de la clase dice de menor a mayor 346 00:13:25,340 --> 00:13:26,960 porque así está hecha la clase íntegra 347 00:13:26,960 --> 00:13:27,519 así está hecha 348 00:13:27,519 --> 00:13:30,720 bueno, pero entonces tenemos una alternativa 349 00:13:30,720 --> 00:13:32,799 que es usar el sort como hemos usado otras veces 350 00:13:32,799 --> 00:13:35,279 le voy a pasar yo mi propio criterio 351 00:13:35,279 --> 00:13:37,019 y ese criterio va a 352 00:13:37,019 --> 00:13:37,840 sobreescribir 353 00:13:37,840 --> 00:13:40,419 va a pesar más que el de 354 00:13:40,419 --> 00:13:43,000 la clase, que el comparable de la clase 355 00:13:43,000 --> 00:13:44,500 le vamos a pasar nuestro propio criterio 356 00:13:44,500 --> 00:13:47,100 pues venga, vamos ahora a ordenar 357 00:13:47,100 --> 00:13:47,919 ahora ya sí 358 00:13:47,919 --> 00:13:53,899 vamos a ordenar de mayor a menor 359 00:13:53,899 --> 00:13:58,080 vale, pues vamos a ordenarla de mayor a menor 360 00:13:58,080 --> 00:14:02,539 repito, hay que darle un criterio de ordenación 361 00:14:02,539 --> 00:14:06,120 que sustituya al que tiene la clase íntegra dentro suya 362 00:14:06,120 --> 00:14:07,059 que lo sustituya 363 00:14:07,059 --> 00:14:09,120 para esta ordenación solo, no para siempre 364 00:14:09,120 --> 00:14:10,019 claro, para esta ordenación 365 00:14:10,019 --> 00:14:12,759 y eso lo hacíamos instanciando un objeto 366 00:14:12,759 --> 00:14:14,200 que tendremos que crear 367 00:14:14,200 --> 00:14:18,740 pues como es una clase que voy a crear yo 368 00:14:18,740 --> 00:14:20,879 la llamo como me dé la gana 369 00:14:20,879 --> 00:14:24,059 pues orden descendente 370 00:14:24,059 --> 00:14:26,039 para que no sea tan larga 371 00:14:26,039 --> 00:14:32,210 uy, vale, entonces 372 00:14:32,210 --> 00:14:36,299 esta clase que nos tenemos 373 00:14:36,299 --> 00:14:38,259 que crear es la que va a 374 00:14:38,259 --> 00:14:40,440 programar el orden de mayor a menor 375 00:14:40,440 --> 00:14:43,950 de dos números enteros 376 00:14:43,950 --> 00:14:47,450 pues venga, vamos a crear la clase 377 00:14:47,450 --> 00:14:49,730 me aprovecho del eclipse, que para algunas 378 00:14:49,730 --> 00:14:51,730 cosas es útil, y cuando él me detecta 379 00:14:51,730 --> 00:14:53,250 oye, que no existe ninguna clase así 380 00:14:53,250 --> 00:14:54,830 dice, ¿quieres que te la cree? 381 00:14:55,690 --> 00:14:57,549 venga, sí, créamela, me aprovecho de él 382 00:14:57,549 --> 00:14:58,750 Le digo, venga, créamela. 383 00:15:01,000 --> 00:15:04,519 Y es tan listo que ya él se da cuenta de que esta clase, 384 00:15:05,100 --> 00:15:06,720 como la has metido dentro del sort, 385 00:15:06,820 --> 00:15:08,379 tiene que implementar comparator. 386 00:15:08,679 --> 00:15:10,039 Entonces, es tan listo que eso te lo pone. 387 00:15:10,899 --> 00:15:12,980 Lo que ya no es tan listo es como para dejarte esto así. 388 00:15:14,820 --> 00:15:15,220 ¿Vale? 389 00:15:15,320 --> 00:15:20,820 Venga, queremos una clase que implemente comparator. 390 00:15:21,259 --> 00:15:21,519 ¡Hala! 391 00:15:21,519 --> 00:15:24,259 Entonces, implementa comparator, tiene que ir. 392 00:15:24,259 --> 00:15:27,059 y ahora ya 393 00:15:27,059 --> 00:15:29,919 este método tiene que devolver 394 00:15:29,919 --> 00:15:33,899 negativo si este va antes que este 395 00:15:33,899 --> 00:15:35,519 cero si van a la vez 396 00:15:35,519 --> 00:15:37,720 y positivo si este va después, vale 397 00:15:37,720 --> 00:15:38,899 ir antes 398 00:15:38,899 --> 00:15:42,039 en el orden descendente, ir antes que significa 399 00:15:42,039 --> 00:15:43,259 significa ser mayor 400 00:15:43,259 --> 00:15:46,139 ser mayor, ir antes significa ser mayor 401 00:15:46,139 --> 00:15:47,779 en ese caso 402 00:15:47,779 --> 00:15:49,220 tiene que devolver negativo 403 00:15:49,220 --> 00:15:51,620 o sea, si este es mayor que este 404 00:15:51,620 --> 00:15:53,399 hay que devolver negativo 405 00:15:53,399 --> 00:15:56,580 y si este es más pequeño que este 406 00:15:56,580 --> 00:15:58,220 hay que devolver positivo 407 00:15:58,220 --> 00:16:00,440 y si este es igual que este hay que devolver 0 408 00:16:00,440 --> 00:16:02,799 pues lo más fácil es que esto devuelva 409 00:16:02,799 --> 00:16:04,500 directamente O2 menos O1 410 00:16:04,500 --> 00:16:05,360 y ya está 411 00:16:05,360 --> 00:16:10,590 si este nos devuelve 412 00:16:10,590 --> 00:16:12,570 O2 menos 413 00:16:12,570 --> 00:16:14,090 O1 ya lo tenemos 414 00:16:14,090 --> 00:16:16,370 si O1 415 00:16:16,370 --> 00:16:18,110 es mayor que O2 416 00:16:18,110 --> 00:16:19,730 esto es negativo 417 00:16:19,730 --> 00:16:20,970 luego este va antes 418 00:16:20,970 --> 00:16:23,110 que es lo que queremos indicar 419 00:16:23,110 --> 00:16:24,490 queremos indicar que este va antes 420 00:16:24,490 --> 00:16:26,549 si son el mismo, devuelve 0 421 00:16:26,549 --> 00:16:29,250 que eso significa que están en la misma posición 422 00:16:29,250 --> 00:16:30,169 en cuanto a orden 423 00:16:30,169 --> 00:16:33,269 y si este es más pequeño 424 00:16:33,269 --> 00:16:33,950 que este 425 00:16:33,950 --> 00:16:37,210 devuelve positivo, que significa justo 426 00:16:37,210 --> 00:16:38,070 que este va después 427 00:16:38,070 --> 00:16:40,230 porque estamos en orden descendente 428 00:16:40,230 --> 00:16:42,850 vale, pues ya tenemos 429 00:16:42,850 --> 00:16:46,330 el criterio programado 430 00:16:46,330 --> 00:16:49,470 vale, no confundáis 431 00:16:49,470 --> 00:16:51,009 por tanto la interfaz 432 00:16:51,009 --> 00:16:53,129 comparator con la interfaz 433 00:16:53,129 --> 00:16:55,049 comparable, que son 434 00:16:55,049 --> 00:16:56,929 para cosas distintas, no las confundáis 435 00:16:56,929 --> 00:16:59,230 la comparable se asocia a una entidad 436 00:16:59,230 --> 00:17:01,169 alumno, cliente, en la que 437 00:17:01,169 --> 00:17:03,009 tú tienes la entidad con sus propiedades 438 00:17:03,009 --> 00:17:05,130 y además le dices, y además 439 00:17:05,130 --> 00:17:06,809 que implemente comparable 440 00:17:06,809 --> 00:17:08,890 para que diferentes objetos alumnos 441 00:17:08,890 --> 00:17:10,329 sean comparables entre sí 442 00:17:10,329 --> 00:17:12,109 ese es comparable 443 00:17:12,109 --> 00:17:14,890 la implementan las entidades, pues el alumno 444 00:17:14,890 --> 00:17:17,029 el cliente, para fijar 445 00:17:17,029 --> 00:17:18,910 un criterio de orden asociado a ellas 446 00:17:18,910 --> 00:17:20,930 siempre, y esto 447 00:17:20,930 --> 00:17:22,190 es un criterio de ordenación 448 00:17:22,190 --> 00:17:24,869 un criterio de ordenación entre dos objetos 449 00:17:24,869 --> 00:17:25,390 de un tipo 450 00:17:25,390 --> 00:17:28,750 este es un criterio de ordenación 451 00:17:28,750 --> 00:17:30,589 que va suelto 452 00:17:30,589 --> 00:17:37,220 entonces comparable es una 453 00:17:37,220 --> 00:17:39,220 característica más de una clase 454 00:17:39,220 --> 00:17:41,380 sea alumno, sea cliente 455 00:17:41,380 --> 00:17:43,299 sea factura, es una característica más 456 00:17:43,299 --> 00:17:44,539 de una clase, eso es comparable 457 00:17:44,539 --> 00:17:47,359 y comparator es un criterio de ordenación 458 00:17:47,359 --> 00:17:49,380 que yo se lo doy a quien lo necesite 459 00:17:49,380 --> 00:17:51,539 vale, pues quien necesita 460 00:17:51,539 --> 00:17:53,420 el criterio de ordenación ahora en este 461 00:17:53,420 --> 00:17:55,420 caso, pues lo necesitaba este 462 00:17:55,420 --> 00:17:59,099 el sort, le pasamos este criterio 463 00:17:59,099 --> 00:17:59,940 de ordenación 464 00:17:59,940 --> 00:18:01,920 orden descendente 465 00:18:01,920 --> 00:18:04,980 y ahora si volvemos 466 00:18:04,980 --> 00:18:06,059 a mostrar la lista 467 00:18:06,059 --> 00:18:10,099 la mostramos pues de 468 00:18:10,099 --> 00:18:14,529 de arriba a abajo 469 00:18:14,529 --> 00:18:18,539 vale, le vamos a poner 470 00:18:18,539 --> 00:18:24,700 para distinguir 471 00:18:24,700 --> 00:18:49,180 vale, pues esta es la primera 472 00:18:49,180 --> 00:18:50,900 muestra que es 473 00:18:50,900 --> 00:18:52,240 ordenado con la orden natural 474 00:18:52,240 --> 00:18:54,539 1, 3, 7, 8 475 00:18:54,539 --> 00:18:57,259 esta es ordenado, sigue ordenada 476 00:18:57,259 --> 00:18:59,980 con su orden natural, pero la hemos recorrido 477 00:18:59,980 --> 00:19:02,140 de abajo a arriba, la hemos recorrido 478 00:19:02,140 --> 00:19:03,579 vale, y ahora 479 00:19:03,579 --> 00:19:05,859 la hemos ordenado con nuestro 480 00:19:05,859 --> 00:19:08,299 criterio de ordenación, y efectivamente 481 00:19:08,299 --> 00:19:09,859 según nuestro 482 00:19:09,859 --> 00:19:11,900 criterio de ordenación, la lista 483 00:19:11,900 --> 00:19:13,799 se ha ordenado de 484 00:19:13,799 --> 00:19:15,000 mayor a menor 485 00:19:15,000 --> 00:19:20,000 vale, según nuestro 486 00:19:20,000 --> 00:19:28,980 criterio de ordenación, y aquí en el 487 00:19:28,980 --> 00:19:30,900 criterio de ordenación, uno pone lo que 488 00:19:30,900 --> 00:19:32,880 le dé la gana, hombre claro, lo que tenga 489 00:19:32,880 --> 00:19:34,339 que poner según lo que le estén pidiendo 490 00:19:34,339 --> 00:19:37,480 el criterio de ordenación es para comparar 491 00:19:37,480 --> 00:19:39,079 dos objetos sueltos, dos objetos 492 00:19:39,079 --> 00:19:40,640 y decir cual va antes que el otro 493 00:19:40,640 --> 00:19:45,950 vale 494 00:19:45,950 --> 00:19:48,930 bueno pues ya tenemos entonces 495 00:19:48,930 --> 00:19:52,009 la lista ordenada 496 00:19:52,009 --> 00:19:55,630 y ahora solicitar un número 497 00:19:55,630 --> 00:19:57,710 y eliminar de la lista tanto ese 498 00:19:57,710 --> 00:19:59,069 número como todos sus divisores 499 00:19:59,069 --> 00:20:01,690 eso es lo último que falta por hacer 500 00:20:01,690 --> 00:20:03,470 ahora ya para eliminar de la lista 501 00:20:03,470 --> 00:20:07,710 pues venga, hace de esta parte 502 00:20:07,710 --> 00:20:09,509 Eliminar de la lista ese número de sus divisores 503 00:20:09,509 --> 00:20:11,549 Y quien lo 504 00:20:11,549 --> 00:20:13,329 Tenga hecho 505 00:20:13,329 --> 00:20:14,410 Vale 506 00:20:14,410 --> 00:20:18,130 Este no nos vamos a meter ahora 507 00:20:18,130 --> 00:20:20,289 Porque el interés que tiene este 508 00:20:20,289 --> 00:20:22,589 Es comparar HACET y TRISET 509 00:20:22,589 --> 00:20:24,329 Y TRISET lo vamos a meter para el examen 510 00:20:24,329 --> 00:20:25,450 ¿Vale? 511 00:20:25,950 --> 00:20:28,130 Pero sí que nos vamos a quedar con esta frase 512 00:20:28,130 --> 00:20:31,390 Si cambiáramos 513 00:20:31,390 --> 00:20:34,230 Si nosotros ahora cambiáramos 514 00:20:34,230 --> 00:20:35,089 Nuestra aplicación 515 00:20:35,089 --> 00:20:37,509 Y dijéramos, oye he cambiado de idea 516 00:20:37,509 --> 00:20:40,690 He cambiado de idea, no quiero que los números estén en un list 517 00:20:40,690 --> 00:20:41,369 No quiero 518 00:20:41,369 --> 00:20:43,170 Quiero que estén en un set 519 00:20:43,170 --> 00:20:45,309 Pues hala 520 00:20:45,309 --> 00:20:50,759 ¿En qué tipo de set? Pues en este que es muy rápido 521 00:20:50,759 --> 00:20:52,319 Y muy eficiente, vale 522 00:20:52,319 --> 00:20:54,799 Bueno, he cambiado 523 00:20:54,799 --> 00:20:56,220 El contenedor, no pasa nada 524 00:20:56,220 --> 00:20:57,700 Ahora mi contenedor es un conjunto 525 00:20:57,700 --> 00:21:01,160 Vale, aquí va a haber algún problema 526 00:21:01,160 --> 00:21:02,839 No va a haber ninguno 527 00:21:02,839 --> 00:21:04,559 Simplemente que si meto 528 00:21:04,559 --> 00:21:06,180 Un número por segunda vez 529 00:21:06,180 --> 00:21:07,900 No entra, ya está 530 00:21:07,900 --> 00:21:10,680 ni me va a dar error de ejecución 531 00:21:10,680 --> 00:21:12,220 ni me va a dar nada, simplemente no lo va a meter 532 00:21:12,220 --> 00:21:13,599 le digo 3, 5, 3 533 00:21:13,599 --> 00:21:14,940 el siguiente 3 534 00:21:14,940 --> 00:21:18,180 no lo va a meter, ya está, nada más 535 00:21:18,180 --> 00:21:20,059 esa es la primera diferencia 536 00:21:20,059 --> 00:21:22,440 ¿y cuál es la siguiente diferencia? 537 00:21:23,440 --> 00:21:24,819 ahora ya es error de compilación 538 00:21:24,819 --> 00:21:26,119 que aquí ya no tiene sentido 539 00:21:26,119 --> 00:21:27,359 plantearse ordenar 540 00:21:27,359 --> 00:21:29,680 ¿vale? en los set 541 00:21:29,680 --> 00:21:32,180 no hay sort, porque aquí no hay posiciones 542 00:21:32,180 --> 00:21:33,799 ¿qué significa ordenar en un conjunto? 543 00:21:33,859 --> 00:21:34,940 ¿en un conjunto están todos ahí? 544 00:21:36,140 --> 00:21:37,519 ordenar se ordena en las filas 545 00:21:37,519 --> 00:21:39,180 Una fila se ordena 546 00:21:39,180 --> 00:21:40,319 Y una fila es una lista 547 00:21:40,319 --> 00:21:42,180 Pero un conjunto no 548 00:21:42,180 --> 00:21:44,700 Entonces en un conjunto no tiene sentido 549 00:21:44,700 --> 00:21:46,700 Plantearse ordenar 550 00:21:46,700 --> 00:21:47,259 ¿Vale? 551 00:21:51,009 --> 00:21:56,779 Bueno, pero nosotros no estamos trabajando 552 00:21:56,779 --> 00:21:59,559 Sino con esto ahora mismo 553 00:21:59,559 --> 00:22:03,289 Venga 554 00:22:03,289 --> 00:22:03,910 Pues 555 00:22:03,910 --> 00:22:05,630 Haced lo de 556 00:22:05,630 --> 00:22:08,750 Haced eso, los que hayáis acabado 557 00:22:08,750 --> 00:22:11,049 Este 2 pasáis de él 558 00:22:11,049 --> 00:22:12,190 Porque el tricet no lo tenemos 559 00:22:12,190 --> 00:22:14,910 Y se supone 560 00:22:14,910 --> 00:22:19,259 3, 4 y 5 es lo mismo 561 00:22:19,259 --> 00:22:20,859 todo el rato, pues clases 562 00:22:20,859 --> 00:22:22,940 unas contienen cosas de otras, etc 563 00:22:22,940 --> 00:22:25,059 pues 3, 4 y 5 564 00:22:25,059 --> 00:22:27,519 aquí hicimos el 3 565 00:22:27,519 --> 00:22:29,359 en clase que lo tengo 566 00:22:29,359 --> 00:22:31,240 en el proyecto ese en el que estoy incorporando 567 00:22:31,240 --> 00:22:32,599 esto otro, hicimos el 3 568 00:22:32,599 --> 00:22:35,140 pues 4 y 5 lo hacéis 569 00:22:35,140 --> 00:22:36,740 para que sea otra vez lo mismo 570 00:22:36,740 --> 00:22:38,779 y 571 00:22:38,779 --> 00:22:43,259 y el 7 y el 8 572 00:22:43,259 --> 00:22:44,400 no, porque ya son más 573 00:22:44,400 --> 00:22:45,740 ¿vale? 574 00:22:46,279 --> 00:22:50,059 Pero ahora mismo, a corto plazo, pues esto.