1 00:00:01,199 --> 00:00:29,300 Bueno, pues este enunciado, lo primero, como de costumbre, leerlo y entender lo que dice, programa que lee números, un número, otro número, otro número, otro número, que lee se refiere, que los va solicitando por teclado, introduzca número, píldole, introduzca número, píldole, así todo el rato, todo el rato, hasta el fin de los tiempos, no, hasta que el que está introduciendo los datos meta un cero, vale. 2 00:00:29,300 --> 00:00:31,660 Pues muy bien, esa parte entendida 3 00:00:31,660 --> 00:00:36,039 Ahí ya se nos activa la bombilla de decir 4 00:00:36,039 --> 00:00:38,079 Vale, esto es un bucle 5 00:00:38,079 --> 00:00:41,460 Porque hay una cosa que se hace un montón de veces 6 00:00:41,460 --> 00:00:44,700 Que es solicitar número, leerlo, solicitar número, leerlo 7 00:00:44,700 --> 00:00:46,880 Ya se nos activa la bombilla de que hay un bucle ahí 8 00:00:46,880 --> 00:00:48,100 ¿Vale? 9 00:00:48,820 --> 00:00:51,240 Bueno, ¿y cuál es el objetivo del programa? 10 00:00:51,240 --> 00:00:55,899 Algún objetivo tendrá, no estar todo el rato solicito, leo, solicito, leo, solicito, leo 11 00:00:55,899 --> 00:00:57,619 Bueno, lo hice después 12 00:00:57,619 --> 00:00:59,619 tendrá que contar 13 00:00:59,619 --> 00:01:02,060 cuántos de esos números 14 00:01:02,060 --> 00:01:03,820 que se han introducido previamente 15 00:01:03,820 --> 00:01:04,480 es negativo 16 00:01:04,480 --> 00:01:07,200 luego ahí se nos enciende ya otra bombilla 17 00:01:07,200 --> 00:01:09,620 de ah vale, el objetivo del programa es contar 18 00:01:09,620 --> 00:01:11,459 ya sabemos que contar 19 00:01:11,459 --> 00:01:13,700 se hace siempre en el contexto de un bucle 20 00:01:13,700 --> 00:01:14,500 siempre 21 00:01:14,500 --> 00:01:17,359 para contar ya sabemos 22 00:01:17,359 --> 00:01:18,760 porque nos lo hemos aprendido 23 00:01:18,760 --> 00:01:19,939 porque ya lo hemos visto en ejemplo 24 00:01:19,939 --> 00:01:21,340 entonces uno ya se lo aprende 25 00:01:21,340 --> 00:01:23,340 primero lo entiende 26 00:01:23,340 --> 00:01:25,540 después se lo aprende 27 00:01:25,540 --> 00:01:27,000 y ya deja ahí el conocimiento 28 00:01:27,000 --> 00:01:29,500 para que ese conocimiento pueda hacer 29 00:01:29,500 --> 00:01:32,060 ese pin encendérsele a la bombilla 30 00:01:32,060 --> 00:01:33,060 cuando tú le salgo 31 00:01:33,060 --> 00:01:35,379 si no tienes el conocimiento ahí 32 00:01:35,379 --> 00:01:36,879 nunca se te va a encender esa bombilla 33 00:01:36,879 --> 00:01:39,900 vale, pues como nosotros ya hemos entendido 34 00:01:39,900 --> 00:01:41,579 lo que es un contador y nos hemos aprendido 35 00:01:41,579 --> 00:01:42,340 cómo se usa 36 00:01:42,340 --> 00:01:44,939 pues ya está, esto va a implicar 37 00:01:44,939 --> 00:01:47,620 que yo tenga que usar una variable contadora 38 00:01:47,620 --> 00:01:48,640 que inicializa a cero 39 00:01:48,640 --> 00:01:51,719 porque las cuentas siempre se inicializan a cero 40 00:01:51,719 --> 00:01:54,719 y dentro del bucle 41 00:01:54,719 --> 00:01:56,560 al cual está asociado el contador 42 00:01:56,560 --> 00:01:58,620 porque los contadores siempre asociados 43 00:01:58,620 --> 00:02:00,439 a un bucle, dentro de ese bucle 44 00:02:00,439 --> 00:02:02,799 se tendrá que ir incrementando 45 00:02:02,799 --> 00:02:04,459 la cuenta en cada iteración 46 00:02:04,459 --> 00:02:06,299 se tendrá que ir incrementando la cuenta 47 00:02:06,299 --> 00:02:08,800 conforme vayan ocurriendo 48 00:02:08,800 --> 00:02:10,419 las cosas que tengo que contar 49 00:02:10,419 --> 00:02:12,680 ¿tengo que contar las todas? 50 00:02:13,080 --> 00:02:13,840 las iteraciones 51 00:02:13,840 --> 00:02:16,680 no, aquí tendré que contar sólo 52 00:02:16,680 --> 00:02:18,759 las iteraciones que se correspondan 53 00:02:18,759 --> 00:02:20,199 con números negativos 54 00:02:20,199 --> 00:02:22,759 luego una cuenta 55 00:02:22,759 --> 00:02:24,800 siempre está asociada 56 00:02:24,800 --> 00:02:28,120 a una variable contadora que se inicializa a cero, y a un bucle. 57 00:02:29,120 --> 00:02:37,919 Y ese contador se irá incrementando, irá contando en las iteraciones del bucle que corresponda, 58 00:02:38,599 --> 00:02:42,680 en las que ocurra lo que tiene que contar, en las que ocurra, no todas. 59 00:02:45,020 --> 00:02:50,000 Entonces mi cuenta, alumnos que pasan por la puerta que son rubios, 60 00:02:51,000 --> 00:02:54,099 pues el bucle es alumno pasa, alumno pasa, alumno pasa. 61 00:02:54,800 --> 00:02:59,819 Mi variable contadora, alumno pasa, moreno, bueno, lo incremento. 62 00:02:59,919 --> 00:03:01,460 Alumno pasa, moreno, lo incremento. 63 00:03:01,539 --> 00:03:04,340 Siguiente iteración, alumno pasa, rubio, ahí lo incremento, ¿vale? 64 00:03:04,340 --> 00:03:10,159 Entonces, el contador se incrementa, su incremento ocurre siempre dentro del bucle, 65 00:03:10,719 --> 00:03:15,939 pero no en todas las iteraciones, solo en las que se correspondan con el hecho que hay que contar. 66 00:03:15,939 --> 00:03:18,219 bueno, pues entonces 67 00:03:18,219 --> 00:03:19,659 si 68 00:03:19,659 --> 00:03:22,199 automáticamente ya 69 00:03:22,199 --> 00:03:25,099 tenemos el concepto de bucle en la cabeza 70 00:03:25,099 --> 00:03:26,240 el concepto de contador 71 00:03:26,240 --> 00:03:28,479 en cuanto leemos esto, pues ya vemos 72 00:03:28,479 --> 00:03:29,699 vemos el problema en la cabeza 73 00:03:29,699 --> 00:03:32,860 pues un bucle que está haciendo algo un montón de veces 74 00:03:32,860 --> 00:03:35,419 un contador que se va incrementando cuando pase ese algo 75 00:03:35,419 --> 00:03:37,039 ese algo que será 76 00:03:37,039 --> 00:03:38,439 número negativo 77 00:03:38,439 --> 00:03:40,819 ¿sé poner número negativo en condición? 78 00:03:41,000 --> 00:03:42,020 sí, menor que cero 79 00:03:42,020 --> 00:03:44,740 pues ya casi tengo todos los elementos que necesito 80 00:03:44,740 --> 00:03:46,460 para hacer este código 81 00:03:46,460 --> 00:03:47,080 entonces ya 82 00:03:47,080 --> 00:03:50,219 uno empieza a hacer su primera versión 83 00:03:50,219 --> 00:03:52,460 sobre la que luego va iterando 84 00:03:52,460 --> 00:03:55,219 empieza a hacer su primera versión 85 00:03:55,219 --> 00:03:57,439 entonces como tenemos que leer del teclado 86 00:03:57,439 --> 00:03:58,680 pues un escáner 87 00:03:58,680 --> 00:04:00,879 habrá que usar 88 00:04:00,879 --> 00:04:02,080 lógicamente 89 00:04:02,080 --> 00:04:13,650 vale, y hemos dicho 90 00:04:13,650 --> 00:04:15,969 esto va a necesitar un bucle 91 00:04:15,969 --> 00:04:16,589 sí o sí 92 00:04:16,589 --> 00:04:18,550 un bucle sí o sí 93 00:04:18,550 --> 00:04:22,189 porque hago muchas veces algo 94 00:04:22,189 --> 00:04:30,889 En este caso leer por el teclado. Bueno, pues va a necesitar un bucle, la estructura de bucle es algo así, aquí dentro del bloque de llaves lo que se repite. 95 00:04:31,610 --> 00:04:37,889 Pues, ¿qué es lo que se repite? Pues en particular se repite lo de pedir número, leerlo, pedir número, leerlo. 96 00:04:37,889 --> 00:04:41,430 pues venga, pedir número 97 00:04:41,430 --> 00:04:50,100 y leerlo, ¿qué significa leerlo? 98 00:04:50,420 --> 00:04:53,759 leerlo significa recoger el valor de la consola 99 00:04:53,759 --> 00:04:57,639 y asignárselo a la variable que a mí me dé la gana, eso significa leer 100 00:04:57,639 --> 00:05:01,620 un valor del teclado, ¿no? entonces, a una 101 00:05:01,620 --> 00:05:04,120 variable, pues por ejemplo 102 00:05:04,120 --> 00:05:09,399 esta, este es el número que yo voy a leer del teclado 103 00:05:09,399 --> 00:05:15,639 bueno, pues ya he hecho parte del programa 104 00:05:15,639 --> 00:05:18,180 que es, esto lo voy a hacer un montón de veces 105 00:05:18,180 --> 00:05:22,560 introduzca número, léelo, introduzca número, léelo, introduzca número, léelo 106 00:05:22,560 --> 00:05:23,279 vale 107 00:05:23,279 --> 00:05:27,360 el objetivo del programa ya he leído antes que es 108 00:05:27,360 --> 00:05:30,779 contar cuántos de estos números son negativos 109 00:05:30,779 --> 00:05:33,279 pues contar va a implicar 110 00:05:33,279 --> 00:05:35,160 una variable contadora 111 00:05:35,160 --> 00:05:37,319 inicializada a cero 112 00:05:37,319 --> 00:05:39,500 que es la que va a llevar la cuenta 113 00:05:39,500 --> 00:05:46,500 Y ahora esa variable se va a incrementar dentro del bucle cuando corresponda, ¿vale? 114 00:05:47,620 --> 00:05:53,959 En cada iteración del bucle, en cada vuelta, en cada iteración, toca incrementarla. 115 00:05:54,319 --> 00:05:57,620 Hay que contar todas las iteraciones, todas, todas, todas. 116 00:05:58,439 --> 00:05:59,879 No hay que contarlas todas, ¿no? 117 00:05:59,879 --> 00:06:02,060 hay que contar solo 118 00:06:02,060 --> 00:06:03,939 hay que contar solo 119 00:06:03,939 --> 00:06:06,699 las iteraciones en las cuales 120 00:06:06,699 --> 00:06:09,040 se haya ingresado 121 00:06:09,040 --> 00:06:11,019 un número negativo 122 00:06:11,019 --> 00:06:12,759 solo hay que contar 123 00:06:12,759 --> 00:06:13,500 esas 124 00:06:13,500 --> 00:06:19,000 entonces ya tengo bastante 125 00:06:19,000 --> 00:06:20,939 hecho y para 126 00:06:20,939 --> 00:06:23,000 eso pues me he apoyado en cosas que ya 127 00:06:23,000 --> 00:06:24,800 he entendido de ejercicios 128 00:06:24,800 --> 00:06:27,060 anteriores que hemos hecho 129 00:06:27,060 --> 00:06:28,839 que pues ya me voy apoyando en eso 130 00:06:28,839 --> 00:06:31,060 y digo ah vale ya tengo mi idea clara en la cabeza 131 00:06:31,060 --> 00:06:33,319 pues la puedo aplicar a cualquier situación 132 00:06:33,319 --> 00:06:35,439 cuando uno tiene ya los conceptos 133 00:06:35,439 --> 00:06:37,079 claros ya puede dar el salto 134 00:06:37,079 --> 00:06:39,139 de aplicarlos con las pequeñas 135 00:06:39,139 --> 00:06:40,839 modificaciones que corresponda 136 00:06:40,839 --> 00:06:42,839 de aplicarlos a cualquier otra situación 137 00:06:42,839 --> 00:06:44,399 pues ala 138 00:06:44,399 --> 00:06:47,100 el programa está acabado, lógicamente no hay cosas 139 00:06:47,100 --> 00:06:47,959 aquí que me faltan 140 00:06:47,959 --> 00:06:51,199 bueno, para empezar por supuesto me faltaría mostrar el resultado 141 00:06:51,199 --> 00:06:51,639 final 142 00:06:51,639 --> 00:06:56,040 han sido 143 00:06:56,040 --> 00:06:59,360 con 144 00:06:59,360 --> 00:07:03,439 números negativos 145 00:07:03,439 --> 00:07:12,819 aquí para no arrastrar 146 00:07:12,819 --> 00:07:14,480 esto como pequeño inciso 147 00:07:14,480 --> 00:07:17,139 para no arrastrar cuando yo muestro 148 00:07:17,139 --> 00:07:18,680 mensajes dentro de un system out 149 00:07:18,680 --> 00:07:21,000 tan largos que son un rollo y que al final 150 00:07:21,000 --> 00:07:23,040 los acabo poniendo aquí abajo para que 151 00:07:23,040 --> 00:07:24,139 se vean en la pantalla 152 00:07:24,139 --> 00:07:26,600 pero queda un poco feo 153 00:07:26,600 --> 00:07:28,019 para no arrastrarlo 154 00:07:28,019 --> 00:07:30,639 me voy a acostumbrar a 155 00:07:30,639 --> 00:07:32,399 guardar primero 156 00:07:32,399 --> 00:07:34,620 el mensaje que quiero mostrar 157 00:07:34,620 --> 00:07:36,220 en un string 158 00:07:36,220 --> 00:07:39,100 y luego pasarle el string 159 00:07:39,100 --> 00:07:41,439 al system out este 160 00:07:41,439 --> 00:07:43,579 lo voy a empezar a hacer de esta manera 161 00:07:43,579 --> 00:07:45,079 porque se va a ver mejor el código 162 00:07:45,079 --> 00:07:47,720 y que gano, me diréis 163 00:07:47,720 --> 00:07:49,399 si ahora tengo que poner 164 00:07:49,399 --> 00:07:51,420 la línea larga igualmente 165 00:07:51,420 --> 00:07:53,500 no, porque tengo el string 166 00:07:53,500 --> 00:07:54,379 multilínea 167 00:07:54,379 --> 00:07:57,459 que os dije en su momento, que a partir 168 00:07:57,459 --> 00:07:59,259 de cierta versión de java se puede usar 169 00:07:59,259 --> 00:08:01,199 que es 170 00:08:01,199 --> 00:08:02,379 que tú pones aquí 171 00:08:02,379 --> 00:08:04,139 habido 172 00:08:04,139 --> 00:08:06,379 y 173 00:08:06,379 --> 00:08:39,070 En este caso, pues tampoco es que me ha habido, lo concateno aquí con número, hemos quedado, número y lo vuelvo a concatenar con otro, multilínea aquí y me voy aquí, números negativos. 174 00:08:39,070 --> 00:08:45,230 Números negativos 175 00:08:45,230 --> 00:08:48,710 Punto, aquí me aseguro que he puesto un espacio 176 00:08:48,710 --> 00:08:50,190 Y aquí pongo otro 177 00:08:50,190 --> 00:08:55,549 Vale, a ver, un string 178 00:08:55,549 --> 00:08:58,460 Número, he puesto aquí 179 00:08:58,460 --> 00:09:03,919 Ay, cont, jolines 180 00:09:03,919 --> 00:09:09,950 Vale, entonces 181 00:09:09,950 --> 00:09:12,250 Cuando tenéis que escribir un string muy largo 182 00:09:12,250 --> 00:09:13,690 Un string muy largo 183 00:09:13,690 --> 00:09:16,149 Pues el Java 184 00:09:16,149 --> 00:09:17,990 Simplemente el compilador de Java 185 00:09:17,990 --> 00:09:20,230 Te permite iniciarlo 186 00:09:20,230 --> 00:09:21,210 y cerrarlo 187 00:09:21,210 --> 00:09:24,450 con tres series de comillas 188 00:09:24,450 --> 00:09:26,330 dobles, iniciarlo y cerrarlo con tres series de comillas 189 00:09:26,330 --> 00:09:28,330 dobles, y aquí uno podría 190 00:09:28,330 --> 00:09:29,870 poner todas las líneas que quisiera 191 00:09:29,870 --> 00:09:31,669 ¿vale? 192 00:09:32,669 --> 00:09:34,210 entonces, ¿qué nos 193 00:09:34,210 --> 00:09:36,049 permite el string este 194 00:09:36,049 --> 00:09:37,929 multilínea iniciado y cerrado 195 00:09:37,929 --> 00:09:40,330 con una secuencia de tres dobles 196 00:09:40,330 --> 00:09:42,169 comillas? es string 197 00:09:42,169 --> 00:09:44,330 ponerlo en varias líneas, y no tener que escribirlo 198 00:09:44,330 --> 00:09:46,029 todo seguido, que solo 199 00:09:46,029 --> 00:09:48,049 efectos de verlo, en el código aquí 200 00:09:48,049 --> 00:09:49,850 de verlo, nada más, el string es el mismo 201 00:09:49,850 --> 00:09:52,149 luego cuando se guarda en memoria, como variable 202 00:09:52,149 --> 00:09:54,110 es el mismo, pero solo a efectos 203 00:09:54,110 --> 00:09:55,929 de verlo, pues mucho más bonito 204 00:09:55,929 --> 00:09:58,269 así, que si no 205 00:09:58,269 --> 00:10:00,110 si yo quiero varias líneas 206 00:10:00,110 --> 00:10:02,370 pues tendría que ponerlo así 207 00:10:02,370 --> 00:10:04,110 ha habido 208 00:10:04,710 --> 00:10:06,409 ahora 209 00:10:06,409 --> 00:10:08,110 tendría que concatenarlo 210 00:10:08,110 --> 00:10:10,350 con la línea 211 00:10:10,350 --> 00:10:12,090 que fuera, bajándome aquí abajo 212 00:10:12,090 --> 00:10:14,129 vale 213 00:10:14,129 --> 00:10:16,070 no me puedo bajar 214 00:10:16,070 --> 00:10:17,529 abajo de golpe, tendría que 215 00:10:17,529 --> 00:10:31,879 partirlo y poner aquí el otro string que es un rollo entonces vale bueno pues os podéis 216 00:10:31,879 --> 00:10:48,399 acostumbrar al string este porque lo vais a ver en cualquier situación vale empieza y se cierra 217 00:10:48,399 --> 00:10:55,820 con triples dobles comillas y eso nos permite poner varias líneas sin necesidad de tener que 218 00:10:55,820 --> 00:10:57,700 concatenar una línea con otra, una línea con otra 219 00:10:57,700 --> 00:11:01,539 todo el rato, bueno pues entonces 220 00:11:01,539 --> 00:11:03,360 yo voy a dejarlo así más cortito 221 00:11:03,360 --> 00:11:10,980 y 222 00:11:10,980 --> 00:11:12,679 ya está, vale 223 00:11:12,679 --> 00:11:14,139 bueno pues 224 00:11:14,139 --> 00:11:17,639 ya hemos hecho la parte del programa que nos 225 00:11:17,639 --> 00:11:19,279 faltaba, que era mostrar el resultado 226 00:11:19,279 --> 00:11:21,720 venga, muy bien, mostrar el resultado, pero este programa 227 00:11:21,720 --> 00:11:23,419 sigue, le faltan cosas 228 00:11:23,419 --> 00:11:25,480 porque el bucle cuando acaba 229 00:11:25,480 --> 00:11:27,779 vale, me falta la condición 230 00:11:27,779 --> 00:11:28,279 del bucle 231 00:11:28,279 --> 00:11:31,820 y todos recordamos que significa la condición 232 00:11:31,820 --> 00:11:32,539 que se pone ahí 233 00:11:32,539 --> 00:11:54,440 Ahí se pondrá una condición que mientras sea cierta entramos en el bucle, entonces llegamos por primera vez, evaluamos condición, si es cierta entramos, llegamos y volvemos arriba, volvemos a evaluar, si es cierta entramos y volvemos arriba, que ya es falsa, salimos, ¿vale? 234 00:11:54,440 --> 00:11:59,320 Ya sabemos lo que significa esa condición, ya la hemos entendido de varios ejemplos. 235 00:11:59,940 --> 00:12:09,480 Vale, pues aquí nos tendremos que plantear poner una condición que cuando sea falsa, se acabó, salgo del bucle. 236 00:12:09,740 --> 00:12:11,820 Y cuando sea cierta, vuelvo a entrar. 237 00:12:12,980 --> 00:12:16,360 Entonces, para eso tenemos que recordar el enunciado, a ver qué me dice. 238 00:12:17,000 --> 00:12:21,840 El programa tiene que estar leyendo números todo el rato hasta que se introduzca un cero. 239 00:12:21,840 --> 00:12:24,080 Cuando se introduce un cero, tiene que cambiar. 240 00:12:24,440 --> 00:12:25,840 Perdón, tiene que terminar. 241 00:12:26,899 --> 00:12:27,100 Vale. 242 00:12:27,740 --> 00:12:30,059 Pues entonces, ¿qué condición se os ocurriría poner aquí? 243 00:12:30,059 --> 00:12:38,700 Para que el bucle, cada vez que tú introduzcas un número que no sea cero, vuelva otra vez arriba, vuelva otra vez arriba. 244 00:12:38,840 --> 00:12:44,460 Cuando tú has introducido un número que es cero, ya no vuelve a pedirte más números y el bucle termina. 245 00:12:44,659 --> 00:12:45,779 ¿Qué condición pondríais ahí? 246 00:12:52,799 --> 00:12:54,240 Venga, que alguien me diga, lo que sea. 247 00:12:59,059 --> 00:13:00,720 Dictádmelo tal cual lo escribiríais. 248 00:13:00,740 --> 00:13:03,000 con los nombres de variables que tengo yo ahí 249 00:13:03,000 --> 00:13:03,299 y todo 250 00:13:03,299 --> 00:13:19,179 los negativos también valen 251 00:13:19,179 --> 00:13:21,299 o sea, la única condición 252 00:13:21,299 --> 00:13:23,519 que hace que ya no haya 253 00:13:23,519 --> 00:13:24,919 más peticiones es que tú pongas 254 00:13:24,919 --> 00:13:25,720 cero 255 00:13:25,720 --> 00:13:32,980 claro, tú piensa que ahí pones 256 00:13:32,980 --> 00:13:33,879 la condición 257 00:13:33,879 --> 00:13:36,379 opuesta a la de salida 258 00:13:36,379 --> 00:13:38,259 la opuesta a la de salida 259 00:13:38,259 --> 00:13:38,799 siempre 260 00:13:38,799 --> 00:13:46,600 o sea, esta es la opuesta a la de salida 261 00:13:46,600 --> 00:13:47,639 ¿cuándo vas a salir tú? 262 00:13:48,279 --> 00:13:50,799 claro, salimos 263 00:13:50,799 --> 00:13:52,320 cuando el número sea igual a cero 264 00:13:52,320 --> 00:13:53,220 entonces normalmente 265 00:13:53,220 --> 00:13:57,059 nosotros identificamos más fácilmente 266 00:13:57,059 --> 00:13:58,600 la condición que haga que salgamos 267 00:13:58,600 --> 00:14:00,919 pues en este caso el número es igual a cero 268 00:14:00,919 --> 00:14:02,519 o aquí pues cuando 269 00:14:02,519 --> 00:14:04,240 están pasando alumnos 270 00:14:04,240 --> 00:14:06,240 cuando Rubio, Moreno, yo voy contando 271 00:14:06,240 --> 00:14:08,000 pues cuando pasa un alumno sin pelo 272 00:14:08,000 --> 00:14:10,039 nosotros normalmente identificamos 273 00:14:10,039 --> 00:14:11,600 más fácilmente de palabra 274 00:14:11,600 --> 00:14:13,600 la condición que hace que el bucle termine 275 00:14:13,600 --> 00:14:15,960 vale, pero lo que tenemos que pensar 276 00:14:15,960 --> 00:14:17,200 es que la que ponemos aquí 277 00:14:17,200 --> 00:14:19,840 tiene que ser justo la negada de esa 278 00:14:19,840 --> 00:14:22,220 porque esta condición significa 279 00:14:22,220 --> 00:14:24,240 si esto ocurre, vuelvo a entrar 280 00:14:24,240 --> 00:14:25,460 no termino 281 00:14:25,460 --> 00:14:27,299 con lo cual esta tiene que ser siempre 282 00:14:27,299 --> 00:14:29,940 la condición opuesta o negada 283 00:14:29,940 --> 00:14:31,559 de la que hace que el bucle 284 00:14:31,559 --> 00:14:32,899 termine 285 00:14:32,899 --> 00:14:35,919 entonces en este caso, el bucle cuando ya no va a pedir 286 00:14:35,919 --> 00:14:37,360 más números y va a continuar 287 00:14:37,360 --> 00:14:39,039 ya el programa o lo que sea 288 00:14:39,039 --> 00:14:41,720 cuando el número sea igual a cero, pues aquí hay que poner 289 00:14:41,720 --> 00:14:43,360 exactamente la negada 290 00:14:43,360 --> 00:14:45,200 ¿vale? entonces 291 00:14:45,200 --> 00:14:47,559 si pusiéramos exactamente la negada 292 00:14:47,559 --> 00:14:49,500 estaríamos poniendo esto, ¿verdad? 293 00:14:49,600 --> 00:14:51,200 podríamos poner, mientras 294 00:14:51,200 --> 00:14:53,299 no 295 00:14:53,299 --> 00:14:56,019 número igual a cero, o sea, esta es mi condición 296 00:14:56,019 --> 00:14:59,080 esta es mi condición 297 00:14:59,080 --> 00:15:01,759 para que se vea mejor con los paréntesis 298 00:15:01,759 --> 00:15:03,759 esta es mi condición de salida 299 00:15:03,759 --> 00:15:05,580 cuando número igual a cero 300 00:15:05,580 --> 00:15:06,279 me voy fuera 301 00:15:06,279 --> 00:15:09,200 pero la que tengo que poner aquí dentro 302 00:15:09,200 --> 00:15:11,000 es justo la opuesta 303 00:15:11,000 --> 00:15:13,980 porque lo que se pone aquí dentro es la condición 304 00:15:13,980 --> 00:15:15,580 que si se cumple 305 00:15:15,580 --> 00:15:16,679 entras otra vez 306 00:15:16,679 --> 00:15:20,059 luego tienes que poner la opuesta a la que te hace salir 307 00:15:20,059 --> 00:15:20,980 ¿vale? 308 00:15:21,059 --> 00:15:23,559 entonces como la que te hace salir es número igual a cero 309 00:15:23,559 --> 00:15:25,220 pues aquí la opuesta 310 00:15:25,220 --> 00:15:26,240 ¿vale? 311 00:15:27,240 --> 00:15:29,279 pero claro, esto así escrito está bien 312 00:15:29,279 --> 00:15:31,360 esta condición está bien, arreglamos eso del rojo 313 00:15:31,360 --> 00:15:32,320 esto está bien 314 00:15:32,320 --> 00:15:34,039 pero 315 00:15:34,039 --> 00:15:37,019 es muy fea 316 00:15:37,019 --> 00:15:38,320 decir no 317 00:15:38,320 --> 00:15:40,700 número igual a cero es mucho mejor 318 00:15:40,700 --> 00:15:42,519 poner número distinto de cero 319 00:15:42,519 --> 00:15:44,000 es más bonito 320 00:15:44,000 --> 00:15:46,740 entonces para qué poner no número igual 321 00:15:46,740 --> 00:15:48,779 a cero si podemos poner número distinto 322 00:15:48,779 --> 00:15:50,220 de cero y nos queda todo más chulo 323 00:15:50,220 --> 00:15:54,279 ¿vale? entonces esto empieza 324 00:15:54,279 --> 00:15:56,279 ya a aproximarse, tiene el boceto de nuestro 325 00:15:56,279 --> 00:15:57,019 programa final 326 00:15:57,019 --> 00:16:00,200 mientras el número leído sea diferente 327 00:16:00,200 --> 00:16:00,840 de cero 328 00:16:00,840 --> 00:16:03,620 pues pido número 329 00:16:03,620 --> 00:16:06,080 y si es negativo lo cuento 330 00:16:06,080 --> 00:16:07,919 vale, tiene pinta de que esto ya 331 00:16:07,919 --> 00:16:09,639 y luego ya muestro mi resultado 332 00:16:09,639 --> 00:16:10,840 vale 333 00:16:10,840 --> 00:16:14,840 pero aquí 334 00:16:14,840 --> 00:16:17,659 ya hay algo raro y de hecho ya me está avisando 335 00:16:17,659 --> 00:16:19,740 el compilador con un error de compilación 336 00:16:19,740 --> 00:16:20,940 que me lo pone aquí en rojo 337 00:16:20,940 --> 00:16:22,899 vale 338 00:16:22,899 --> 00:16:25,179 entonces 339 00:16:25,179 --> 00:16:27,600 sin mirar el aviso que me está dando 340 00:16:27,600 --> 00:16:30,139 ¿por qué creéis que el compilador 341 00:16:30,139 --> 00:16:31,639 que esto ya nos ha salido 342 00:16:31,639 --> 00:16:33,600 otras veces, ¿por qué creéis que el compilador 343 00:16:33,600 --> 00:16:34,700 se está quejando ahí? 344 00:16:35,059 --> 00:16:47,000 Y está diciendo, oye, no, dime, exactamente, porque una variable no puede usarse antes de su declaración, nunca. 345 00:16:47,860 --> 00:16:51,940 Siempre tiene que estar declarada antes de su primer uso, ¿vale? 346 00:16:52,240 --> 00:17:00,840 Entonces, aquí la estamos usando, la estamos usando para evaluar una condición. 347 00:17:00,840 --> 00:17:04,500 pero la variable no está declarada 348 00:17:04,500 --> 00:17:06,359 porque yo cuando estaba 349 00:17:06,359 --> 00:17:08,140 haciendo el programa, como estaba tirando así 350 00:17:08,140 --> 00:17:09,500 haciéndolo pipas pipas 351 00:17:09,500 --> 00:17:12,380 pues la he declarado aquí en el momento de leerlo 352 00:17:12,380 --> 00:17:14,599 entonces pues no es su sitio 353 00:17:14,599 --> 00:17:16,380 tendría que declararla antes 354 00:17:16,380 --> 00:17:16,880 ¿vale? 355 00:17:18,019 --> 00:17:19,900 entonces yo puedo arreglar esto 356 00:17:19,900 --> 00:17:21,180 declarándola antes 357 00:17:21,180 --> 00:17:24,730 ¿vale? 358 00:17:25,670 --> 00:17:27,210 vale, pues entonces 359 00:17:27,210 --> 00:17:31,769 yo la declaro antes 360 00:17:31,769 --> 00:17:36,569 y entonces 361 00:17:36,569 --> 00:17:38,089 ya puedo usarla 362 00:17:38,089 --> 00:17:40,930 a partir de este punto, puedo usarla 363 00:17:40,930 --> 00:17:42,630 entonces según esto, pues yo quito esto 364 00:17:42,630 --> 00:17:44,589 y se acabó, perdón, vale 365 00:17:44,589 --> 00:17:47,559 vale 366 00:17:47,559 --> 00:17:50,460 pero de nuevo, ya esto 367 00:17:50,460 --> 00:17:52,759 podría acercarse más a mi resultado 368 00:17:52,759 --> 00:17:54,380 final, pero de nuevo 369 00:17:54,380 --> 00:17:56,200 el compilador me está diciendo 370 00:17:56,200 --> 00:17:58,079 hay algo que no me gusta y que 371 00:17:58,079 --> 00:18:00,500 no te dejo seguir, no te dejo 372 00:18:00,500 --> 00:18:02,480 que ejecutes este programa, porque aquí hay algo 373 00:18:02,480 --> 00:18:03,819 que no me gusta, por eso está en rojo 374 00:18:03,819 --> 00:18:07,039 pues de nuevo, que no le gusta al compilador 375 00:18:07,039 --> 00:18:08,059 y por qué 376 00:18:08,059 --> 00:18:09,559 no nos deja 377 00:18:09,559 --> 00:18:12,119 compilar y ejecutar ese programa. 378 00:18:21,140 --> 00:18:22,059 Claro, no tiene 379 00:18:22,059 --> 00:18:23,920 valor en este momento. Entonces, cuando 380 00:18:23,920 --> 00:18:24,640 se usa 381 00:18:24,640 --> 00:18:27,299 cuando se usa 382 00:18:27,299 --> 00:18:32,190 un valor en una 383 00:18:32,190 --> 00:18:34,450 expresión, en este caso es una expresión booleana, 384 00:18:34,950 --> 00:18:36,069 pero podría estarse usando 385 00:18:36,069 --> 00:18:37,930 para hacer una suma, lo que fuera. 386 00:18:38,490 --> 00:18:40,109 Cuando se usa un valor dentro de una 387 00:18:40,109 --> 00:18:40,750 expresión, 388 00:18:42,349 --> 00:18:43,789 se asume que 389 00:18:43,789 --> 00:18:46,210 una variable, perdón. Cuando se usa una variable 390 00:18:46,210 --> 00:18:48,630 dentro de una expresión se asume que esa variable 391 00:18:48,630 --> 00:18:50,470 ha llegado a este punto 392 00:18:50,470 --> 00:18:51,670 ha llegado a este punto 393 00:18:51,670 --> 00:18:53,630 con un valor dentro asignado 394 00:18:53,630 --> 00:18:56,589 porque si no ha llegado con un valor dentro asignado 395 00:18:56,589 --> 00:18:57,849 si esta es mi variable número 396 00:18:57,849 --> 00:19:00,289 la cajita de memoria que tiene mi variable número 397 00:19:00,289 --> 00:19:01,509 es esta 398 00:19:01,509 --> 00:19:04,430 si no tiene nada asignado 399 00:19:04,430 --> 00:19:06,710 no he hecho ninguna asignación 400 00:19:06,710 --> 00:19:08,210 cuando ahora 401 00:19:08,210 --> 00:19:09,829 la máquina virtual tenga que 402 00:19:09,829 --> 00:19:11,890 coger el valor que tiene dentro 403 00:19:11,890 --> 00:19:13,150 para compararlo con cero 404 00:19:13,150 --> 00:19:15,930 pues dirá, uy, en esta caja no hay nada 405 00:19:15,930 --> 00:19:17,990 nadie ha metido nada, no puedo usar 406 00:19:17,990 --> 00:19:20,529 el valor de esta variable para la expresión 407 00:19:20,529 --> 00:19:22,309 correspondiente, no puedo usarlo 408 00:19:22,309 --> 00:19:23,349 porque nadie ha metido nada 409 00:19:23,349 --> 00:19:25,569 entonces efectivamente 410 00:19:25,569 --> 00:19:28,269 lo que nos está diciendo es 411 00:19:28,269 --> 00:19:30,410 que número no está inicializado 412 00:19:30,410 --> 00:19:31,509 entonces 413 00:19:31,509 --> 00:19:33,950 a ver, en realidad sí lo está 414 00:19:33,950 --> 00:19:34,930 porque 415 00:19:34,930 --> 00:19:37,849 la RAM, sus ceros y unos 416 00:19:37,849 --> 00:19:39,630 sus diestables 417 00:19:39,630 --> 00:19:42,069 tienen que tener cosas, no tiene la nada 418 00:19:42,069 --> 00:19:43,529 o tiene ceros o tiene unos 419 00:19:43,529 --> 00:19:44,549 entonces 420 00:19:44,549 --> 00:19:47,509 Java por defecto 421 00:19:47,509 --> 00:19:48,690 cuando tú declaras una variable 422 00:19:48,690 --> 00:19:49,710 inicializa cero 423 00:19:49,710 --> 00:19:53,170 pero el compilador te dice 424 00:19:53,170 --> 00:19:54,690 la inicialización que tienes 425 00:19:54,690 --> 00:19:56,009 la inicialización por defecto 426 00:19:56,009 --> 00:19:58,349 mira que me extraña que la inicialización por defecto 427 00:19:58,349 --> 00:19:59,509 coincida con la que quieres tú 428 00:19:59,509 --> 00:20:02,349 haz tú una explícita 429 00:20:02,349 --> 00:20:04,089 es la que nos está diciendo 430 00:20:04,089 --> 00:20:06,069 haz tú una inicialización que tú quieras 431 00:20:06,069 --> 00:20:09,250 yo no voy a confiar en la de por defecto 432 00:20:09,250 --> 00:20:10,769 que esa 433 00:20:10,769 --> 00:20:12,109 te valga 434 00:20:12,990 --> 00:20:13,470 ¿Vale? 435 00:20:14,009 --> 00:20:16,930 Bueno, pues entonces, ¿cómo podríamos arreglar esto? 436 00:20:21,720 --> 00:20:22,200 Perfecto. 437 00:20:22,380 --> 00:20:24,359 Hay una solución que es la más fácil, que es, 438 00:20:24,619 --> 00:20:28,880 yo lo que quiero es que entre en el bucle una primera vez, 439 00:20:28,940 --> 00:20:29,980 que entre en el bucle una primera, 440 00:20:30,099 --> 00:20:32,140 porque la primera vez tiene que entrar sí o sí, 441 00:20:32,259 --> 00:20:33,740 porque el primer número lo necesito. 442 00:20:34,539 --> 00:20:35,980 El primer número lo necesito. 443 00:20:36,380 --> 00:20:37,059 ¿Qué es este? 444 00:20:37,240 --> 00:20:38,339 Vale, ya no entro más veces. 445 00:20:38,839 --> 00:20:41,819 Pero una primera vez tengo que entrar sí o sí para leer el primero. 446 00:20:41,819 --> 00:20:43,940 pues como me las puedo apañar 447 00:20:43,940 --> 00:20:45,200 para forzar 448 00:20:45,200 --> 00:20:47,160 que esta condición 449 00:20:47,160 --> 00:20:49,519 la primera vez 450 00:20:49,519 --> 00:20:50,920 sea cierta si o si 451 00:20:50,920 --> 00:20:53,940 queremos que la primera vez sea cierta si o si 452 00:20:53,940 --> 00:20:55,440 pues le damos a número 453 00:20:55,440 --> 00:20:57,799 cualquier valor diferente de 0 454 00:20:57,799 --> 00:20:58,380 cualquiera 455 00:20:58,380 --> 00:21:01,519 y entonces ya automáticamente el while 456 00:21:01,519 --> 00:21:03,599 entra una primera vez 457 00:21:03,599 --> 00:21:05,720 porque esa primera vez es que tiene que entrar 458 00:21:05,720 --> 00:21:07,660 si o si, queremos que entre si o si 459 00:21:07,660 --> 00:21:08,920 para leer el primero 460 00:21:08,920 --> 00:21:11,460 entonces este sería el arreglo más sencillo 461 00:21:11,460 --> 00:21:13,539 lo inicializamos a cualquier valor 462 00:21:13,539 --> 00:21:14,900 diferente de cero 463 00:21:14,900 --> 00:21:17,079 entra y ya lee el primero 464 00:21:17,079 --> 00:21:19,599 y a partir de ahí ya lo cuenta 465 00:21:19,599 --> 00:21:20,380 si es negativo 466 00:21:20,380 --> 00:21:22,700 y vuelve, era cero 467 00:21:22,700 --> 00:21:25,460 ese que has metido, ese último, no, no era cero 468 00:21:25,460 --> 00:21:26,680 pues otro segundo 469 00:21:26,680 --> 00:21:28,519 y lo cuenta si es negativo 470 00:21:28,519 --> 00:21:31,279 era cero ese último, pues sí 471 00:21:31,279 --> 00:21:32,200 resulta que era cero 472 00:21:32,200 --> 00:21:34,579 pues ya está, se acabó 473 00:21:34,579 --> 00:21:38,339 entonces esa podría ser 474 00:21:38,339 --> 00:21:41,180 la solución más sencilla 475 00:21:41,180 --> 00:21:44,559 lo inicializamos a cualquier valor 476 00:21:44,559 --> 00:21:45,420 diferente de cero 477 00:21:45,420 --> 00:21:49,779 entonces el programa ya 478 00:21:49,779 --> 00:21:52,819 no tiene ni un error de compilación 479 00:21:52,819 --> 00:21:54,839 ¿vale? ni uno 480 00:21:54,839 --> 00:21:57,960 y tiene pinta 481 00:21:57,960 --> 00:21:59,920 de que se aproxima lo que queremos hacer 482 00:21:59,920 --> 00:22:04,119 ahora pueden pasar varias cosas 483 00:22:04,119 --> 00:22:05,460 que cuando lo ejecutemos 484 00:22:05,460 --> 00:22:08,319 pete porque hay algo mal 485 00:22:08,319 --> 00:22:10,319 le salen excepciones y ya entenderemos lo que son 486 00:22:10,319 --> 00:22:12,359 o también puede ocurrir 487 00:22:12,359 --> 00:22:14,279 que no le salgan excepciones y haga cosas 488 00:22:14,279 --> 00:22:16,099 pero no sea lo que queremos 489 00:22:16,099 --> 00:22:18,579 que esos son los errores complicados 490 00:22:18,579 --> 00:22:20,799 los errores de compilación son muy fáciles 491 00:22:20,799 --> 00:22:22,599 de arreglar porque es que estoy viendo ahí 492 00:22:22,599 --> 00:22:24,359 que algo no funciona y lo arreglo 493 00:22:24,359 --> 00:22:26,680 el verdadero 494 00:22:26,680 --> 00:22:28,500 problema es cuando haces un software 495 00:22:28,500 --> 00:22:30,660 y ese software funciona pero lo que 496 00:22:30,660 --> 00:22:32,480 hace no es lo que tiene que hacer porque eso se 497 00:22:32,480 --> 00:22:34,539 corresponde a que has hecho mal el algoritmo 498 00:22:34,539 --> 00:22:36,420 has hecho mal el diseño y tienes que cambiarlo 499 00:22:36,420 --> 00:22:38,079 desde el punto inicial 500 00:22:38,079 --> 00:22:39,920 no es un error de sintaxis ni nada de eso 501 00:22:39,920 --> 00:22:40,960 es un error sencillo 502 00:22:40,960 --> 00:22:44,500 bueno vamos a probar esto antes de nada 503 00:22:44,500 --> 00:22:49,380 ejecutamos esto 504 00:22:49,380 --> 00:22:51,299 introducimos un número 505 00:22:51,299 --> 00:22:58,609 vale, pues dos negativos 506 00:22:58,609 --> 00:23:00,869 entonces, a ver, esta prueba no me debería 507 00:23:00,869 --> 00:23:02,609 a mí permitir 508 00:23:02,609 --> 00:23:03,950 concluir que funciona 509 00:23:03,950 --> 00:23:06,529 en esta prueba sí, pero la idea es 510 00:23:06,529 --> 00:23:08,569 probar con casos 511 00:23:08,569 --> 00:23:10,430 los casos más raros 512 00:23:10,430 --> 00:23:12,589 por ejemplo, introducir un cero 513 00:23:12,589 --> 00:23:14,549 en este caso, el único caso raro que se me ocurre 514 00:23:14,549 --> 00:23:16,130 es introducir un cero ya de partida 515 00:23:16,130 --> 00:23:17,569 a ver qué hace 516 00:23:17,569 --> 00:23:21,569 pues cero de partida 517 00:23:21,569 --> 00:23:24,349 vale, pues sí, parece que es lo que quiero 518 00:23:24,349 --> 00:23:28,609 bueno, pues parece que el programa funciona 519 00:23:28,609 --> 00:23:30,410 nos quedamos con él, nos gusta y ya está 520 00:23:30,410 --> 00:23:35,660 y no solo nos gusta 521 00:23:35,660 --> 00:23:37,680 sino que nos ha permitido darnos cuenta 522 00:23:37,680 --> 00:23:39,920 de una situación 523 00:23:39,920 --> 00:23:41,740 que puede darse mucho 524 00:23:41,740 --> 00:23:43,420 y que precisamente 525 00:23:43,420 --> 00:23:44,740 porque se da mucho 526 00:23:44,740 --> 00:23:47,920 Java nos ofrece 527 00:23:47,920 --> 00:23:49,960 una sintaxis específica 528 00:23:49,960 --> 00:23:50,839 para esa situación 529 00:23:50,839 --> 00:23:52,839 no es necesaria 530 00:23:52,839 --> 00:23:55,000 pero se adapta a una situación 531 00:23:55,000 --> 00:23:56,400 que puede repetirse mucho 532 00:23:56,400 --> 00:23:58,460 ¿qué es la que ocurre aquí? 533 00:23:59,400 --> 00:24:01,359 que tenemos un bucle 534 00:24:01,359 --> 00:24:03,400 en el cual la primera vez 535 00:24:03,400 --> 00:24:05,019 queremos que se ejecute 536 00:24:05,019 --> 00:24:05,640 sí o sí 537 00:24:05,640 --> 00:24:07,880 y ya las siguientes depende 538 00:24:07,880 --> 00:24:11,220 era justo la situación de este bucle 539 00:24:11,220 --> 00:24:13,339 la primera vez queremos que se ejecute 540 00:24:13,339 --> 00:24:15,220 porque el primer dato lo necesitamos 541 00:24:15,220 --> 00:24:17,240 y luego ya las siguientes depende de los datos 542 00:24:17,240 --> 00:24:19,220 entonces 543 00:24:19,220 --> 00:24:20,880 eso pasa en algunas situaciones 544 00:24:20,880 --> 00:24:47,160 Hay veces en las que no, en función del tipo de problema que yo esté resolviendo, a lo mejor al bucle no tengo que entrar nunca, depende de mis datos de entrada, pero en situaciones como esta, en la cual tú estás pidiendo datos de entrada para hacer cosas, lo normal es que la primera vez quieras entrar sí o sí, porque los datos primeros los quieres, y luego ya los demás datos los querrás o no, dependiendo de lo que ocurra. 545 00:24:47,160 --> 00:24:49,539 entonces esta es una situación típica 546 00:24:49,539 --> 00:24:51,480 la única en la cual tú 547 00:24:51,480 --> 00:24:53,460 quieres hacer un bucle en el cual 548 00:24:53,460 --> 00:24:55,299 quieres entrar una vez 549 00:24:55,299 --> 00:24:57,579 es así o sí independientemente de la 550 00:24:57,579 --> 00:24:59,880 condición y luego ya las siguientes 551 00:24:59,880 --> 00:25:00,839 ya sí que depende 552 00:25:00,839 --> 00:25:03,660 de cómo han sido esos primeros datos etc 553 00:25:03,660 --> 00:25:04,440 ¿vale? 554 00:25:05,259 --> 00:25:06,920 entonces esto aquí lo hemos arreglado 555 00:25:06,920 --> 00:25:09,640 pues haciendo esa trampilla 556 00:25:09,640 --> 00:25:10,839 entre comillas que es 557 00:25:10,839 --> 00:25:13,759 pues a esta variable le pongo 1 y forzo a que esta condición 558 00:25:13,759 --> 00:25:15,279 sea true ¿vale? y no pasa nada 559 00:25:15,279 --> 00:25:17,400 lo único es que 560 00:25:17,400 --> 00:25:19,400 aquí como el programa es pequeñito 561 00:25:19,400 --> 00:25:21,200 está todo compacto, vale 562 00:25:21,200 --> 00:25:23,559 no pasa nada, pero en otra situación 563 00:25:23,559 --> 00:25:25,819 a lo mejor yo esta inicialización 564 00:25:25,819 --> 00:25:27,480 que he hecho como trampa 565 00:25:27,480 --> 00:25:29,420 para que esto sea true la primera vez 566 00:25:29,420 --> 00:25:31,519 esta inicialización resulta que está 567 00:25:31,519 --> 00:25:33,420 muy arriba, porque el bucle está muy 568 00:25:33,420 --> 00:25:35,140 abajo o en otra clase incluso 569 00:25:35,140 --> 00:25:37,460 porque mi programa es muy grande 570 00:25:37,460 --> 00:25:39,460 entonces el que está viendo 571 00:25:39,460 --> 00:25:41,039 el código ve esta inicialización 572 00:25:41,039 --> 00:25:43,099 y algo le extraña y dice 573 00:25:43,099 --> 00:25:45,259 ¿por qué a uno? ¿por qué de partida tiene que 574 00:25:45,259 --> 00:25:46,819 ¿será uno? ¿significará eso algo? 575 00:25:47,759 --> 00:25:49,180 ¿vale? cuando uno lee un código 576 00:25:49,180 --> 00:25:51,259 de alguien, la idea es que 577 00:25:51,259 --> 00:25:53,339 echando vistazos, así, entienda 578 00:25:53,339 --> 00:25:54,660 qué hace, de qué va 579 00:25:54,660 --> 00:25:57,259 entonces, uno ve esto y dice, ah vale 580 00:25:57,259 --> 00:25:58,400 es una cuenta, porque 581 00:25:58,400 --> 00:26:01,380 ¿y esto? ¿por qué un número 582 00:26:01,380 --> 00:26:03,339 es uno? ¿ese uno pinta algo? 583 00:26:03,940 --> 00:26:05,339 aquí no pinta nada, podría haber sido 584 00:26:05,339 --> 00:26:06,819 13, 27, 2.500 585 00:26:06,819 --> 00:26:09,299 nos daba igual, con que fuera diferente de 586 00:26:09,299 --> 00:26:11,220 cero, o sea, no tiene un significado real 587 00:26:11,220 --> 00:26:13,279 y sin embargo, el que 588 00:26:13,279 --> 00:26:14,940 lo vea dice, ¿y ese uno por qué? 589 00:26:14,940 --> 00:26:16,819 tiene un significado, pues no tiene ninguno 590 00:26:16,819 --> 00:26:19,180 solamente que quiere un número diferente 591 00:26:19,180 --> 00:26:19,579 de 0 592 00:26:19,579 --> 00:26:22,500 bueno, pues precisamente para 593 00:26:22,500 --> 00:26:25,039 hacer más elegante, más bonito 594 00:26:25,039 --> 00:26:26,680 el lenguaje 595 00:26:26,680 --> 00:26:29,380 hay otra sintaxis 596 00:26:29,380 --> 00:26:30,220 de bucles 597 00:26:30,220 --> 00:26:32,380 que es la do while 598 00:26:32,380 --> 00:26:39,789 que es esta 599 00:26:39,789 --> 00:26:45,559 en lugar de 600 00:26:45,559 --> 00:26:47,640 esta otra que es 601 00:26:47,640 --> 00:26:51,440 while condición 602 00:26:51,440 --> 00:26:53,559 y aquí lo que tengas que hacer 603 00:26:53,559 --> 00:26:55,940 que esta ya la conocemos 604 00:26:55,940 --> 00:26:58,220 y la entendemos, mientras se dé esta condición 605 00:26:58,220 --> 00:27:00,299 haz lo que sea, vuelves, se sigue dando, vuelves 606 00:27:00,299 --> 00:27:01,759 pues hay esta sintaxis 607 00:27:01,759 --> 00:27:03,759 que esta sintaxis, ¿cómo funciona? 608 00:27:03,819 --> 00:27:04,920 el programa llega por aquí 609 00:27:04,920 --> 00:27:07,880 ejecuta una primera vez 610 00:27:07,880 --> 00:27:09,920 lo que hay aquí, y esa primera vez es 611 00:27:09,920 --> 00:27:12,059 incondicional, ni mira condición 612 00:27:12,059 --> 00:27:14,059 ni mira nada, lo ejecuta una primera vez 613 00:27:14,059 --> 00:27:15,640 y ahora ya 614 00:27:15,640 --> 00:27:17,900 las siguientes veces 615 00:27:17,900 --> 00:27:20,480 las va a ejecutar 616 00:27:20,480 --> 00:27:22,460 dependiendo de si la condición es cierta o no 617 00:27:22,460 --> 00:27:24,759 luego lo ejecuto una primera vez 618 00:27:24,759 --> 00:27:26,180 esa siempre 619 00:27:26,180 --> 00:27:28,799 y ahora, la condición es cierta 620 00:27:28,799 --> 00:27:30,180 voy a por la segunda 621 00:27:30,180 --> 00:27:32,680 y vuelvo a mirar, la condición es cierta 622 00:27:32,680 --> 00:27:34,680 voy a por la tercera y vuelvo a mirar 623 00:27:34,680 --> 00:27:37,140 la condición es cierta, voy a por la cuarta 624 00:27:37,140 --> 00:27:38,960 así hasta que se haga falsa 625 00:27:38,960 --> 00:27:40,240 que entonces ya 626 00:27:40,240 --> 00:27:41,660 no hacemos nada más 627 00:27:41,660 --> 00:27:48,950 luego, este bucle de arriba 628 00:27:48,950 --> 00:27:50,109 y este bucle de abajo 629 00:27:50,109 --> 00:27:52,170 son iguales 630 00:27:52,170 --> 00:27:54,410 con la diferencia 631 00:27:54,410 --> 00:27:56,509 de que este bucle de arriba 632 00:27:56,509 --> 00:27:59,009 hay una primera vez que esto lo hace 633 00:27:59,009 --> 00:28:00,430 antes de mirar la condición 634 00:28:00,430 --> 00:28:02,849 luego 635 00:28:02,849 --> 00:28:06,609 si 636 00:28:06,609 --> 00:28:12,019 nosotros tenemos 637 00:28:12,019 --> 00:28:13,640 cualquier código con while 638 00:28:13,640 --> 00:28:16,319 así, while condición 639 00:28:16,319 --> 00:28:18,640 y aquí tenemos 640 00:28:18,640 --> 00:28:20,359 la sentencia que sea 641 00:28:20,359 --> 00:28:24,099 pues esto es exactamente 642 00:28:24,099 --> 00:28:24,799 igual 643 00:28:24,799 --> 00:28:26,799 es exactamente igual 644 00:28:26,799 --> 00:28:27,920 que 645 00:28:27,920 --> 00:28:30,039 perdón, si yo tengo 646 00:28:30,039 --> 00:28:32,279 aquí quería poner un do while 647 00:28:32,279 --> 00:28:41,579 vale, si yo tengo un bucle así 648 00:28:41,579 --> 00:28:42,700 do 649 00:28:42,700 --> 00:28:45,640 aquí las sentencias que sean 650 00:28:45,640 --> 00:28:52,740 while la condición 651 00:28:52,740 --> 00:28:54,579 que sea terminado con punto y coma 652 00:28:54,579 --> 00:28:55,859 que hay que poner un punto y coma al final 653 00:28:55,859 --> 00:28:58,220 porque las sentencias siempre acaban en punto y coma 654 00:28:58,220 --> 00:28:59,940 pues esa también, acaba en punto y coma 655 00:28:59,940 --> 00:29:03,240 vale, pues si yo tengo ese código 656 00:29:03,240 --> 00:29:04,660 ese código 657 00:29:04,660 --> 00:29:06,859 fijaos que es lo mismo que si yo escribiera 658 00:29:06,859 --> 00:29:07,220 esto 659 00:29:07,220 --> 00:29:10,779 la sentencia que sea 660 00:29:10,779 --> 00:29:12,180 y ahora el bucle while 661 00:29:12,180 --> 00:29:17,339 con la condición 662 00:29:17,339 --> 00:29:18,920 y aquí la sentencia otra vez 663 00:29:18,920 --> 00:29:26,220 pues el código de la izquierda 664 00:29:26,220 --> 00:29:27,339 y el código de la derecha 665 00:29:27,339 --> 00:29:28,839 son intercambiables 666 00:29:28,839 --> 00:29:31,220 perfectamente intercambiables, hacen lo mismo 667 00:29:31,220 --> 00:29:34,259 este que hace, ejecuta la sentencia 668 00:29:34,259 --> 00:29:35,519 y a partir de ahí 669 00:29:35,519 --> 00:29:37,920 se da la condición, la vuelve a ejecutar 670 00:29:37,920 --> 00:29:39,940 se da la condición, la vuelve a ejecutar 671 00:29:39,940 --> 00:29:41,539 se da la condición, no, se acabó 672 00:29:41,539 --> 00:29:47,960 que es justo lo que hace éste ejecuta la sentencia y a partir de ahí se da la condición si lo vuelvo 673 00:29:47,960 --> 00:29:53,059 a ejecutar se da así lo vuelvo a ejecutar se da no termino luego el código de la izquierda y el 674 00:29:53,059 --> 00:30:02,640 de la derecha son intercambiables entonces en situaciones en las cuales lo que yo hago dentro 675 00:30:02,640 --> 00:30:10,279 quiero que se haga una primera vez sí o sí incondicional podría poner esto pero queda 676 00:30:10,279 --> 00:30:12,519 más bonito y más compacto si lo pongo así. 677 00:30:14,059 --> 00:30:16,220 Lo pongo de esta manera, estoy 678 00:30:16,220 --> 00:30:18,319 haciendo exactamente lo mismo, pero queda 679 00:30:18,319 --> 00:30:20,140 más bonito. En lugar de sacar esto fuera 680 00:30:20,140 --> 00:30:22,299 una vez, que se 681 00:30:22,299 --> 00:30:24,039 correspondería, en el ejemplo de nuestro programa, 682 00:30:24,180 --> 00:30:26,299 a la primera lectura, hacerla fuera una primera 683 00:30:26,299 --> 00:30:28,339 vez, pues en lugar 684 00:30:28,339 --> 00:30:30,220 de sacar esto fuera para que se haga una 685 00:30:30,220 --> 00:30:31,299 primera vez sí o sí, 686 00:30:32,359 --> 00:30:33,980 pues lo cambio a un do-while y ya está. 687 00:30:34,099 --> 00:30:36,500 Y tengo exactamente lo mismo. Son dos códigos 688 00:30:36,500 --> 00:30:37,240 idénticos. 689 00:30:38,900 --> 00:30:39,099 ¿Vale? 690 00:30:42,799 --> 00:31:19,109 Entonces, esto era esto, sí, pues el código este, este programa nuestro, si lo hacemos con do while, se transformaría y se convertiría en algo así, haríamos do, lo primero, la primera lectura del número sí o sí, la primera la hacemos sí o sí. 691 00:31:19,109 --> 00:31:24,579 Ahora, esto de aquí 692 00:31:24,579 --> 00:31:26,900 Contarlo 693 00:31:26,900 --> 00:31:28,779 Si es negativo, como siempre 694 00:31:28,779 --> 00:31:29,460 Y ahora 695 00:31:29,460 --> 00:31:32,119 Mientras que 696 00:31:32,119 --> 00:31:34,819 Mientras número 697 00:31:34,819 --> 00:31:39,619 Sea diferente 698 00:31:39,619 --> 00:31:40,220 De cero 699 00:31:40,220 --> 00:31:43,950 ¿Vale? 700 00:31:44,549 --> 00:31:48,839 Pues entonces, este programa 701 00:31:48,839 --> 00:31:50,359 ¿Qué es lo que hace? 702 00:31:50,519 --> 00:31:52,039 Lee el primero, sí o sí 703 00:31:52,039 --> 00:31:54,539 Si es negativo 704 00:31:54,539 --> 00:31:55,940 Lo cuento 705 00:31:55,940 --> 00:31:58,579 Es cero 706 00:31:58,579 --> 00:32:00,079 no, no es cero, pues arriba 707 00:32:00,079 --> 00:32:04,970 vale, pues que gano 708 00:32:04,970 --> 00:32:08,210 de hacer este código respecto a hacer el de arriba 709 00:32:08,210 --> 00:32:09,769 voy a comentar este 710 00:32:09,769 --> 00:32:12,089 para quitar este como si no existiera 711 00:32:12,089 --> 00:32:13,250 lo que gano 712 00:32:13,250 --> 00:32:16,029 es que ahora no necesito hacer la trampa 713 00:32:16,029 --> 00:32:17,410 de inicializar esta variable 714 00:32:17,410 --> 00:32:19,430 ya no lo necesito 715 00:32:19,430 --> 00:32:21,950 yo la dejo ahí sin inicializar 716 00:32:21,950 --> 00:32:23,130 ¿por qué? 717 00:32:23,410 --> 00:32:25,869 porque hay una primera vez en la que ya entro 718 00:32:25,869 --> 00:32:26,390 sí o sí 719 00:32:26,390 --> 00:32:29,750 y en esta primera vez en la que entro sí o sí 720 00:32:29,750 --> 00:32:32,650 número ya coge su primer valor 721 00:32:32,650 --> 00:32:35,170 ya coge aquí su primer valor 722 00:32:35,170 --> 00:32:37,769 luego 723 00:32:37,769 --> 00:32:39,769 en este ejemplo que estaba viendo 724 00:32:39,769 --> 00:32:41,509 que gano, repito 725 00:32:41,509 --> 00:32:43,750 respecto a la versión anterior, que gano 726 00:32:43,750 --> 00:32:46,390 pues no tener que hacer esta inicialización 727 00:32:46,390 --> 00:32:48,329 ¿vale? no tener que hacerla 728 00:32:48,329 --> 00:32:49,930 y que el programa 729 00:32:49,930 --> 00:32:51,589 a la vista, a los ojos 730 00:32:51,589 --> 00:32:53,130 representa más 731 00:32:53,130 --> 00:32:55,869 lo que está haciendo, que es yo rápidamente 732 00:32:55,869 --> 00:32:57,630 al ver un do while rápidamente veo 733 00:32:57,630 --> 00:33:00,809 que hay una vez que se va a hacer sí o sí. 734 00:33:01,849 --> 00:33:13,920 Entonces entiendo mejor lo que está pasando, ¿vale? 735 00:33:15,180 --> 00:33:19,200 Bueno, pues entonces ya tenemos dos sintaxis para un bucle, 736 00:33:19,880 --> 00:33:22,079 while y do while, ¿vale? 737 00:33:22,079 --> 00:33:22,819 Ya tenemos dos. 738 00:33:25,880 --> 00:33:27,160 ¿Y cuál elegimos? 739 00:33:27,160 --> 00:33:29,200 Pues la que mejor se adapte a la situación. 740 00:33:29,859 --> 00:33:31,779 Criterio de elección, ya sabemos, 741 00:33:32,359 --> 00:33:36,000 si lo que se repite al menos la primera vez 742 00:33:36,000 --> 00:33:38,480 tiene que hacerse sí o sí incondicionalmente 743 00:33:38,480 --> 00:33:40,279 porque identifico que esa es la situación 744 00:33:40,279 --> 00:33:42,519 se tiene que hacer sí o sí una primera vez 745 00:33:42,519 --> 00:33:44,019 pues hago esto 746 00:33:44,019 --> 00:33:45,880 ¿vale? hago esto 747 00:33:45,880 --> 00:33:48,160 y me ahorro hacer un while 748 00:33:48,160 --> 00:33:50,440 en el cual tengo que sacar la primera lectura 749 00:33:50,440 --> 00:33:52,380 afuera o hacer la trampa 750 00:33:52,380 --> 00:33:54,220 de inicializarlo a un valor para que 751 00:33:54,220 --> 00:33:56,400 esta condición sea cierta la primera 752 00:33:56,400 --> 00:33:57,200 vez sí o sí 753 00:33:57,200 --> 00:34:00,579 me ahorro trabajo y dejo el programa más en consonancia 754 00:34:00,579 --> 00:34:01,759 con lo que tiene que hacer 755 00:34:01,759 --> 00:34:03,720 con lo que hace 756 00:34:03,720 --> 00:34:06,829 ¿está claro? 757 00:34:06,829 --> 00:34:22,619 Bueno, vale, pues entonces, a partir de este, ahora ya empiezan ejercicios, unos cuantos ejercicios distintos, con otra idea. 758 00:34:23,420 --> 00:34:33,579 De aquí hacia arriba, aparte de la sintaxis de bucle y lo que hace, pues nos ha permitido ver claro lo que es un contador y en qué contexto lo usamos y por qué y de qué manera. 759 00:34:35,039 --> 00:34:41,159 Bueno, aquí ya no me están hablando de contar, me están hablando de otras situaciones normalmente asociadas a bucles. 760 00:34:41,159 --> 00:34:44,159 por ejemplo me están hablando de sumar 761 00:34:44,159 --> 00:34:45,260 no de contar 762 00:34:45,260 --> 00:34:47,280 vale, en estos primeros 763 00:34:47,280 --> 00:34:50,460 me están hablando de sumar, de hacer medias 764 00:34:50,460 --> 00:34:51,980 etcétera, vale 765 00:34:51,980 --> 00:34:52,960 hasta aquí 766 00:34:52,960 --> 00:34:55,159 aquí ya me empiezan a hablar de otra cosa 767 00:34:55,159 --> 00:34:57,659 bueno, pues vamos a parar aquí 768 00:34:57,659 --> 00:34:58,760 un momento 769 00:34:58,760 --> 00:35:01,320 y ahora ya vemos como haríamos eso