20261022 Bucles-do-while - 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:
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.
00:00:01
Pues muy bien, esa parte entendida
00:00:29
Ahí ya se nos activa la bombilla de decir
00:00:31
Vale, esto es un bucle
00:00:36
Porque hay una cosa que se hace un montón de veces
00:00:38
Que es solicitar número, leerlo, solicitar número, leerlo
00:00:41
Ya se nos activa la bombilla de que hay un bucle ahí
00:00:44
¿Vale?
00:00:46
Bueno, ¿y cuál es el objetivo del programa?
00:00:48
Algún objetivo tendrá, no estar todo el rato solicito, leo, solicito, leo, solicito, leo
00:00:51
Bueno, lo hice después
00:00:55
tendrá que contar
00:00:57
cuántos de esos números
00:00:59
que se han introducido previamente
00:01:02
es negativo
00:01:03
luego ahí se nos enciende ya otra bombilla
00:01:04
de ah vale, el objetivo del programa es contar
00:01:07
ya sabemos que contar
00:01:09
se hace siempre en el contexto de un bucle
00:01:11
siempre
00:01:13
para contar ya sabemos
00:01:14
porque nos lo hemos aprendido
00:01:17
porque ya lo hemos visto en ejemplo
00:01:18
entonces uno ya se lo aprende
00:01:19
primero lo entiende
00:01:21
después se lo aprende
00:01:23
y ya deja ahí el conocimiento
00:01:25
para que ese conocimiento pueda hacer
00:01:27
ese pin encendérsele a la bombilla
00:01:29
cuando tú le salgo
00:01:32
si no tienes el conocimiento ahí
00:01:33
nunca se te va a encender esa bombilla
00:01:35
vale, pues como nosotros ya hemos entendido
00:01:36
lo que es un contador y nos hemos aprendido
00:01:39
cómo se usa
00:01:41
pues ya está, esto va a implicar
00:01:42
que yo tenga que usar una variable contadora
00:01:44
que inicializa a cero
00:01:47
porque las cuentas siempre se inicializan a cero
00:01:48
y dentro del bucle
00:01:51
al cual está asociado el contador
00:01:54
porque los contadores siempre asociados
00:01:56
a un bucle, dentro de ese bucle
00:01:58
se tendrá que ir incrementando
00:02:00
la cuenta en cada iteración
00:02:02
se tendrá que ir incrementando la cuenta
00:02:04
conforme vayan ocurriendo
00:02:06
las cosas que tengo que contar
00:02:08
¿tengo que contar las todas?
00:02:10
las iteraciones
00:02:13
no, aquí tendré que contar sólo
00:02:13
las iteraciones que se correspondan
00:02:16
con números negativos
00:02:18
luego una cuenta
00:02:20
siempre está asociada
00:02:22
a una variable contadora que se inicializa a cero, y a un bucle.
00:02:24
Y ese contador se irá incrementando, irá contando en las iteraciones del bucle que corresponda,
00:02:29
en las que ocurra lo que tiene que contar, en las que ocurra, no todas.
00:02:38
Entonces mi cuenta, alumnos que pasan por la puerta que son rubios,
00:02:45
pues el bucle es alumno pasa, alumno pasa, alumno pasa.
00:02:51
Mi variable contadora, alumno pasa, moreno, bueno, lo incremento.
00:02:54
Alumno pasa, moreno, lo incremento.
00:02:59
Siguiente iteración, alumno pasa, rubio, ahí lo incremento, ¿vale?
00:03:01
Entonces, el contador se incrementa, su incremento ocurre siempre dentro del bucle,
00:03:04
pero no en todas las iteraciones, solo en las que se correspondan con el hecho que hay que contar.
00:03:10
bueno, pues entonces
00:03:15
si
00:03:18
automáticamente ya
00:03:19
tenemos el concepto de bucle en la cabeza
00:03:22
el concepto de contador
00:03:25
en cuanto leemos esto, pues ya vemos
00:03:26
vemos el problema en la cabeza
00:03:28
pues un bucle que está haciendo algo un montón de veces
00:03:29
un contador que se va incrementando cuando pase ese algo
00:03:32
ese algo que será
00:03:35
número negativo
00:03:37
¿sé poner número negativo en condición?
00:03:38
sí, menor que cero
00:03:41
pues ya casi tengo todos los elementos que necesito
00:03:42
para hacer este código
00:03:44
entonces ya
00:03:46
uno empieza a hacer su primera versión
00:03:47
sobre la que luego va iterando
00:03:50
empieza a hacer su primera versión
00:03:52
entonces como tenemos que leer del teclado
00:03:55
pues un escáner
00:03:57
habrá que usar
00:03:58
lógicamente
00:04:00
vale, y hemos dicho
00:04:02
esto va a necesitar un bucle
00:04:13
sí o sí
00:04:15
un bucle sí o sí
00:04:16
porque hago muchas veces algo
00:04:18
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.
00:04:22
Pues, ¿qué es lo que se repite? Pues en particular se repite lo de pedir número, leerlo, pedir número, leerlo.
00:04:31
pues venga, pedir número
00:04:37
y leerlo, ¿qué significa leerlo?
00:04:41
leerlo significa recoger el valor de la consola
00:04:50
y asignárselo a la variable que a mí me dé la gana, eso significa leer
00:04:53
un valor del teclado, ¿no? entonces, a una
00:04:57
variable, pues por ejemplo
00:05:01
esta, este es el número que yo voy a leer del teclado
00:05:04
bueno, pues ya he hecho parte del programa
00:05:09
que es, esto lo voy a hacer un montón de veces
00:05:15
introduzca número, léelo, introduzca número, léelo, introduzca número, léelo
00:05:18
vale
00:05:22
el objetivo del programa ya he leído antes que es
00:05:23
contar cuántos de estos números son negativos
00:05:27
pues contar va a implicar
00:05:30
una variable contadora
00:05:33
inicializada a cero
00:05:35
que es la que va a llevar la cuenta
00:05:37
Y ahora esa variable se va a incrementar dentro del bucle cuando corresponda, ¿vale?
00:05:39
En cada iteración del bucle, en cada vuelta, en cada iteración, toca incrementarla.
00:05:47
Hay que contar todas las iteraciones, todas, todas, todas.
00:05:54
No hay que contarlas todas, ¿no?
00:05:58
hay que contar solo
00:05:59
hay que contar solo
00:06:02
las iteraciones en las cuales
00:06:03
se haya ingresado
00:06:06
un número negativo
00:06:09
solo hay que contar
00:06:11
esas
00:06:12
entonces ya tengo bastante
00:06:13
hecho y para
00:06:19
eso pues me he apoyado en cosas que ya
00:06:20
he entendido de ejercicios
00:06:23
anteriores que hemos hecho
00:06:24
que pues ya me voy apoyando en eso
00:06:27
y digo ah vale ya tengo mi idea clara en la cabeza
00:06:28
pues la puedo aplicar a cualquier situación
00:06:31
cuando uno tiene ya los conceptos
00:06:33
claros ya puede dar el salto
00:06:35
de aplicarlos con las pequeñas
00:06:37
modificaciones que corresponda
00:06:39
de aplicarlos a cualquier otra situación
00:06:40
pues ala
00:06:42
el programa está acabado, lógicamente no hay cosas
00:06:44
aquí que me faltan
00:06:47
bueno, para empezar por supuesto me faltaría mostrar el resultado
00:06:47
final
00:06:51
han sido
00:06:51
con
00:06:56
números negativos
00:06:59
aquí para no arrastrar
00:07:03
esto como pequeño inciso
00:07:12
para no arrastrar cuando yo muestro
00:07:14
mensajes dentro de un system out
00:07:17
tan largos que son un rollo y que al final
00:07:18
los acabo poniendo aquí abajo para que
00:07:21
se vean en la pantalla
00:07:23
pero queda un poco feo
00:07:24
para no arrastrarlo
00:07:26
me voy a acostumbrar a
00:07:28
guardar primero
00:07:30
el mensaje que quiero mostrar
00:07:32
en un string
00:07:34
y luego pasarle el string
00:07:36
al system out este
00:07:39
lo voy a empezar a hacer de esta manera
00:07:41
porque se va a ver mejor el código
00:07:43
y que gano, me diréis
00:07:45
si ahora tengo que poner
00:07:47
la línea larga igualmente
00:07:49
no, porque tengo el string
00:07:51
multilínea
00:07:53
que os dije en su momento, que a partir
00:07:54
de cierta versión de java se puede usar
00:07:57
que es
00:07:59
que tú pones aquí
00:08:01
habido
00:08:02
y
00:08:04
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.
00:08:06
Números negativos
00:08:39
Punto, aquí me aseguro que he puesto un espacio
00:08:45
Y aquí pongo otro
00:08:48
Vale, a ver, un string
00:08:50
Número, he puesto aquí
00:08:55
Ay, cont, jolines
00:08:58
Vale, entonces
00:09:03
Cuando tenéis que escribir un string muy largo
00:09:09
Un string muy largo
00:09:12
Pues el Java
00:09:13
Simplemente el compilador de Java
00:09:16
Te permite iniciarlo
00:09:17
y cerrarlo
00:09:20
con tres series de comillas
00:09:21
dobles, iniciarlo y cerrarlo con tres series de comillas
00:09:24
dobles, y aquí uno podría
00:09:26
poner todas las líneas que quisiera
00:09:28
¿vale?
00:09:29
entonces, ¿qué nos
00:09:32
permite el string este
00:09:34
multilínea iniciado y cerrado
00:09:36
con una secuencia de tres dobles
00:09:37
comillas? es string
00:09:40
ponerlo en varias líneas, y no tener que escribirlo
00:09:42
todo seguido, que solo
00:09:44
efectos de verlo, en el código aquí
00:09:46
de verlo, nada más, el string es el mismo
00:09:48
luego cuando se guarda en memoria, como variable
00:09:49
es el mismo, pero solo a efectos
00:09:52
de verlo, pues mucho más bonito
00:09:54
así, que si no
00:09:55
si yo quiero varias líneas
00:09:58
pues tendría que ponerlo así
00:10:00
ha habido
00:10:02
ahora
00:10:04
tendría que concatenarlo
00:10:06
con la línea
00:10:08
que fuera, bajándome aquí abajo
00:10:10
vale
00:10:12
no me puedo bajar
00:10:14
abajo de golpe, tendría que
00:10:16
partirlo y poner aquí el otro string que es un rollo entonces vale bueno pues os podéis
00:10:17
acostumbrar al string este porque lo vais a ver en cualquier situación vale empieza y se cierra
00:10:31
con triples dobles comillas y eso nos permite poner varias líneas sin necesidad de tener que
00:10:48
concatenar una línea con otra, una línea con otra
00:10:55
todo el rato, bueno pues entonces
00:10:57
yo voy a dejarlo así más cortito
00:11:01
y
00:11:03
ya está, vale
00:11:10
bueno pues
00:11:12
ya hemos hecho la parte del programa que nos
00:11:14
faltaba, que era mostrar el resultado
00:11:17
venga, muy bien, mostrar el resultado, pero este programa
00:11:19
sigue, le faltan cosas
00:11:21
porque el bucle cuando acaba
00:11:23
vale, me falta la condición
00:11:25
del bucle
00:11:27
y todos recordamos que significa la condición
00:11:28
que se pone ahí
00:11:31
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?
00:11:32
Ya sabemos lo que significa esa condición, ya la hemos entendido de varios ejemplos.
00:11:54
Vale, pues aquí nos tendremos que plantear poner una condición que cuando sea falsa, se acabó, salgo del bucle.
00:11:59
Y cuando sea cierta, vuelvo a entrar.
00:12:09
Entonces, para eso tenemos que recordar el enunciado, a ver qué me dice.
00:12:12
El programa tiene que estar leyendo números todo el rato hasta que se introduzca un cero.
00:12:17
Cuando se introduce un cero, tiene que cambiar.
00:12:21
Perdón, tiene que terminar.
00:12:24
Vale.
00:12:26
Pues entonces, ¿qué condición se os ocurriría poner aquí?
00:12:27
Para que el bucle, cada vez que tú introduzcas un número que no sea cero, vuelva otra vez arriba, vuelva otra vez arriba.
00:12:30
Cuando tú has introducido un número que es cero, ya no vuelve a pedirte más números y el bucle termina.
00:12:38
¿Qué condición pondríais ahí?
00:12:44
Venga, que alguien me diga, lo que sea.
00:12:52
Dictádmelo tal cual lo escribiríais.
00:12:59
con los nombres de variables que tengo yo ahí
00:13:00
y todo
00:13:03
los negativos también valen
00:13:03
o sea, la única condición
00:13:19
que hace que ya no haya
00:13:21
más peticiones es que tú pongas
00:13:23
cero
00:13:24
claro, tú piensa que ahí pones
00:13:25
la condición
00:13:32
opuesta a la de salida
00:13:33
la opuesta a la de salida
00:13:36
siempre
00:13:38
o sea, esta es la opuesta a la de salida
00:13:38
¿cuándo vas a salir tú?
00:13:46
claro, salimos
00:13:48
cuando el número sea igual a cero
00:13:50
entonces normalmente
00:13:52
nosotros identificamos más fácilmente
00:13:53
la condición que haga que salgamos
00:13:57
pues en este caso el número es igual a cero
00:13:58
o aquí pues cuando
00:14:00
están pasando alumnos
00:14:02
cuando Rubio, Moreno, yo voy contando
00:14:04
pues cuando pasa un alumno sin pelo
00:14:06
nosotros normalmente identificamos
00:14:08
más fácilmente de palabra
00:14:10
la condición que hace que el bucle termine
00:14:11
vale, pero lo que tenemos que pensar
00:14:13
es que la que ponemos aquí
00:14:15
tiene que ser justo la negada de esa
00:14:17
porque esta condición significa
00:14:19
si esto ocurre, vuelvo a entrar
00:14:22
no termino
00:14:24
con lo cual esta tiene que ser siempre
00:14:25
la condición opuesta o negada
00:14:27
de la que hace que el bucle
00:14:29
termine
00:14:31
entonces en este caso, el bucle cuando ya no va a pedir
00:14:32
más números y va a continuar
00:14:35
ya el programa o lo que sea
00:14:37
cuando el número sea igual a cero, pues aquí hay que poner
00:14:39
exactamente la negada
00:14:41
¿vale? entonces
00:14:43
si pusiéramos exactamente la negada
00:14:45
estaríamos poniendo esto, ¿verdad?
00:14:47
podríamos poner, mientras
00:14:49
no
00:14:51
número igual a cero, o sea, esta es mi condición
00:14:53
esta es mi condición
00:14:56
para que se vea mejor con los paréntesis
00:14:59
esta es mi condición de salida
00:15:01
cuando número igual a cero
00:15:03
me voy fuera
00:15:05
pero la que tengo que poner aquí dentro
00:15:06
es justo la opuesta
00:15:09
porque lo que se pone aquí dentro es la condición
00:15:11
que si se cumple
00:15:13
entras otra vez
00:15:15
luego tienes que poner la opuesta a la que te hace salir
00:15:16
¿vale?
00:15:20
entonces como la que te hace salir es número igual a cero
00:15:21
pues aquí la opuesta
00:15:23
¿vale?
00:15:25
pero claro, esto así escrito está bien
00:15:27
esta condición está bien, arreglamos eso del rojo
00:15:29
esto está bien
00:15:31
pero
00:15:32
es muy fea
00:15:34
decir no
00:15:37
número igual a cero es mucho mejor
00:15:38
poner número distinto de cero
00:15:40
es más bonito
00:15:42
entonces para qué poner no número igual
00:15:44
a cero si podemos poner número distinto
00:15:46
de cero y nos queda todo más chulo
00:15:48
¿vale? entonces esto empieza
00:15:50
ya a aproximarse, tiene el boceto de nuestro
00:15:54
programa final
00:15:56
mientras el número leído sea diferente
00:15:57
de cero
00:16:00
pues pido número
00:16:00
y si es negativo lo cuento
00:16:03
vale, tiene pinta de que esto ya
00:16:06
y luego ya muestro mi resultado
00:16:07
vale
00:16:09
pero aquí
00:16:10
ya hay algo raro y de hecho ya me está avisando
00:16:14
el compilador con un error de compilación
00:16:17
que me lo pone aquí en rojo
00:16:19
vale
00:16:20
entonces
00:16:22
sin mirar el aviso que me está dando
00:16:25
¿por qué creéis que el compilador
00:16:27
que esto ya nos ha salido
00:16:30
otras veces, ¿por qué creéis que el compilador
00:16:31
se está quejando ahí?
00:16:33
Y está diciendo, oye, no, dime, exactamente, porque una variable no puede usarse antes de su declaración, nunca.
00:16:35
Siempre tiene que estar declarada antes de su primer uso, ¿vale?
00:16:47
Entonces, aquí la estamos usando, la estamos usando para evaluar una condición.
00:16:52
pero la variable no está declarada
00:17:00
porque yo cuando estaba
00:17:04
haciendo el programa, como estaba tirando así
00:17:06
haciéndolo pipas pipas
00:17:08
pues la he declarado aquí en el momento de leerlo
00:17:09
entonces pues no es su sitio
00:17:12
tendría que declararla antes
00:17:14
¿vale?
00:17:16
entonces yo puedo arreglar esto
00:17:18
declarándola antes
00:17:19
¿vale?
00:17:21
vale, pues entonces
00:17:25
yo la declaro antes
00:17:27
y entonces
00:17:31
ya puedo usarla
00:17:36
a partir de este punto, puedo usarla
00:17:38
entonces según esto, pues yo quito esto
00:17:40
y se acabó, perdón, vale
00:17:42
vale
00:17:44
pero de nuevo, ya esto
00:17:47
podría acercarse más a mi resultado
00:17:50
final, pero de nuevo
00:17:52
el compilador me está diciendo
00:17:54
hay algo que no me gusta y que
00:17:56
no te dejo seguir, no te dejo
00:17:58
que ejecutes este programa, porque aquí hay algo
00:18:00
que no me gusta, por eso está en rojo
00:18:02
pues de nuevo, que no le gusta al compilador
00:18:03
y por qué
00:18:07
no nos deja
00:18:08
compilar y ejecutar ese programa.
00:18:09
Claro, no tiene
00:18:21
valor en este momento. Entonces, cuando
00:18:22
se usa
00:18:23
cuando se usa
00:18:24
un valor en una
00:18:27
expresión, en este caso es una expresión booleana,
00:18:32
pero podría estarse usando
00:18:34
para hacer una suma, lo que fuera.
00:18:36
Cuando se usa un valor dentro de una
00:18:38
expresión,
00:18:40
se asume que
00:18:42
una variable, perdón. Cuando se usa una variable
00:18:43
dentro de una expresión se asume que esa variable
00:18:46
ha llegado a este punto
00:18:48
ha llegado a este punto
00:18:50
con un valor dentro asignado
00:18:51
porque si no ha llegado con un valor dentro asignado
00:18:53
si esta es mi variable número
00:18:56
la cajita de memoria que tiene mi variable número
00:18:57
es esta
00:19:00
si no tiene nada asignado
00:19:01
no he hecho ninguna asignación
00:19:04
cuando ahora
00:19:06
la máquina virtual tenga que
00:19:08
coger el valor que tiene dentro
00:19:09
para compararlo con cero
00:19:11
pues dirá, uy, en esta caja no hay nada
00:19:13
nadie ha metido nada, no puedo usar
00:19:15
el valor de esta variable para la expresión
00:19:17
correspondiente, no puedo usarlo
00:19:20
porque nadie ha metido nada
00:19:22
entonces efectivamente
00:19:23
lo que nos está diciendo es
00:19:25
que número no está inicializado
00:19:28
entonces
00:19:30
a ver, en realidad sí lo está
00:19:31
porque
00:19:33
la RAM, sus ceros y unos
00:19:34
sus diestables
00:19:37
tienen que tener cosas, no tiene la nada
00:19:39
o tiene ceros o tiene unos
00:19:42
entonces
00:19:43
Java por defecto
00:19:44
cuando tú declaras una variable
00:19:47
inicializa cero
00:19:48
pero el compilador te dice
00:19:49
la inicialización que tienes
00:19:53
la inicialización por defecto
00:19:54
mira que me extraña que la inicialización por defecto
00:19:56
coincida con la que quieres tú
00:19:58
haz tú una explícita
00:19:59
es la que nos está diciendo
00:20:02
haz tú una inicialización que tú quieras
00:20:04
yo no voy a confiar en la de por defecto
00:20:06
que esa
00:20:09
te valga
00:20:10
¿Vale?
00:20:12
Bueno, pues entonces, ¿cómo podríamos arreglar esto?
00:20:14
Perfecto.
00:20:21
Hay una solución que es la más fácil, que es,
00:20:22
yo lo que quiero es que entre en el bucle una primera vez,
00:20:24
que entre en el bucle una primera,
00:20:28
porque la primera vez tiene que entrar sí o sí,
00:20:30
porque el primer número lo necesito.
00:20:32
El primer número lo necesito.
00:20:34
¿Qué es este?
00:20:36
Vale, ya no entro más veces.
00:20:37
Pero una primera vez tengo que entrar sí o sí para leer el primero.
00:20:38
pues como me las puedo apañar
00:20:41
para forzar
00:20:43
que esta condición
00:20:45
la primera vez
00:20:47
sea cierta si o si
00:20:49
queremos que la primera vez sea cierta si o si
00:20:50
pues le damos a número
00:20:53
cualquier valor diferente de 0
00:20:55
cualquiera
00:20:57
y entonces ya automáticamente el while
00:20:58
entra una primera vez
00:21:01
porque esa primera vez es que tiene que entrar
00:21:03
si o si, queremos que entre si o si
00:21:05
para leer el primero
00:21:07
entonces este sería el arreglo más sencillo
00:21:08
lo inicializamos a cualquier valor
00:21:11
diferente de cero
00:21:13
entra y ya lee el primero
00:21:14
y a partir de ahí ya lo cuenta
00:21:17
si es negativo
00:21:19
y vuelve, era cero
00:21:20
ese que has metido, ese último, no, no era cero
00:21:22
pues otro segundo
00:21:25
y lo cuenta si es negativo
00:21:26
era cero ese último, pues sí
00:21:28
resulta que era cero
00:21:31
pues ya está, se acabó
00:21:32
entonces esa podría ser
00:21:34
la solución más sencilla
00:21:38
lo inicializamos a cualquier valor
00:21:41
diferente de cero
00:21:44
entonces el programa ya
00:21:45
no tiene ni un error de compilación
00:21:49
¿vale? ni uno
00:21:52
y tiene pinta
00:21:54
de que se aproxima lo que queremos hacer
00:21:57
ahora pueden pasar varias cosas
00:21:59
que cuando lo ejecutemos
00:22:04
pete porque hay algo mal
00:22:05
le salen excepciones y ya entenderemos lo que son
00:22:08
o también puede ocurrir
00:22:10
que no le salgan excepciones y haga cosas
00:22:12
pero no sea lo que queremos
00:22:14
que esos son los errores complicados
00:22:16
los errores de compilación son muy fáciles
00:22:18
de arreglar porque es que estoy viendo ahí
00:22:20
que algo no funciona y lo arreglo
00:22:22
el verdadero
00:22:24
problema es cuando haces un software
00:22:26
y ese software funciona pero lo que
00:22:28
hace no es lo que tiene que hacer porque eso se
00:22:30
corresponde a que has hecho mal el algoritmo
00:22:32
has hecho mal el diseño y tienes que cambiarlo
00:22:34
desde el punto inicial
00:22:36
no es un error de sintaxis ni nada de eso
00:22:38
es un error sencillo
00:22:39
bueno vamos a probar esto antes de nada
00:22:40
ejecutamos esto
00:22:44
introducimos un número
00:22:49
vale, pues dos negativos
00:22:51
entonces, a ver, esta prueba no me debería
00:22:58
a mí permitir
00:23:00
concluir que funciona
00:23:02
en esta prueba sí, pero la idea es
00:23:03
probar con casos
00:23:06
los casos más raros
00:23:08
por ejemplo, introducir un cero
00:23:10
en este caso, el único caso raro que se me ocurre
00:23:12
es introducir un cero ya de partida
00:23:14
a ver qué hace
00:23:16
pues cero de partida
00:23:17
vale, pues sí, parece que es lo que quiero
00:23:21
bueno, pues parece que el programa funciona
00:23:24
nos quedamos con él, nos gusta y ya está
00:23:28
y no solo nos gusta
00:23:30
sino que nos ha permitido darnos cuenta
00:23:35
de una situación
00:23:37
que puede darse mucho
00:23:39
y que precisamente
00:23:41
porque se da mucho
00:23:43
Java nos ofrece
00:23:44
una sintaxis específica
00:23:47
para esa situación
00:23:49
no es necesaria
00:23:50
pero se adapta a una situación
00:23:52
que puede repetirse mucho
00:23:55
¿qué es la que ocurre aquí?
00:23:56
que tenemos un bucle
00:23:59
en el cual la primera vez
00:24:01
queremos que se ejecute
00:24:03
sí o sí
00:24:05
y ya las siguientes depende
00:24:05
era justo la situación de este bucle
00:24:07
la primera vez queremos que se ejecute
00:24:11
porque el primer dato lo necesitamos
00:24:13
y luego ya las siguientes depende de los datos
00:24:15
entonces
00:24:17
eso pasa en algunas situaciones
00:24:19
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.
00:24:20
entonces esta es una situación típica
00:24:47
la única en la cual tú
00:24:49
quieres hacer un bucle en el cual
00:24:51
quieres entrar una vez
00:24:53
es así o sí independientemente de la
00:24:55
condición y luego ya las siguientes
00:24:57
ya sí que depende
00:24:59
de cómo han sido esos primeros datos etc
00:25:00
¿vale?
00:25:03
entonces esto aquí lo hemos arreglado
00:25:05
pues haciendo esa trampilla
00:25:06
entre comillas que es
00:25:09
pues a esta variable le pongo 1 y forzo a que esta condición
00:25:10
sea true ¿vale? y no pasa nada
00:25:13
lo único es que
00:25:15
aquí como el programa es pequeñito
00:25:17
está todo compacto, vale
00:25:19
no pasa nada, pero en otra situación
00:25:21
a lo mejor yo esta inicialización
00:25:23
que he hecho como trampa
00:25:25
para que esto sea true la primera vez
00:25:27
esta inicialización resulta que está
00:25:29
muy arriba, porque el bucle está muy
00:25:31
abajo o en otra clase incluso
00:25:33
porque mi programa es muy grande
00:25:35
entonces el que está viendo
00:25:37
el código ve esta inicialización
00:25:39
y algo le extraña y dice
00:25:41
¿por qué a uno? ¿por qué de partida tiene que
00:25:43
¿será uno? ¿significará eso algo?
00:25:45
¿vale? cuando uno lee un código
00:25:47
de alguien, la idea es que
00:25:49
echando vistazos, así, entienda
00:25:51
qué hace, de qué va
00:25:53
entonces, uno ve esto y dice, ah vale
00:25:54
es una cuenta, porque
00:25:57
¿y esto? ¿por qué un número
00:25:58
es uno? ¿ese uno pinta algo?
00:26:01
aquí no pinta nada, podría haber sido
00:26:03
13, 27, 2.500
00:26:05
nos daba igual, con que fuera diferente de
00:26:06
cero, o sea, no tiene un significado real
00:26:09
y sin embargo, el que
00:26:11
lo vea dice, ¿y ese uno por qué?
00:26:13
tiene un significado, pues no tiene ninguno
00:26:14
solamente que quiere un número diferente
00:26:16
de 0
00:26:19
bueno, pues precisamente para
00:26:19
hacer más elegante, más bonito
00:26:22
el lenguaje
00:26:25
hay otra sintaxis
00:26:26
de bucles
00:26:29
que es la do while
00:26:30
que es esta
00:26:32
en lugar de
00:26:39
esta otra que es
00:26:45
while condición
00:26:47
y aquí lo que tengas que hacer
00:26:51
que esta ya la conocemos
00:26:53
y la entendemos, mientras se dé esta condición
00:26:55
haz lo que sea, vuelves, se sigue dando, vuelves
00:26:58
pues hay esta sintaxis
00:27:00
que esta sintaxis, ¿cómo funciona?
00:27:01
el programa llega por aquí
00:27:03
ejecuta una primera vez
00:27:04
lo que hay aquí, y esa primera vez es
00:27:07
incondicional, ni mira condición
00:27:09
ni mira nada, lo ejecuta una primera vez
00:27:12
y ahora ya
00:27:14
las siguientes veces
00:27:15
las va a ejecutar
00:27:17
dependiendo de si la condición es cierta o no
00:27:20
luego lo ejecuto una primera vez
00:27:22
esa siempre
00:27:24
y ahora, la condición es cierta
00:27:26
voy a por la segunda
00:27:28
y vuelvo a mirar, la condición es cierta
00:27:30
voy a por la tercera y vuelvo a mirar
00:27:32
la condición es cierta, voy a por la cuarta
00:27:34
así hasta que se haga falsa
00:27:37
que entonces ya
00:27:38
no hacemos nada más
00:27:40
luego, este bucle de arriba
00:27:41
y este bucle de abajo
00:27:48
son iguales
00:27:50
con la diferencia
00:27:52
de que este bucle de arriba
00:27:54
hay una primera vez que esto lo hace
00:27:56
antes de mirar la condición
00:27:59
luego
00:28:00
si
00:28:02
nosotros tenemos
00:28:06
cualquier código con while
00:28:12
así, while condición
00:28:13
y aquí tenemos
00:28:16
la sentencia que sea
00:28:18
pues esto es exactamente
00:28:20
igual
00:28:24
es exactamente igual
00:28:24
que
00:28:26
perdón, si yo tengo
00:28:27
aquí quería poner un do while
00:28:30
vale, si yo tengo un bucle así
00:28:32
do
00:28:41
aquí las sentencias que sean
00:28:42
while la condición
00:28:45
que sea terminado con punto y coma
00:28:52
que hay que poner un punto y coma al final
00:28:54
porque las sentencias siempre acaban en punto y coma
00:28:55
pues esa también, acaba en punto y coma
00:28:58
vale, pues si yo tengo ese código
00:28:59
ese código
00:29:03
fijaos que es lo mismo que si yo escribiera
00:29:04
esto
00:29:06
la sentencia que sea
00:29:07
y ahora el bucle while
00:29:10
con la condición
00:29:12
y aquí la sentencia otra vez
00:29:17
pues el código de la izquierda
00:29:18
y el código de la derecha
00:29:26
son intercambiables
00:29:27
perfectamente intercambiables, hacen lo mismo
00:29:28
este que hace, ejecuta la sentencia
00:29:31
y a partir de ahí
00:29:34
se da la condición, la vuelve a ejecutar
00:29:35
se da la condición, la vuelve a ejecutar
00:29:37
se da la condición, no, se acabó
00:29:39
que es justo lo que hace éste ejecuta la sentencia y a partir de ahí se da la condición si lo vuelvo
00:29:41
a ejecutar se da así lo vuelvo a ejecutar se da no termino luego el código de la izquierda y el
00:29:47
de la derecha son intercambiables entonces en situaciones en las cuales lo que yo hago dentro
00:29:53
quiero que se haga una primera vez sí o sí incondicional podría poner esto pero queda
00:30:02
más bonito y más compacto si lo pongo así.
00:30:10
Lo pongo de esta manera, estoy
00:30:14
haciendo exactamente lo mismo, pero queda
00:30:16
más bonito. En lugar de sacar esto fuera
00:30:18
una vez, que se
00:30:20
correspondería, en el ejemplo de nuestro programa,
00:30:22
a la primera lectura, hacerla fuera una primera
00:30:24
vez, pues en lugar
00:30:26
de sacar esto fuera para que se haga una
00:30:28
primera vez sí o sí,
00:30:30
pues lo cambio a un do-while y ya está.
00:30:32
Y tengo exactamente lo mismo. Son dos códigos
00:30:34
idénticos.
00:30:36
¿Vale?
00:30:38
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í.
00:30:42
Ahora, esto de aquí
00:31:19
Contarlo
00:31:24
Si es negativo, como siempre
00:31:26
Y ahora
00:31:28
Mientras que
00:31:29
Mientras número
00:31:32
Sea diferente
00:31:34
De cero
00:31:39
¿Vale?
00:31:40
Pues entonces, este programa
00:31:44
¿Qué es lo que hace?
00:31:48
Lee el primero, sí o sí
00:31:50
Si es negativo
00:31:52
Lo cuento
00:31:54
Es cero
00:31:55
no, no es cero, pues arriba
00:31:58
vale, pues que gano
00:32:00
de hacer este código respecto a hacer el de arriba
00:32:04
voy a comentar este
00:32:08
para quitar este como si no existiera
00:32:09
lo que gano
00:32:12
es que ahora no necesito hacer la trampa
00:32:13
de inicializar esta variable
00:32:16
ya no lo necesito
00:32:17
yo la dejo ahí sin inicializar
00:32:19
¿por qué?
00:32:21
porque hay una primera vez en la que ya entro
00:32:23
sí o sí
00:32:25
y en esta primera vez en la que entro sí o sí
00:32:26
número ya coge su primer valor
00:32:29
ya coge aquí su primer valor
00:32:32
luego
00:32:35
en este ejemplo que estaba viendo
00:32:37
que gano, repito
00:32:39
respecto a la versión anterior, que gano
00:32:41
pues no tener que hacer esta inicialización
00:32:43
¿vale? no tener que hacerla
00:32:46
y que el programa
00:32:48
a la vista, a los ojos
00:32:49
representa más
00:32:51
lo que está haciendo, que es yo rápidamente
00:32:53
al ver un do while rápidamente veo
00:32:55
que hay una vez que se va a hacer sí o sí.
00:32:57
Entonces entiendo mejor lo que está pasando, ¿vale?
00:33:01
Bueno, pues entonces ya tenemos dos sintaxis para un bucle,
00:33:15
while y do while, ¿vale?
00:33:19
Ya tenemos dos.
00:33:22
¿Y cuál elegimos?
00:33:25
Pues la que mejor se adapte a la situación.
00:33:27
Criterio de elección, ya sabemos,
00:33:29
si lo que se repite al menos la primera vez
00:33:32
tiene que hacerse sí o sí incondicionalmente
00:33:36
porque identifico que esa es la situación
00:33:38
se tiene que hacer sí o sí una primera vez
00:33:40
pues hago esto
00:33:42
¿vale? hago esto
00:33:44
y me ahorro hacer un while
00:33:45
en el cual tengo que sacar la primera lectura
00:33:48
afuera o hacer la trampa
00:33:50
de inicializarlo a un valor para que
00:33:52
esta condición sea cierta la primera
00:33:54
vez sí o sí
00:33:56
me ahorro trabajo y dejo el programa más en consonancia
00:33:57
con lo que tiene que hacer
00:34:00
con lo que hace
00:34:01
¿está claro?
00:34:03
Bueno, vale, pues entonces, a partir de este, ahora ya empiezan ejercicios, unos cuantos ejercicios distintos, con otra idea.
00:34:06
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.
00:34:23
Bueno, aquí ya no me están hablando de contar, me están hablando de otras situaciones normalmente asociadas a bucles.
00:34:35
por ejemplo me están hablando de sumar
00:34:41
no de contar
00:34:44
vale, en estos primeros
00:34:45
me están hablando de sumar, de hacer medias
00:34:47
etcétera, vale
00:34:50
hasta aquí
00:34:51
aquí ya me empiezan a hablar de otra cosa
00:34:52
bueno, pues vamos a parar aquí
00:34:55
un momento
00:34:57
y ahora ya vemos como haríamos eso
00:34:58
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado básico
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado medio
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado superior
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado básico
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 25 de octubre de 2026 - 19:14
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 35′ 02″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 137.74 MBytes