20241017 ProgrEstruct-Bucles_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Venga, ya llegó.
00:00:00
Y eso ha sonado a risa irónica.
00:00:04
¿Ah, sí? ¿Él dice eso?
00:00:09
¿En serio? No tenía ni idea.
00:00:12
Pues nada, tenemos más compenetración de la que parece.
00:00:14
Vale, vale. Bueno, pues esta que sí es vuestra asignatura favorita, redes, no sé.
00:00:17
Ah, mejor.
00:00:22
Esa es la favorita.
00:00:25
Ya, lo que pasa es que os está exigiendo mucho trabajo.
00:00:27
Ese es el único problema que yo le veo.
00:00:30
Pero bueno, esta semana voy a llamar a vuestra profe
00:00:32
y le voy a decir que ya está, que se acabó.
00:00:35
Que venga ya de una vez.
00:00:37
Se acabó tu baja.
00:00:39
Se acabó tu baja.
00:00:40
Lo decido yo, que tengo la titulación médica.
00:00:41
Eso.
00:00:44
Así que nada, yo confío que ya pronto tengáis profe.
00:00:45
Venga, pues a ver.
00:00:48
Estábamos con la sentencia iterativa, ¿vale?
00:00:50
Como rápido repaso para los que el otro día
00:00:53
después de corregir el examen,
00:00:56
Pues estaban ahí un poquito ya
00:00:58
Desconectados o lo que fuera
00:01:01
¿Vale?
00:01:02
A ver, recordad que la sintaxis
00:01:04
De la sentencia iterativa
00:01:06
Es esto
00:01:08
Es esto, ¿verdad?
00:01:10
Donde aquí se pone una condición
00:01:13
Esta es
00:01:15
¿Vale?
00:01:17
Entonces, esta es una sentencia
00:01:19
Una sentencia
00:01:21
Igual que el if
00:01:22
Donde poníamos una condición
00:01:25
Esto también era una sentencia
00:01:27
Esto también era una única sentencia
00:01:31
Y si hay un else
00:01:33
Pues también
00:01:35
Todo esto es una única sentencia
00:01:37
¿Vale? Entonces son sentencias
00:01:39
Complejas porque tienen
00:01:40
Varias líneas de código pero son una sola
00:01:43
Son una sola
00:01:45
¿Vale? Entonces
00:01:46
¿Cómo funciona el while? El while
00:01:49
Permite repetir
00:01:51
Varias veces
00:01:52
Las sentencias que pongamos aquí dentro ¿Verdad?
00:01:54
entonces, la diferencia entre el while y el if, pues ya sabemos cuál es,
00:01:57
aparentemente son muy parecidas, ¿no?
00:02:06
Son muy parecidas porque en ambas se evalúa una condición,
00:02:10
aquí se evalúa una condición, aquí también, son muy parecidas,
00:02:17
si la condición es true, entro dentro, luego hasta ahí son iguales,
00:02:20
Y una vez que ya hemos terminado lo que hay dentro
00:02:28
Ahí es donde viene la diferencia entre el while y el if
00:02:31
Si es el while
00:02:34
Otra vez vuelvo arriba
00:02:35
Y vuelvo a evaluarla
00:02:37
Que sigue cumpliéndose
00:02:39
Hago esto de nuevo
00:02:41
Y otra vez
00:02:43
Vuelvo arriba, esa es la diferencia
00:02:45
Con el if, evaluábamos condición
00:02:47
Que se cumple, entro
00:02:49
Igual que el while, y se acabó
00:02:51
Y sigo por abajo, independientemente
00:02:53
De que condición siga cumpliéndose o no
00:02:55
Ya se acabó
00:02:57
Esto se va a hacer cero veces
00:02:58
O una máximo
00:03:01
En función de si condición es falsa o true
00:03:02
Estas cuantas se van a hacer
00:03:05
Ni idea
00:03:07
Se van a hacer entre cero
00:03:08
Si cuando yo llego por aquí
00:03:11
La condición ya es falsa de partida
00:03:12
En ese caso se harán cero
00:03:14
O un montón
00:03:15
¿De qué depende ese montón?
00:03:18
Pues que cuando vayamos a evaluar
00:03:21
Esta condición se haya convertido en falsa
00:03:23
En cuanto se convierta en falsa, ya no se hace más, ¿vale?
00:03:25
Entonces, para muchos problemas necesitamos hacer esto.
00:03:30
No hay forma de resolverlo si no podemos usar esa sentencia.
00:03:35
No podemos hacer cualquier cosa solamente con asignaciones y sentencias de decisión.
00:03:38
No podemos.
00:03:43
Hay veces que hay que repetir un código varias veces.
00:03:43
En ese caso vamos a tener que usar esta sentencia.
00:03:48
Vale.
00:03:51
Entonces, el funcionamiento está claro, ¿no?
00:03:52
Entonces, como ahí va siempre una condición
00:03:54
Esto lo podríamos poner
00:04:01
Esto lo podríamos poner, ¿no?
00:04:02
Pero esto, feo, malo
00:04:04
Esto no lo queremos, ¿vale?
00:04:07
Esto muy mal
00:04:09
Todo mal esto
00:04:10
Un bucle, porque esto ya sabemos
00:04:11
Lo que va a conducir
00:04:14
Esto va a conducir a un programa
00:04:16
Que nunca jamás va a terminar
00:04:18
Ahí hasta el infinito
00:04:23
¿Vale? Nunca jamás va a terminar
00:04:25
Eso no tiene que ocurrir
00:04:27
Porque yo ahora mismo no tengo más opción que irme al sistema operativo y matar este proceso. No tengo otra alternativa que matar este proceso. Afortunadamente el eclipse me da este botoncito y este botoncito es el kill. Me lo da, pues bueno. Pero nunca jamás debería acabar un programa porque mato el proceso. Siempre tiene que haber una salida.
00:04:28
Entonces, por ejemplo, esto ya sí que te da
00:04:53
Yo aquí pongo una condición
00:04:58
Por ejemplo, mientras n sea diferente de 0
00:05:03
Por ejemplo, esta condición ya es una condición que puede ser true o puede ser false
00:05:08
Lo que pasa es que, aun así, si yo hago esto, por ejemplo
00:05:13
vale
00:05:19
vale, entonces
00:05:40
ahora este bucle, esta condición
00:05:42
en principio no es
00:05:48
true ni false, depende del valor
00:05:50
de n, pero claro
00:05:52
aquí ahora mismo este programa también
00:05:54
sigue siendo
00:05:56
muy feo, yo lo ejecuto
00:05:57
y si a n
00:06:00
le doy un 7, pues
00:06:01
estoy en las mismas
00:06:04
¿no?
00:06:05
no, en las mismas dosis, las un 7 no entran
00:06:07
a no, en el distinto
00:06:09
claro, si
00:06:12
vale
00:06:14
ahí estoy, le doy 7
00:06:16
y estoy en las mismas
00:06:20
claro, obviamente, ¿verdad?
00:06:22
bueno, mato el proceso porque es que no tengo
00:06:24
otra manera de salir
00:06:26
claro, ¿cuál es el problema?
00:06:27
que aquí dentro del bucle
00:06:30
no hay nada que permita
00:06:32
que esta condición pase
00:06:34
de ser true a false, no hay nada
00:06:36
entonces si tenemos un bucle
00:06:38
que lo que hay dentro es absolutamente
00:06:40
independiente de la condición
00:06:42
pues aquí hay algo raro, en este código alguna cosa rara va a haber diseñada
00:06:44
porque si de partida es true, va a ser true siempre
00:06:48
con lo cual nunca va a acabar ese bucle, nunca va a acabar
00:06:51
entonces normalmente los programas, los códigos que hacemos para resolver un problema
00:06:54
son tales que lo que ocurre aquí dentro
00:06:59
va alterando las variables que forman esta condición
00:07:03
de tal forma que alguna vez eso sea falso
00:07:08
Por ejemplo, aquí podríamos estar leyendo este número
00:07:10
Todo el rato
00:07:14
A ver, estoy poniendo ejemplos solamente
00:07:16
De situaciones en las cuales
00:07:24
El bucle terminaría, no terminaría
00:07:26
Vale, si yo esto no lo pongo
00:07:28
No es que
00:07:30
Representen un problema real que estoy resolviendo
00:07:32
Estoy solamente viendo códigos
00:07:34
En los cuales
00:07:36
Para ver cómo funciona la sentencia while
00:07:36
no estamos resolviendo ningún
00:07:39
vale, entonces aquí está claro, ¿no? que si yo de partida
00:07:41
meto un valor diferente de 0
00:07:44
voy a entrar
00:07:46
y este bucle no va a acabar en la vida
00:07:47
a veces uno hace su programa
00:07:49
que sí que está resolviendo un problema, lo que sea
00:07:52
y esas son cosas
00:07:54
que si las identificamos
00:07:56
nos podemos dar cuenta de que
00:07:58
uy, algo raro he hecho yo
00:08:00
algo raro he hecho yo porque es que este bucle es infinito
00:08:01
¿vale? entonces
00:08:04
en este caso, por ejemplo
00:08:06
en este caso
00:08:08
ahora la variable n
00:08:10
en cada iteración
00:08:12
¿vale? cada iteración es
00:08:13
cada una de las pasadas del bucle
00:08:16
en cada iteración el valor de n cambia
00:08:18
el valor de n cambia
00:08:20
con lo cual
00:08:22
n puede ser 0
00:08:24
en algún momento
00:08:26
entonces ahora ya sí, ahora ya este programa
00:08:27
tiene un bucle que termina
00:08:30
yo le meto primero 8
00:08:31
vale, y vuelve a pedir el número
00:08:34
7, me vuelve a pedir el número
00:08:36
3, me vuelve a pedir el número
00:08:37
0, ya está, terminó
00:08:39
¿Vale? Terminó
00:08:41
Entonces este bucle
00:08:43
Ya sí que termina
00:08:45
Termina por código
00:08:48
Que es la idea, tener una salida por código
00:08:51
¿Vale?
00:08:53
¿Alguien no se ha despertado todavía?
00:08:55
Vale
00:08:57
O esto mismo también podría ser
00:08:58
Por ejemplo
00:09:05
Por ejemplo, este programa
00:09:05
¿Qué haría?
00:09:10
un momento
00:09:13
vale, cuando digo que haría
00:09:15
no digo que me leáis las sílabas
00:09:22
pues repite, mientras n sea
00:09:24
diferente de 0, muestra un mensaje
00:09:26
y luego a n le resta 0, le resta 1
00:09:28
no quiero que me leáis
00:09:30
me interpretéis las líneas, lo que quiero es que me digáis
00:09:32
en conjunto cuál es el resultado final
00:09:34
de este programa, este programa en conjunto
00:09:36
¿qué hace?
00:09:40
no, no, no, pero no me
00:09:47
traduzcas Java
00:09:48
no me hagas un traductor de idioma
00:09:51
no me traduzcas Java, dime
00:09:53
este programa te hace esto
00:09:54
vale
00:09:56
eso es más parecido a lo que yo esperaba
00:10:00
te saluda, pero
00:10:03
y ya está, algo más
00:10:04
¿cuántas veces te saluda?
00:10:06
vale
00:10:10
eso sí, este programa te saluda tantas
00:10:10
veces como tú le hayas dicho al principio
00:10:13
es lo que hace, ¿no?
00:10:14
le metes un numerito y
00:10:16
te saluda
00:10:18
y lo decrementa
00:10:21
Con lo cual, ya te ha saludado una vez y ha contado esa vez.
00:10:22
Como no ha llegado a cero, te vuelve a saludar, ¿vale?
00:10:27
¿Vale? Pues este bucle ya sé que terminaría.
00:10:32
Entonces le metemos 7, pues hala, ahí tenemos las 7 veces, ¿vale?
00:10:36
Hay una manera fea también de salir de los bucles.
00:10:45
Por ejemplo, que es la famosa sentencia break que no nos gusta nada tampoco.
00:10:49
El bucle que yo he hecho de que te saluda siete veces o ocho o las n que metas, sería igual que hacer esto.
00:10:55
Pero por Dios, esto no nos gusta nada.
00:11:06
A ver, la sentencia break es una sentencia que en sí misma tiene un significado.
00:11:11
Ya no solo, hasta ahora la sentencia break la hemos usado solo para esto.
00:11:17
Para el switch case, la hemos usado solamente para esto.
00:11:21
Case 1, bla, bla, bla
00:11:25
Y luego poníamos aquí el break
00:11:28
Y así en cada caso
00:11:30
Y lo que decíamos era
00:11:32
El break lo que hace es
00:11:34
En ese momento
00:11:36
Para la evaluación de cases
00:11:37
Este es de aquí
00:11:40
No, no, no, no se mete en el siguiente caso
00:11:41
¿Vale?
00:11:52
El break lo que hace es una sentencia
00:11:53
Ahora ya podemos ver su significado general
00:11:56
Su significado general es
00:11:58
sale del bloque en el que
00:11:59
está metida, sale del bloque
00:12:02
entonces en el switch
00:12:04
hacía justo lo que queríamos
00:12:05
¿qué es uno? pues ejecuta esto
00:12:07
y ya sale
00:12:10
porque si no poníamos un break
00:12:11
se ponía a ejecutar todo lo que había
00:12:13
a continuación, independientemente de que
00:12:15
la condición, el valor
00:12:17
fuera cierto o no
00:12:20
entonces el switch era así
00:12:21
miraba el valor
00:12:23
de la variable que yo pusiera aquí
00:12:25
poníamos aquí una variable
00:12:27
que era igual a 1
00:12:29
hacía lo que hubiera dentro
00:12:31
y si no había un break, ya seguía
00:12:33
seguía con todas las demás
00:12:35
aunque este número no coincidiera
00:12:37
ya seguía con todas
00:12:39
pero no queríamos eso, queríamos
00:12:40
que si esta variable era igual a este valor
00:12:43
o igual a este, una vez que
00:12:45
ha hecho lo que estaba dentro, ya está
00:12:47
saliera y dejara de evaluar cosas
00:12:49
saliera, pues para eso
00:12:51
poníamos el break, porque el break es
00:12:53
una sentencia que se puede usar
00:12:55
en más contextos que en el switch case
00:12:57
El break significa
00:12:59
Sal del bloque en el que estás
00:13:00
Abandona automáticamente el bloque
00:13:04
En el que estás
00:13:05
Entonces también la podemos usar en un while
00:13:06
Entonces
00:13:09
Este bucle es un while true
00:13:11
Pero si termina
00:13:13
Porque si n ha llegado a 0
00:13:15
Break, y break que significa
00:13:18
Sal de este bloque
00:13:19
Abandona, rompe
00:13:21
Si hay algo por aquí debajo, si hay más sentencias
00:13:22
O lo que sea
00:13:25
Ni llega a ellas
00:13:26
¿Y si el if lo pones como un bloque?
00:13:28
Ah, esto no llega
00:13:36
Bueno, da igual
00:13:37
Ah, vale
00:13:39
Ya sé lo que dices
00:13:41
Si sale de aquí y se va a este
00:13:43
No, sale del
00:13:45
Yo creo que sale del bucle enterito
00:13:47
Déjame comprobarlo
00:13:50
Porque normalmente se hacen para romper bucles
00:13:51
Espérate que quite esto
00:13:56
Vale, a ver
00:13:57
En este caso está claro, ¿no?
00:14:01
En este caso está claro
00:14:03
Para lo que sirve el break
00:14:04
Pero, repito, no se usa.
00:14:06
Es una sentencia que está puesta ahí.
00:14:08
Para que uno tenga el recurso, en un momento dado,
00:14:11
tiene que romper un bucle por las buenas,
00:14:13
pero jamás se programa así.
00:14:16
Tú, si quieres, ¿cómo indicas que el bucle finaliza?
00:14:18
Con la condición.
00:14:21
Porque si lo haces así, el que está mirando este código,
00:14:23
le complicas muchísimo la vida.
00:14:25
Dice un bucle infinito.
00:14:27
Ostras, me voy a tener que meter dentro
00:14:29
para ver qué hace que esto acabe.
00:14:30
y a lo mejor aquí dentro hay una llamada a un método
00:14:33
y muchas cosas y le complicas mucho la vida
00:14:36
entonces los códigos tienen que ser legibles
00:14:38
y cuando uno eche un vistazo entender que ocurre
00:14:40
y yo con un while true aquí no entiendo nada
00:14:42
pero si yo pongo un while
00:14:45
n diferente de 0 pues ya automáticamente
00:14:46
veo, ah, se repite n veces
00:14:49
vale, entonces
00:14:50
el break no es
00:14:52
una sentencia aconsejable de usar
00:14:54
más que nada porque no hace ninguna falta
00:14:56
no es necesaria en absoluto
00:14:58
no hace falta, siempre puedes salir de un bucle
00:15:00
Poniendo la condición correcta
00:15:02
Y es como debes hacerlo
00:15:04
Pero bueno, está ahí por herencia del pasado
00:15:05
Por si en algún momento dado tiene que usarla
00:15:08
Y en el switch case, ahí sí que es imprescindible
00:15:10
Ahí sí que es imprescindible
00:15:12
Es el único caso en el que hay que usarla
00:15:13
¿Vale?
00:15:17
Venga, pues entonces, aquí está clarísimo
00:15:18
Que saldríamos del bucle en cuanto llegamos a 0
00:15:20
Con lo cual esto nos saludaría
00:15:23
7 veces
00:15:24
¿Vale?
00:15:26
Nos hace las 7
00:15:29
¿Vale?
00:15:30
Y ahora, esto, que bueno, yo no lo he visto nunca, pero vamos a ver por curiosidad cómo funcionaría.
00:15:32
Si te saldría de este, con lo cual estaríamos en las mismas y seguiría siendo un bucle infinito,
00:15:42
o break significa sal del bucle más en el que estás, sal del bucle más interno en el que estás, que sería este.
00:15:48
Yo tengo una teoría, pero vamos a ponerle 4 para que sale del bucle en el que estás, efectivamente.
00:15:57
No, no, no, está bien
00:16:07
Porque hay pequeños detalles
00:16:10
Que son curiosidades
00:16:12
Que tienen sentido
00:16:14
Entonces el break es la sentencia de
00:16:15
Romper bucles
00:16:18
Pero no las usemos
00:16:19
No es necesario
00:16:21
Y el código va a quedar muy feo
00:16:23
Entonces nunca haríamos un código así
00:16:25
Nunca haríamos un código así
00:16:27
Este código lo cambiaríamos
00:16:29
Y lo pondríamos así
00:16:31
¿Vale?
00:16:33
Así ya sí que estaría
00:16:34
Un código mucho más bonito
00:16:36
¿Vale?
00:16:37
Entonces ya
00:16:42
De nuevo con un while
00:16:43
Se abre un bloque otra vez
00:16:45
Como con un if
00:16:47
No es obligatoria
00:16:48
Las llaves
00:16:51
Si solo se hace una sentencia
00:16:52
¿Vale? Por ejemplo
00:16:55
Si yo
00:16:57
Este
00:16:58
Este bucle
00:17:00
Fuera así
00:17:02
Sería infinito en este caso
00:17:04
Claro, vamos, no
00:17:06
Me gustaría si este bucle
00:17:07
Bueno, a ver, puedo hacer esto
00:17:09
Hola, concatenarlo con n
00:17:11
Y a n decrementarlo
00:17:14
Este ya no sería infinito
00:17:16
Hola, muestro el valor de n
00:17:17
Y lo decremento
00:17:20
Pues este bucle
00:17:22
Como solo tiene una sentencia dentro
00:17:25
Solo tiene una
00:17:27
La llave es opcional
00:17:28
¿Vale? La llave es opcional
00:17:29
entonces las sentencias que vengan a continuación
00:17:32
ya la máquina virtual sabe que están
00:17:34
fuera del while, no hay duda
00:17:36
aunque las tabulara, me da lo mismo
00:17:37
porque las tabulaciones son solo para dejar el código
00:17:39
claro, a la máquina virtual las tabulaciones
00:17:42
los espacios le dan igual
00:17:44
entonces si no hay llaves, por muchas sentencias
00:17:45
que haya aquí, el bucle
00:17:48
while solo tiene dentro esta
00:17:50
lo que pasa es que
00:17:52
para evitar efectivamente confusiones
00:17:54
y para no meter la pata
00:17:56
siempre es buena idea abrir un
00:17:57
bloque de llaves
00:17:59
siempre es buena idea abrirlo y así queda clarísimo
00:18:01
que hay dentro
00:18:04
pero recordad que desde el momento
00:18:04
en que abrís un bloque
00:18:08
como hacemos con un if
00:18:09
automáticamente se abre aquí
00:18:11
como si fuera un ámbito nuevo de variables
00:18:14
recordad que entonces
00:18:16
cualquier cosa que declaréis aquí
00:18:18
cualquier cosa que declaréis aquí
00:18:20
solo se puede usar
00:18:22
aquí dentro y solo es visible
00:18:24
aquí dentro para hacer lo que uno quiera
00:18:26
solo es visible ahí dentro
00:18:27
En cuanto el bloque termina
00:18:29
En cuanto el bloque termina
00:18:31
Esa variable m se ha ido a la basura
00:18:33
Y ha desaparecido
00:18:35
Y con ella su valor, fuera, a la basura
00:18:36
Entonces yo aquí si quisiera
00:18:39
Mostrar el valor que tiene m
00:18:41
Me dirían, pero ¿quién es m?
00:18:42
No tengo ni idea de quién es m
00:18:45
Porque m la declaraste dentro de este bloque
00:18:46
Luego se usó aquí dentro
00:18:49
Para todo lo que hiciera falta, se usó
00:18:51
Y cuando el bloque terminó
00:18:52
Y hemos venido a este punto, m a la basura
00:18:54
bueno, con un retune
00:18:57
sales del main, no
00:19:02
la única, es que tienes la opción
00:19:03
natural, que es declararla fuera
00:19:06
¿vale?
00:19:08
la declaras fuera y solucionado
00:19:10
¿vale? entonces, tú en
00:19:12
si vas a usar una variable en un sitio
00:19:16
tienes que asegurarte que esa variable está
00:19:18
declarada en el bloque al que pertenezca
00:19:20
esa sentencia, entonces, esta sentencia
00:19:22
¿qué bloque pertenece?
00:19:24
a este grandote de main, es en el que está
00:19:25
a este grandote, pertenece a esa
00:19:28
Pues entonces tiene que estar declarada ahí
00:19:30
¿Vale? Si solamente la usáramos
00:19:32
Aquí dentro
00:19:34
Y esta sentencia
00:19:35
Esta M solamente sirviera
00:19:38
Para ser usada aquí dentro
00:19:40
Solo, le doy un valor y la muestro aquí
00:19:41
Solo, pues entonces la declaro ahí
00:19:44
Porque como solo la voy a usar
00:19:46
Aquí dentro, la declaro ahí
00:19:48
¿Y qué ventaja tiene declararla ahí
00:19:49
En vez de fuera?
00:19:52
Que el resto del código ya no
00:19:54
Ya no molesta
00:19:56
Porque ya no está esa variable M ahí
00:19:57
ya ha desaparecido
00:20:00
entonces esta variable m solo va a existir
00:20:01
durante el tiempo que tarda en ejecutarse
00:20:04
el tiempo que tarda en ejecutarse
00:20:06
esa variable existe
00:20:08
eso ha terminado de ejecutarse
00:20:09
la variable se va a la basura
00:20:11
memoria que me ahorro
00:20:12
y confusiones
00:20:14
porque si aquí sigue habiendo una variable m
00:20:16
yo estoy en 30.000 líneas más abajo
00:20:18
intento declarar otra m
00:20:21
me dice no puedo declarar m
00:20:22
pero si yo no tengo ninguna m
00:20:23
si la tienes porque la has declarado más arriba
00:20:25
entonces es buena práctica
00:20:27
Declarar las variables
00:20:29
En el bloque más interno en el que se usan
00:20:31
Es buena práctica
00:20:34
Y así fuera de ese bloque no existen
00:20:35
No molestan
00:20:38
Y puede ser la misma
00:20:38
A ver, puedes declarar
00:20:40
Te refieres a esto
00:20:45
Te pones interno
00:20:48
Pero si la has clasificado fuera, usa esa
00:20:51
Porque luego te borrará
00:20:53
No, no, no
00:20:54
Entonces lo que lo estropeas es aquí
00:20:56
La estropeas ahí
00:20:58
te dice, oye, que la variable está duplicada
00:21:00
entonces
00:21:03
el problema es que aquí, si lo dejas así
00:21:04
aquí dentro, abre una ambigüedad
00:21:07
que es cuando yo digo M
00:21:09
a cuál me estoy refiriendo
00:21:10
a la que yo he declarado aquí dentro
00:21:12
y que sustituye a la otra
00:21:15
o me estoy refiriendo a esta
00:21:16
entonces para evitar esa ambigüedad
00:21:18
directamente no te deja
00:21:20
¿vale? pero aquí sí
00:21:22
¿vale? porque Java, no olvidemos
00:21:29
aunque
00:21:35
Java es un lenguaje extraño
00:21:35
porque no es ni compilado ni interpretado
00:21:38
es una mezcla de las dos cosas
00:21:41
entonces los lenguajes interpretados
00:21:42
¿qué significan?
00:21:44
que se van interpretando línea por línea
00:21:46
con lo cual podemos entender
00:21:47
que cada línea es independiente de las demás
00:21:50
y que van de abajo
00:21:52
perdón, de arriba a abajo
00:21:54
entonces primero se hace esta
00:21:55
luego se hace esta otra
00:21:57
entonces cuando se hace esta
00:21:59
lo que hay abajo todavía no se ha mirado
00:22:01
con lo cual no molesta
00:22:04
esos son los programas interpretados
00:22:05
En los compilados se mira todo en su conjunto, entonces lo que se compila todo, entonces lo que hay arriba sí se puede ver afectado por lo que hay abajo, de ahí vienen los errores de compilación, ¿verdad? Los errores de compilación es que, oye, aquí has hecho una cosa y no me casa con lo de abajo, entonces no te dejo que compiles ni ejecutes.
00:22:08
entonces los compilados se mira en bloque
00:22:28
a ver si todo casa y todo está bien
00:22:31
y luego ya una vez compilados se ejecuta
00:22:32
y los interpretados puros
00:22:35
se va a línea por
00:22:37
ni se compila ni nada, se va
00:22:39
línea por línea, cuando yo hago una línea
00:22:41
lo que hay abajo ni lo he mirado todavía
00:22:43
me da exactamente igual, yo voy línea por línea
00:22:44
lo que puede ocurrir cuando ejecuto una línea es que esa línea
00:22:46
esté mal, esté mal escrita lo que sea
00:22:49
pero cuando yo ejecuto una línea
00:22:51
lo de abajo ni se mira
00:22:53
esos serían los interpretados puros, entonces Java es una mezcla
00:22:54
de los dos, recordad que primero se hace
00:22:57
una especie de pre-compilación
00:22:59
y en ese sentido algunas cosas
00:23:01
que hay abajo sí que pueden afectar a lo que hay
00:23:03
arriba y te dice, oye, esto no me está
00:23:05
casando, arréglalo
00:23:07
pero es una pre-compilación
00:23:08
solo, luego se hace un código
00:23:11
intermedio que ya la máquina virtual de Java
00:23:13
va interpretando
00:23:15
vale, pues ese medio
00:23:16
carácter de interpretado que
00:23:19
tiene, ese medio carácter a veces
00:23:21
da la cara
00:23:23
que es muy malo, lo de ser
00:23:23
interpretado es malo
00:23:27
¿cuál es la ventaja que tiene? que es independiente
00:23:28
de la plataforma, porque yo tengo el
00:23:31
intérprete que me hace la traducción a cada
00:23:32
equipo, ¿vale?
00:23:34
entonces si tú tienes un
00:23:37
traductor en cada país
00:23:38
tú puedes hablar un único idioma
00:23:41
y al país que vayas
00:23:42
ese traductor, ese intérprete
00:23:44
te lo va a traducir al chino, al
00:23:46
japonés, al que sea, tú puedes
00:23:48
hablar el único idioma, y ese es el
00:23:50
lenguaje interpretado
00:23:52
¿vale? pues entonces
00:23:53
esa es la ventaja de los interpretados
00:23:55
que las pautas
00:23:58
de programación son únicas y universales
00:24:00
y ya cada equipo se preocupa
00:24:02
de interpretar, por eso Java
00:24:04
intenta ser una mezcla de ambos
00:24:06
esa es la única ventaja que tiene
00:24:08
pero el problema es que no hay
00:24:09
esa
00:24:12
especie de verificación de si todo
00:24:12
casa entre sí, que no la hay
00:24:16
eso es malo también, entonces por eso
00:24:17
Java es una mezcla de los dos, bueno pues
00:24:20
lo que estaba diciendo es que su
00:24:22
carácter, su pseudo carácter
00:24:23
su pequeña parte que tiene interpretado
00:24:26
a veces sale
00:24:27
y aflora, y este es uno de los ejemplos en los que
00:24:29
aflora, fijaos la diferencia
00:24:31
entre yo haber declarado M
00:24:33
aquí arriba
00:24:35
que esta
00:24:36
se ha fastidiado
00:24:39
y haber declarado M
00:24:40
aquí abajo
00:24:43
que esta no se fastidia
00:24:44
¿vale?
00:24:47
entonces, yo aquí he declarado mi variable
00:24:49
mi variable M
00:24:51
Hace lo que tenga que hacer
00:24:53
Asigna su valor, se muestra y desaparece
00:24:55
Y se va a la basura
00:24:57
Y ahora después aquí al rato
00:24:58
Vuelvo a declarar otra M
00:25:00
Y esta M
00:25:02
Es válida
00:25:04
Para cualquier momento
00:25:08
A partir de aquí, y es una M nueva
00:25:11
Es una M nueva que yo puedo usar tranquilamente
00:25:13
A partir de aquí
00:25:15
Pero antes no
00:25:16
Recordad que no podemos usar una variable
00:25:19
Antes de que sea declarada
00:25:21
A ver, es que los lenguajes puramente compilados
00:25:22
Normalmente tienen unas reglas
00:25:28
C por ejemplo
00:25:30
Te obligaba a declararlas todas al principio
00:25:31
Para facilitar la tarea de los compiladores
00:25:34
Y todo eso
00:25:38
Vale, aquí por ejemplo
00:25:39
La variable m está declarada
00:25:42
Y está declarada en el bloque gordote
00:25:43
Que es en este
00:25:45
Pero eso no significa que la pueda yo usar aquí
00:25:46
No puedo usarla aquí
00:25:48
Porque la estoy usando antes de estar declarada
00:25:52
¿Vale?
00:25:55
Bueno, pues todo esto
00:26:01
En respuesta, aunque no lo parezca, a tu pregunta
00:26:02
¿Puedo declarar otra M fuera?
00:26:04
Puedes, pero si está después
00:26:06
Del bloque, si está después del bloque
00:26:08
Y será una M nueva
00:26:10
Que no tiene nada que ver con esta porque está ya desaparecido
00:26:11
Y se ha ido a la basura
00:26:14
¿Vale? Pero antes no porque entonces
00:26:15
Aquí habría una ambigüedad
00:26:18
Y la ambigüedad sería esta M
00:26:19
¿Cuál es? ¿Esta cajita o la cajita de arriba?
00:26:22
habría una ambigüedad, vale
00:26:25
vale
00:26:26
ah, vale
00:26:29
lo que estábamos diciendo era
00:26:33
que while las llaves son
00:26:34
opcionales, pero recomendables
00:26:37
para que quede claro el código
00:26:39
y si
00:26:40
abrís llaves
00:26:43
recordad que en ese momento lo que abrís es
00:26:44
un espacio, un ámbito nuevo
00:26:47
un ámbito más pequeñito, lo que se declare
00:26:49
ahí, fuera desaparecido
00:26:51
venía a cuento de todo esto, ¿no?
00:26:52
vale, ¿y qué más cosas de...
00:26:55
Entonces, esta es la única sintaxis que en realidad que hace falta para hacer bucles.
00:26:56
No hace falta más.
00:27:02
Lo que pasa es que igual que ocurría con el if,
00:27:03
hay otras formas de escribir bucles, ¿vale?
00:27:05
Que para algunos ejercicios pegan más y los dejan más bonitos.
00:27:08
Pero solamente porque los dejan más bonitos.
00:27:12
Es como el switch case que deja más bonito un programa
00:27:14
si tú quieres ver, hacer algo en función de si n es un valor u otro.
00:27:17
Se queda más bonito con switch case que con if, else if, else if.
00:27:20
pero se puede hacer todo con el if, el se
00:27:24
pues aquí igual, se puede hacer todo con el while
00:27:27
pero hay veces que queda más bonito
00:27:29
con otras dos variantes más
00:27:31
tres, que las incorporaremos
00:27:33
en breve, vale
00:27:35
y el otro día también, ya hablando
00:27:36
de bucles ya, dijimos que ahora ya
00:27:39
hay cosas que podemos hacer ya con los bucles
00:27:41
que antes no podíamos hacer
00:27:43
como por ejemplo contar, vale
00:27:44
entonces ahora ya hay patrones de
00:27:47
algoritmia, patrones de algoritmia
00:27:49
que ya tenemos que ir incorporando
00:27:51
porque ya con los bucles se complica
00:27:53
con las decisiones, los patrones de algoritmo
00:27:54
eran muy claros, yo me he dado cuenta
00:27:56
en un programa que tiene
00:27:58
dos posibilidades, un if
00:28:00
ya está, un if, no tengo que pensar más
00:28:02
de que depende una a la otra
00:28:04
de esto, pues eso para la condición
00:28:06
me he dado cuenta en un programa que tiene hasta
00:28:08
tres posibilidades, pues un if con un
00:28:10
elseanidado o un if
00:28:12
elseif, o si depende del valor de una
00:28:14
variable, un switch case, y no teníamos
00:28:16
en realidad que
00:28:18
pensar más, lo teníamos
00:28:19
Relativamente claro
00:28:22
Luego ya lo complicado podía ser
00:28:23
Traducir yo las condiciones
00:28:26
A Java, traducirla a una condición
00:28:28
Que está en lenguaje natural, traducirla a Java
00:28:30
Eso podía ser más complicado, pero no teníamos más que pensar
00:28:32
Vale, ahora con el bucle
00:28:34
Hay como más patrones mentales en la cabeza
00:28:36
Se abren más cosas
00:28:38
Más posibilidades
00:28:40
Bueno, pues una de las cosas que se abren
00:28:41
En un programa yo puedo necesitar contar
00:28:43
Contar cosas
00:28:46
Como subparte, como pequeña parte
00:28:47
De algo más grande
00:28:50
como pequeña parte de algo más grande
00:28:51
¿vale? pues eso ya es
00:28:52
un patrón que ya incorporamos el otro
00:28:55
día en esos ejemplos, por ejemplo
00:28:57
aquí podríamos
00:28:59
incorporar, este
00:29:00
n ya es un contador, ¿no?
00:29:03
ya es un contador, ya está funcionando como un contador
00:29:05
lo que pasa es que
00:29:07
me está descontando
00:29:08
en lugar de ir hacia arriba, ¿vale?
00:29:10
me está
00:29:14
descontando cuantos
00:29:15
olas
00:29:17
Cuento, pero en general
00:29:18
Cuando uno quiere contar lo que sea
00:29:20
Por ejemplo
00:29:22
Lo que hicimos el otro día, pues
00:29:23
Contar pares
00:29:25
Entre uno
00:29:30
Y
00:29:32
Bueno, contar pares
00:29:33
Ya sabemos que es una tontería
00:29:35
Entre uno y un
00:29:37
Porque serán la mitad de lo que nos han dado
00:29:39
Pero bueno, entre uno y un número solicitado por teclado
00:29:41
Vale, vamos a suponer
00:29:44
Que nos piden este ejercicio
00:29:50
¿Cuántos números pares habrá entre uno
00:29:51
Y un número que me dan por teclado
00:29:54
Vale, habrá la mitad, es una tontería
00:29:56
Vale, pero vamos a contarlos
00:29:58
¿Eh?
00:29:59
Sí, pero bueno, podrías hacer la diferencia
00:30:04
Y hacer la mitad igualmente
00:30:06
Pero bueno, venga, vamos a poner
00:30:07
Contar múltiplos de 3
00:30:10
Que así parece que
00:30:12
Bueno, da igual, dejamos así, da lo mismo
00:30:14
Vale
00:30:16
Vale
00:30:16
Pues venga, pedimos el numerito por teclado
00:30:18
ala, el número ya está pedido
00:30:21
y ahora
00:30:29
la parte de datos de entrada
00:30:31
la tenemos, hay que pedir un único número
00:30:33
ya lo tengo pedido, y ahora pensamos
00:30:35
¿qué tengo que hacer aquí?
00:30:37
tengo que contar cosas, tengo que contarlas
00:30:39
un while voy a necesitar
00:30:42
sí o sí
00:30:44
voy a necesitar un while
00:30:44
para ir
00:30:46
incrementando esa cuenta
00:30:49
que empieza desde cero
00:30:51
tengo que contar cosas, entonces si tengo que
00:30:52
contar cuántas veces ocurre
00:30:57
algo, cuando yo identifico que tengo que
00:30:59
contar cuántas veces ocurre algo
00:31:01
esto va a estar en mi programa
00:31:03
va a estar esto sí o sí, tengo que contar
00:31:05
cuántas veces ocurre algo
00:31:07
vale, pues entonces
00:31:08
ahora ya nos vamos a la siguiente
00:31:11
parte que es, bueno, venga
00:31:13
pues que tengo que contar
00:31:15
como lo plasmo aquí
00:31:17
pues tienes que contar
00:31:18
los números pares
00:31:20
que hay entre uno y el que te han dado, con lo cual
00:31:23
eso se traduce a decir, tengo que
00:31:25
contar cada número que sea par
00:31:27
es decir, yo voy contando
00:31:29
tengo que contar números
00:31:31
es como si contara alumnos, ¿cuántos alumnos son rubios?
00:31:32
voy pasando alumno por alumno
00:31:35
este, este, este, me paro en el que es rubio
00:31:37
este, este, este, me paro en el que es rubio
00:31:38
pues aquí no contamos alumnos
00:31:40
que cumplen una condición, sino que contamos
00:31:43
números que cumplen una condición
00:31:45
luego hago un barrido sobre
00:31:46
números, ¿vale?
00:31:49
entonces lo primero que tengo que identificar es
00:31:50
mi barrido para ver quién cumple la condición
00:31:52
sobre qué concepto es
00:31:55
¿Sobre qué cosa es?
00:31:56
En este caso, sobre números.
00:31:58
Yo tengo que ir sobre el 1, luego sobre el 2, luego sobre el 3, luego sobre el 4.
00:31:59
Vale, pues entonces, alguna variable tendré que tener para que guarde esos elementos por los que yo voy barriendo.
00:32:04
Si yo tuviera que contar cuántos alumnos tienen gafas, pues tendría que tener una variable para el alumno.
00:32:13
Y ahora ya, en esa variable irían entrando los alumnos.
00:32:22
venga tú, entra, entra, entra, a ti te cuento
00:32:25
a ti no, a ti te cuento, a ti no
00:32:27
en este caso no son sobre alumnos
00:32:28
sobre lo que cuento, sino sobre números
00:32:31
pues tendré que tener una variable
00:32:33
en la que voy metiendo los números
00:32:35
por los que voy pasando
00:32:36
vale, pues entonces
00:32:38
aquí me voy a declarar una variable
00:32:41
como son números enteros
00:32:43
pues por ejemplo, num
00:32:47
y ahora, esta variable
00:32:49
tiene que ir recibiendo
00:32:52
tiene que ir recibiendo
00:32:54
Todos los elementos sobre los que yo estoy haciendo el barrido
00:32:55
¿Vale?
00:32:58
Como si tuviera mi variable
00:33:00
Para contar alumnos, pues primero recibe a Andrea
00:33:01
Luego así, luego no sé qué
00:33:04
¿Vale? Para irlos contando
00:33:05
Pues este tiene que ir recibiendo esta variable
00:33:07
Todos los elementos sobre los que voy barriendo
00:33:09
¿Vale? Y ahora pienso
00:33:10
Pues, ¿por cuáles tengo que
00:33:13
Barrer? ¿Cuáles son? Pues entre uno
00:33:15
Y el que te han dado
00:33:17
¿Vale? Pues venga, voy a empezar con el primero
00:33:18
Ups
00:33:21
Pues entonces la inicializo a uno
00:33:22
vale
00:33:24
y ahora yo ya
00:33:26
lo siguiente que me queda es
00:33:28
este cumple la condición
00:33:30
de ser par
00:33:32
pues lo cuento
00:33:34
y me voy al siguiente
00:33:38
para seguir haciendo el barrido
00:33:41
vale, me voy al siguiente
00:33:42
vale
00:33:44
entonces ya he avanzado muchísimo
00:33:46
primero he identificado
00:33:50
que tengo que contar
00:33:51
con lo cual tengo ahí mi estructura de contador
00:33:52
empieza valiendo 0
00:33:55
y se irá incrementando, ahora
00:33:57
tengo que pensar, ¿qué tipo
00:33:59
de elemento es sobre el que yo estoy
00:34:01
navegando para contar? ¿qué tipo de
00:34:03
elemento? son números
00:34:05
pues una variable tendrá que
00:34:06
tener esos elementos
00:34:09
secuencialmente, primero uno, luego otro
00:34:11
luego otro que voy contando, pues es esta
00:34:13
vale, ahora
00:34:15
¿de dónde se nutre esa variable
00:34:17
para ir recibiendo todo con lo que yo voy
00:34:21
contando? pues entre uno y el que
00:34:23
me han dado? Bueno, pues
00:34:25
empiezo por 1
00:34:27
y voy incrementándolo.
00:34:27
¿Vale?
00:34:31
Y ahora ya sí que hago la cuenta. ¿La cuenta cuál va a ser?
00:34:32
Esto. Y ya sólo
00:34:35
me falta cuándo termino de contar.
00:34:37
¿Cuál sería la condición?
00:34:39
Cuando el 1 haya llegado al número que te han dado.
00:34:40
Claro, me han dicho, cuenta solamente
00:34:43
entre los extremos 1
00:34:45
y el que te han dado.
00:34:46
Pues entonces la condición será, mientras
00:34:48
este numerito,
00:34:50
que es sobre el que yo estoy
00:34:52
haciendo el barrido, sea menor o igual
00:34:54
que el que me han dado
00:34:56
vale, bueno, esto
00:34:57
pues claro, uno
00:35:06
en un momento dado, pues lo
00:35:08
lo puede ver claro
00:35:10
lo puede hacer del tirón y ya está
00:35:12
no hay por qué desglosarlo en pasos
00:35:14
pero de alguna manera el proceso mental
00:35:16
al que responde
00:35:18
es a este que os digo
00:35:20
entonces ese proceso mental no lo perdéis de vista
00:35:21
porque es necesario en muchos contextos
00:35:24
más complicados, entonces cuando hay
00:35:26
una cuenta, hay un contador
00:35:28
eso está claro, un contador que se va incrementando
00:35:30
en un bucle
00:35:32
y hay una variable
00:35:32
que es la que va recibiendo
00:35:35
todo lo que yo me voy fijando
00:35:37
para contar
00:35:40
que se corresponderá al tipo de dato
00:35:40
de los elementos
00:35:43
que yo estoy contando
00:35:46
entonces una vez que ya lo tengo
00:35:47
pues ya habrá una condición
00:35:50
que indica si toca contarlo o no toca contarlo
00:35:51
una condición
00:35:54
y luego ya tendré que centrarme
00:35:54
primero en que esa variable
00:35:57
vaya cambiando, que esa variable
00:35:59
vaya pasando al siguiente, vaya pasando al siguiente
00:36:02
y luego ya en la
00:36:03
condición en la que paro de contar, no puedo
00:36:05
estar contando hasta el infinito, en algún momento
00:36:07
yo cuento los alumnos
00:36:09
que tienen gafas de aquí, no del
00:36:11
universo entero
00:36:13
¿vale?
00:36:15
¿vale? pues entonces
00:36:21
en el aula
00:36:23
virtual
00:36:26
Hay un montón de ejercicios de esto
00:36:28
Desde muy facilitos hasta más complicados
00:36:32
Vamos a empezar
00:36:34
O vais a empezar ahora con los facilitos del principio
00:36:35
Que alguno creo que es este
00:36:39
O bueno, no es exactamente este
00:36:40
Pero es muy parecido
00:36:41
Yo tenía un teléfono
00:36:42
¿Yo no tenía un teléfono en algún lado?
00:36:46
Uh, sí
00:36:53
Y lo sigo teniendo
00:36:54
Bueno
00:36:56
si no me conecto
00:36:59
a la 55 de John y ya está
00:37:10
ah, no sé
00:37:12
quién es la 55 de John
00:37:15
será él, ¿no?
00:37:17
en un momento me dice la password y listo
00:37:19
o sea, la hackeo
00:37:21
casi, casi
00:37:22
¿y por qué pones
00:37:25
más más?
00:37:35
porque esta variable
00:37:38
los números que yo estoy contando
00:37:40
parten desde el 1
00:37:42
pero tiene que pasar por todos
00:37:43
el 1, y luego el 2, y luego el 3, y luego el 4
00:37:45
yo tengo que hacer esa comprobación con todos
00:37:47
desde el 1 hasta n
00:37:49
entonces para pasar por todos
00:37:50
los tengo que ir incrementando
00:37:52
a ver
00:37:54
¿Qué pasa? ¿Tienes frío?
00:38:30
Gracias.
00:39:00
Venga, pues este listado de aquí.
00:39:30
Bueno, vamos a aprovechar y parar aquí en este momento.
00:39:43
Y luego ya reenganchamos.
00:39:49
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 23
- Fecha:
- 20 de octubre de 2024 - 18:26
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 39′ 52″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 150.04 MBytes