Saltar navegación

20260311 Exception_5 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 17 de marzo de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Venga, pues vamos a hacerlo 00:00:00
Y ya nos quitamos esto de en medio 00:00:03
Vale 00:00:07
Venga, a ver si sacamos algo interesante 00:00:07
Bueno, clase alumno 00:00:10
Pues ala, alumno es con lo que vamos a trabajar 00:00:13
Paquete nuestro 00:00:15
Con el modelo 00:00:17
Pues venga 00:00:18
El modelo solamente tiene 00:00:19
Una entidad, alumno, pues alumno 00:00:26
Las propiedades serán 00:00:28
Nombre y 00:00:39
año de nacimiento, ¿verdad? 00:00:40
pues ya está 00:00:45
nacimiento, ala, ya está 00:00:46
¿vale? 00:01:02
ahora lo de siempre, get, set 00:01:07
¿vale? nosotros hacemos de corrido 00:01:09
siempre un montón de cosas, los get y los set 00:01:12
porque realmente los get y los set 00:01:14
son el estándar 00:01:16
es la forma que nosotros 00:01:17
publicamos 00:01:19
dicho en palabras 00:01:21
más técnicas, exponemos 00:01:23
nuestra entidad 00:01:25
vale, exponer en este contexto 00:01:26
nuestro de desarrollo, significa 00:01:29
que es lo que hacemos visible 00:01:31
al exterior, pues estamos 00:01:33
exponiendo nuestras propiedades con 00:01:35
los getter y los setter, vale 00:01:37
lo hacemos de corrido y ya está 00:01:39
lo ponemos ahí y se acabó 00:01:40
luego esto admite 00:01:43
esto lo menciono 00:01:45
simplemente pues para que se nos vaya 00:01:48
quedando como ahí en el, yo que sé, como rondando 00:01:49
vale, porque luego de repente 00:01:52
van apareciendo las cosas 00:01:53
en segundos sí que nos encontraremos ya 00:01:55
al tener proyectos más complejos 00:01:58
pues con la opción de hacer las cosas de otra manera 00:02:00
entonces veis 00:02:02
que generar los get y los setters 00:02:04
desde el entorno 00:02:06
afortunadamente fácil 00:02:07
pero no deja de ser un chorizo de métodos 00:02:10
que están ahí puestos, ¿vale? 00:02:12
pues entonces hay cosas como 00:02:14
long box, records 00:02:16
cosas 00:02:18
que te permiten trabajar con ellos 00:02:19
como si estuvieran ahí aunque no estén 00:02:22
¿Vale? Entonces vosotros 00:02:24
A lo mejor le pedís cosas a CharGPT 00:02:26
Y os saca clases que no tienen 00:02:28
Getter y Setter, pero luego sí que se están llamando 00:02:30
Desde fuera, ¿esto qué pasa? 00:02:32
Bueno, pues que sepáis que existen Lombok, existen 00:02:34
Record, existen cosas que 00:02:36
Hacen que esos Getter y Setter estén 00:02:37
Aunque no los veamos 00:02:40
Bueno, solamente por 00:02:41
Mencionarlo 00:02:44
Vale, pero no estamos en ello 00:02:45
Nosotros, ni es algo 00:02:48
Tampoco especialmente común 00:02:52
lo generamos 00:02:53
y se acabó, este es mi alumno 00:02:56
vale, pues este alumno 00:02:58
en lugar de 00:03:00
esta aplicación 00:03:02
en lugar de 00:03:04
ofrecer, crear los alumnos con 00:03:06
constructor 00:03:08
ofrece un método, crear alumno 00:03:08
no ofrece un constructor para ello 00:03:12
vale, entonces 00:03:14
eso, que parece una tontería 00:03:16
pero tiene mucho sentido 00:03:18
normalmente los frameworks que hacen cosas 00:03:19
ya está como bastante 00:03:22
abandonado instanciar 00:03:24
los objetos con el constructor directamente 00:03:26
¿vale? es relativamente 00:03:28
habitual, tú te haces tu clase 00:03:30
y la forma en la 00:03:32
que ofreces a los demás instanciar 00:03:34
tus objetos no es directamente con 00:03:36
new, con el constructor, sino 00:03:38
ofreces tu método 00:03:40
en este caso, crear alumno 00:03:41
para crearlos, y en ese método pues 00:03:44
a lo mejor lo aprovechas para hacer validaciones 00:03:46
para hacer cosas, pues bueno 00:03:48
Ya que ha surgido con este ejercicio 00:03:50
Vamos a hacerlo así 00:03:51
¿Vale? Vamos a hacer que el usuario que quiera 00:03:52
Crear un alumno lo tenga que hacer obligatoriamente 00:03:56
Con este método 00:03:58
Dígame 00:03:59
00:04:02
Sí, sí, es un método más 00:04:05
No lo sé, pero lo vamos a quitar 00:04:08
¿Vale? 00:04:22
Ahora miramos el enunciado 00:04:24
Pero a ver si 00:04:26
Incluir el constructor correspondiente 00:04:27
Crear alumno 00:04:30
Venga, pues entonces 00:04:39
¿Qué haría este? 00:04:41
Pues efectivamente 00:04:43
Si el año pasado 00:04:44
Fuera negativo, devuelve objeto nulo 00:04:51
¿Vale? 00:04:53
Si nacimiento 00:04:57
Menor que cero 00:04:59
Return nul 00:05:03
Y en cualquier otro caso 00:05:06
Incluso cero 00:05:08
Pues devuelve al alumno 00:05:10
Pues entonces aquí lo podemos hacer 00:05:12
Aquí, ¿verdad? 00:05:15
New alumno 00:05:16
Y ahora, new alumno 00:05:17
Si yo quiero hacerlo así, tengo que 00:05:22
Efectivamente 00:05:24
Incluir aquí un constructor 00:05:25
Para poder llamarlo, o sea, si yo quiero 00:05:27
Pasarle estos parámetros 00:05:30
Yo por comodidad quiero hacer este crear alumno 00:05:31
Así, ¿verdad? 00:05:34
Nacimiento 00:05:39
vale, entonces si yo quiero aquí 00:05:39
devolver el objeto ya con estos parámetros 00:05:42
pues entonces me voy a hacer aquí mi constructor 00:05:47
vale, bueno, lo voy a generar directamente y ya está 00:05:51
vale, entonces ahora pregunto yo por preguntar 00:05:57
a ver, podría no haberme hecho este constructor 00:06:11
y entonces aquí tendría, me hago con el new alumno por defecto 00:06:15
le pongo las propiedades con el set 00:06:19
y luego ya lo devuelvo 00:06:22
pero 00:06:24
esto si a primera vista es una tontería 00:06:25
me he hecho crear alumno 00:06:27
para, con la idea de que 00:06:30
la gente que me use a mí y crea alumnos 00:06:32
lo haga con este método 00:06:34
pero para hacer este método 00:06:35
me he creado el constructor para poder 00:06:37
llamarlo desde aquí, pasándole los dos parámetros 00:06:40
y que fuera más cómodo, con lo cual 00:06:42
ya estoy aquí ofreciendo el constructor 00:06:44
¿vale? ¿qué puedo hacer? 00:06:45
¿Para ofrecer solo este método? 00:06:49
No, no voy a eso. 00:06:55
¿Qué puedo hacer para ofrecer solo este método 00:06:57
y no el constructor? 00:06:59
Hacerlo privado. 00:07:05
A esto me refería. 00:07:09
No sé si esta vez pensaba algo más retorcido. 00:07:10
Los constructores privados no son nada del otro mundo. 00:07:12
Los constructores privados 00:07:16
solamente los puedo usar yo 00:07:17
desde métodos propios de mi propia clase. 00:07:19
Entonces, de esta manera, 00:07:22
nadie me va a poder instanciar nunca con new. 00:07:23
Nunca jamás nadie me va a poder instanciar nunca con new. 00:07:26
porque el único constructor que hay 00:07:28
es privado 00:07:29
entonces desde fuera de esa clase 00:07:31
nadie me va a poder instanciar con new 00:07:34
que es algo que yo puedo querer 00:07:35
y muchas veces lo querré 00:07:37
que alguien quiere crear alumnos 00:07:38
tendrá que hacerlo con este método 00:07:40
crear alumno 00:07:42
que este sí que es public 00:07:44
y yo aquí ya hago lo que quiera 00:07:46
pues valido los datos 00:07:49
lo podría hacer el constructor 00:07:50
pero una arquitectura 00:07:51
relativamente habitual es esa 00:07:55
los constructores son privados 00:07:57
están de apoyo para métodos 00:07:59
que ya con el nombre créame alumno 00:08:01
son los que ya ofrezco yo 00:08:03
para hacer las cosas 00:08:05
esto en el fondo tiene un nombre 00:08:07
que es el patrón 00:08:11
factoría en realidad 00:08:13
es decir, hay una cosa 00:08:14
que se llaman patrones de diseño 00:08:16
que son formas de diseñar aplicaciones 00:08:18
formas de diseñar 00:08:21
¿cuántas formas de diseñar una aplicación hay? 00:08:22
200.000 millones 00:08:25
vale, pero algunas 00:08:26
siguen ciertas pautas, están estandarizadas 00:08:28
entonces esas formas 00:08:31
relativamente estandarizadas 00:08:33
de diseñar aplicaciones 00:08:35
son los patrones de diseño 00:08:36
hay un montón de patrones de diseño 00:08:38
patrón DAO, patrón Singleton 00:08:42
patrón no sé qué 00:08:43
cada uno se ocupa 00:08:44
de consejos 00:08:46
sobre cómo diseñar 00:08:48
partes concretas 00:08:51
la parte de la pesadilla 00:08:52
bueno, todo esto lo digo un poco 00:08:53
por cultura general 00:08:56
por ahora, ¿vale? 00:08:59
Bueno, pues aquí he diseñado siguiendo 00:09:00
sin saberlo en realidad 00:09:02
siguiendo un patrón de diseño muy común 00:09:04
¿vale? 00:09:06
que es un patrón que se ocupa de cómo 00:09:08
crear objetos, pues un patrón 00:09:10
de diseño te dice, oye 00:09:13
ofrece métodos propios 00:09:14
para crearlo, oculta 00:09:16
los constructores y usa los de apoyo 00:09:18
para dentro de esos métodos, claro 00:09:20
esto en realidad, esta tontería es un 00:09:22
patrón de diseño de los 00:09:24
Bueno, pues entonces 00:09:26
Son clases más antiguas 00:09:28
Bueno, y no siempre 00:09:36
Se siguen ciertos patrones de diseño 00:09:38
Según si conviene o no conviene 00:09:40
Bueno, a ver 00:09:42
El parámetro le llama al alumno en vez de nombre 00:09:54
Pero da igual 00:09:56
¿Qué más da? Mientras sea un estil 00:09:57
Y lo pases correctamente, a ver si te aclaras mejor 00:10:00
Llamándolo nombre, pero vamos que eso es lo de menos 00:10:02
No, es que arriba lo llamaste 00:10:04
No me lo estaba por eso 00:10:06
Claro, pero que da igual como lo llame yo, da lo mismo 00:10:07
Lo puedo llamar como quiera 00:10:10
Vale 00:10:12
Vale, pues entonces ya tenemos nuestro 00:10:15
Entidad alumno que no le queda 00:10:18
Más remedio que crearse así 00:10:20
Vale 00:10:21
Y ahora la clase principal 00:10:24
Pues crea alumnos 00:10:25
Venga 00:10:27
Pues vamos a hacer la clase main 00:10:30
En un paquete main 00:10:35
Aquí tenemos nuestra 00:10:36
Aplicación 00:10:45
De alumnos, vale 00:10:46
¿Qué va a hacer esta aplicación? 00:10:51
Rellenar 00:10:57
Un array, bueno 00:10:58
Más que un array 00:10:59
Vamos a hacer un mapa 00:11:00
Vamos a hacer un map, ¿no? 00:11:02
En lugar de meterlo en un array 00:11:04
Lo vamos a meter en un map y así tiene un poquito más de interés 00:11:05
Entonces 00:11:09
¿Cuántos alumnos? Pues unos cuantos 00:11:11
Vamos a pedirlo primero 00:11:14
Uy, no he puesto 00:11:17
Todo 00:11:19
¿Cómo? 00:11:20
Bueno, ¿cuántos va a haber en el mapa? 00:11:29
El mapa es una caja de alumnos 00:11:31
Tendría que decir cuántos quiero 00:11:32
Igual que si con una lista, una RAI 00:11:34
No entiendo la pregunta 00:11:36
O sea, map es la forma de guardarlos 00:11:38
¿Pero cuántos guarde? 00:11:40
Pues puedo guardar 20, 30 00:11:43
No sé 00:11:44
Claro, pero no tiene un límite, ¿no? 00:11:45
O sea, puede para lo que quiera. 00:11:47
Claro. 00:11:49
Ah, bueno, lo dices por el espacio a reservar. 00:11:50
Ah, no, por el for, por luego en el for, vale. 00:11:52
Para no hacerlo por condición de finalización, 00:11:59
cuando meta fin, que es más pesado. 00:12:01
Sí. 00:12:02
¿Cómo haces a crear alumnos 00:12:03
si no tienes un objeto para crear? 00:12:04
¿Cómo que no tienes un objeto para crear, no? 00:12:07
O sea, porque ahora has hecho stand-in, 00:12:08
necesitas un objeto para crear a ese método, ¿no? 00:12:10
Sí, tienes razón. 00:12:13
A ver, no sería un problema 00:12:14
Puedo yo crear un 00:12:16
Efectivamente, tienes toda la razón 00:12:17
Muy bien, muy bien visto, claro 00:12:20
Si no lo hago estático 00:12:22
Lógicamente es una tontería esto 00:12:23
Si no lo hago estático, solamente puedo llamarlo 00:12:25
Con un objeto alumno 00:12:28
Y es que no voy a poder crearlo 00:12:29
Porque no tengo ningún constructor visible 00:12:31
Entonces efectivamente es que este método 00:12:33
Su objetivo es ser estático 00:12:36
Claro, tienes razón, sí, sí, sí 00:12:37
Se me ha escapado el estático 00:12:40
hoy no estás dormido 00:12:41
mira que raro 00:12:44
pero vamos 00:12:48
venga, nuestros alumnos van a estar aquí 00:12:50
metidos 00:13:14
en este map 00:13:15
venga, vamos a 00:13:18
meterlo en new hash map 00:13:28
A ver, repito 00:13:31
Vamos a cambiar, en lugar de meterlos en un array 00:13:38
Vamos a meterlos en un map 00:13:41
Entonces para meterlos en un map 00:13:43
Cada alumno 00:13:44
Se corresponde con un par 00:13:46
La clave, lo que lo identifica de forma única 00:13:49
Y el valor 00:13:52
El valor está claro cuál va a ser 00:13:52
El propio objeto alumno 00:13:53
La clave cuál va a ser 00:13:55
Lo que lo identifique de forma única 00:13:57
El alumno sólo se caracteriza 00:13:59
según mi aplicación, que es una aplicación muy cutre 00:14:01
solo para ver excepciones 00:14:03
el alumno de él solamente tengo como datos 00:14:04
nombre y nacimiento 00:14:07
uno de los dos tendrá que funcionar de clave primaria 00:14:08
no tiene sentido que sea el nacimiento 00:14:12
lógicamente, pues el nombre 00:14:14
pues entonces la clave primaria de mi map 00:14:15
va a ser un stream 00:14:18
el nombre del alumno 00:14:19
y el valor es el alumno enterito 00:14:22
estos son 00:14:24
es imposible de coger ese stream 00:14:28
el nombre 00:14:31
Sí, pero tengo que tener ese dato 00:14:32
y como mi aplicación 00:14:36
dice el enunciado 00:14:38
alumnos con nombre y entonces 00:14:39
claro, se supone que este enunciado 00:14:42
me lo ha dado alguien que me ha dicho que haga eso 00:14:44
y él me ha dicho que tengo el nombre y el año de nacimiento 00:14:46
entonces yo son los datos que tengo 00:14:48
otra cosa es que yo vaya a hablar con él 00:14:50
y le diga, ¿es posible que esta aplicación 00:14:52
trabaje también con los NIF? 00:14:54
Ah, sí, sí, el alumno te va a meter el NIF, vale, pues yo ya cambio 00:14:55
mi diseño, luego la clave NIF 00:14:58
pero en este caso, pues lo tenemos 00:15:00
pues vamos a respetarlo 00:15:04
Venga, ¿cuántos alumnos tiene usted, señor? 00:15:05
Vale, ya que estamos 00:15:27
Vamos a validar la entrada 00:15:28
Vamos a validarla ya que estamos 00:15:30
Para 00:15:32
Que se nos quede en la cabeza lo del bloque try-catch 00:15:35
Nosotros ya sabemos que si él dijera 00:15:39
¿Cuántos alumnos tiene usted? 00:15:42
Tengo HJ, pues la aplicación se para ahí 00:15:43
Entonces vamos a validarlo 00:15:46
Para que meta un número seguro 00:15:48
Entonces vamos a 00:15:50
Intentar leer 00:16:07
Y vamos a capturar 00:16:09
La excepción 00:16:12
Input 00:16:13
Mismatch 00:16:16
Exception 00:16:18
Vale 00:16:20
Si entramos en la excepción 00:16:22
Vamos a avisar 00:16:24
De alguna manera 00:16:26
Con un boolean por ejemplo 00:16:27
Boolean 00:16:34
Valid 00:16:37
Igual a false 00:16:38
Y aquí válido igual a true 00:16:40
Eh, perdón 00:16:47
Válido while 00:16:51
Lo hago yo aquí 00:16:52
Para decidir cuando se sale del bucle 00:16:55
Válido igual a true 00:17:01
Mientras no válido 00:17:04
Entonces si salta excepción 00:17:08
Entonces le decimos que introduzca otro número 00:17:19
introduzca entero 00:17:28
sí, eso estaba revisando 00:17:35
porque si no nos va a pasar lo de siempre 00:17:44
si va aquí 00:17:45
y volvemos a pedir el next in 00:17:48
pues pasa otra vez lo de siempre 00:17:50
entonces eso 00:17:52
que ya vimos ayer el problema 00:17:53
lo habíamos arreglado así 00:17:56
¿verdad? 00:18:00
vale, a ver 00:18:11
este bucle me está validando 00:18:12
que lo que introduzca el tío 00:18:19
sea un número entero, ¿verdad? 00:18:21
Si lo hemos hecho bien, luego si no lo has probado, 00:18:23
lo comprobaremos. En principio, de ese bucle 00:18:25
no sale hasta que no llegue 00:18:27
aquí. Y solamente 00:18:29
va a llegar aquí si esta sentencia 00:18:31
se termina correctamente. 00:18:33
Luego, en principio, este bucle 00:18:36
solamente termina, este do while, 00:18:37
si se mete un número entero. 00:18:40
¿Vale? Si no se mete 00:18:42
un número entero, esto no se ejecuta. 00:18:43
Luego de aquí 00:18:46
entramos aquí, nos pide 00:18:46
otra vez para arriba 00:18:49
vale 00:18:50
pero vamos, si quisiéramos validar 00:18:51
no solo entero, sino entero positivo 00:18:54
¿cuántos alumnos quiere usted? 00:18:56
y me dice menos 12, el menos 2 tampoco me gusta 00:18:59
quiero que sea 00:19:01
mayor que 1 00:19:02
esto estoy improvisando sobre la marcha 00:19:03
¿cómo podríamos incorporar aquí 00:19:06
que la validación fuera entero 00:19:08
y además positivo? hay que incluir algo más 00:19:10
porque la excepción solo valida que sea 00:19:13
entero 00:19:15
a ver, el tema es que 00:19:16
si me mete un negativo 00:19:25
bueno, o que este 00:19:27
válido solo se ponga true 00:19:39
ya está un if y se acabó 00:19:40
bueno, no hace falta un bucle 00:19:42
sino simplemente 00:19:46
que solamente lo ponga 00:19:47
true si es positivo 00:19:51
porque si no, va a volver arriba 00:19:52
otra vez, no hace falta meter otro bucle ahí 00:19:55
pero de un if 00:19:56
sin más 00:20:02
eso, eso, sí, sí, vale 00:20:03
te he entendido hacer aquí otro bucle dentro 00:20:05
vale, vale 00:20:08
exacto 00:20:09
también, ¿no? 00:20:11
mientras no válido 00:20:20
ya, pero no, pero no, pero es que 00:20:21
si no cambias eso, el válido ya se ha puesto 00:20:23
Bueno, no, claro 00:20:25
Si ponemos no válido 00:20:27
Mientras IN 00:20:29
Diferente de IN menor 00:20:31
Entonces, aunque válido 00:20:33
Lo hayas puesto ya true 00:20:36
Va a volver arriba otra vez, ¿verdad? 00:20:37
También 00:20:43
Podríamos hacer otra y capturar las dos 00:20:44
Esta y número negativo 00:20:48
Número de alumnos negativo 00:20:50
También, sería otra posibilidad 00:20:52
hacer una excepción, número de alumnos negativo 00:20:53
entonces 00:20:56
si hiciéramos 00:20:57
a ver, cualquiera de las 00:21:00
vamos a recopilar las dos primeras 00:21:01
y luego la de la excepción 00:21:03
entonces una, la primera que habéis dicho 00:21:05
sería 00:21:08
que solo ponga el válido a true 00:21:10
n es mayor que 0 00:21:14
¿verdad? 00:21:16
También, efectivamente 00:21:25
Else, pones aquí 00:21:26
Otra vez, introduzca entero 00:21:28
Entonces 00:21:31
Y dentro del 00:21:36
Y luego además 00:21:38
Y luego además habría que hacer el scan next line 00:21:39
También aquí en el else, ¿verdad? 00:21:43
Es decir, como va a volver arriba otra vez 00:21:51
Aquí habría que hacer 00:21:53
También el scan next line 00:21:55
¿Verdad? 00:21:57
Vale, esta creemos que 00:22:01
Funcionaría 00:22:02
creemos que sí 00:22:03
que validaría si el número es 00:22:07
entero positivo 00:22:09
perdón, no te oigo 00:22:11
bueno, por lo mismo que lo hemos metido 00:22:16
aquí, porque al volver a hacer 00:22:19
el next y se nos quedaba encajado 00:22:21
y aquí va a pasar lo mismo 00:22:22
yo entiendo que 00:22:25
si no lo haces 00:22:27
es que yo tampoco me lo esperaba 00:22:27
leer varios números seguidos 00:22:34
la situación conflictiva es cuando 00:22:36
lees una cadena 00:22:39
después del número 00:22:41
esa es la que hemos identificado 00:22:42
y aquí estás leyendo dos nextkin 00:22:45
entonces yo no sé por qué antes se nos 00:22:46
ha quedado, vamos a probar esto 00:22:49
a ver, el tema es que 00:22:51
cuando sale 00:23:01
claro, pero aquí la diferencia es que puede que 00:23:04
aquí no haga falta, la diferencia 00:23:07
es que cuando llegamos 00:23:09
aquí, este no se ha llegado 00:23:12
a completar y no sabemos 00:23:14
en qué estado ha dejado el buffer 00:23:15
y cuando llegamos aquí 00:23:17
por este lado, este sí se ha llegado 00:23:20
a completar, con lo cual sí que tenemos la seguridad 00:23:22
de que el buffer lo habrá dejado limpio 00:23:24
entonces yo creo que no va a hacer 00:23:25
falta este, pero este 00:23:27
sí hace falta porque llegamos 00:23:30
a este punto no habiendo completado 00:23:31
el next in, sino habiendo salido 00:23:33
por la mitad y no sabemos 00:23:36
en qué estado se ha quedado el buffer en ese momento 00:23:37
¿vale? entonces vamos a 00:23:39
probarlo así sin el 00:23:42
next line, que yo creo que vamos a ver 00:23:43
si así validaría esto 00:23:45
sí que funciona, ¿verdad? 00:23:47
¿no hace falta ni probarlo? ¿ya está? 00:23:49
uy, qué rapidez, ¿este mismo idéntico clavado? 00:23:51
vale, pues entonces nuestra intuición 00:23:54
es correcta, aquí realmente no hace falta 00:23:55
hacer varias lecturas de números seguidos 00:23:57
no deja nada en el buffer 00:23:59
pero claro, cuando tú vas 00:24:01
por el catch, no has 00:24:03
completado la lectura del número 00:24:05
te has ido a medias 00:24:06
entonces hemos comprobado 00:24:08
empíricamente que hace falta 00:24:11
¿por qué? es que no tenemos los detalles 00:24:12
de en qué momento ha saltado la excepción realmente 00:24:15
claro 00:24:17
pues es que habría que ver 00:24:20
habría que buscar aquí en el throw 00:24:22
efectivamente cuando hace el throw 00:24:24
en qué estado se ha quedado aquí el buffer 00:24:26
pero bueno, es más fácil funcionar 00:24:27
por prueba y error y ya está 00:24:31
Vale, bueno pues entonces 00:24:33
Este ya efectivamente no hace falta 00:24:35
Como podemos intuir 00:24:38
Esta validación funciona 00:24:39
¿Qué otro método de validación 00:24:41
Habíais planteado? 00:24:44
El de cambiar la condición 00:24:46
Es que sí, que sí 00:24:48
Que estamos, a ver 00:24:58
Espera un momento 00:24:59
Ya, pero es que 00:25:02
Me estreso 00:25:05
paz, por favor 00:25:07
vamos por partes 00:25:12
vale, entonces 00:25:13
siguiente opción 00:25:15
que habíais planteado 00:25:17
vamos ahora a ella 00:25:20
esta era la opción original, verdad 00:25:21
la de que solo valida 00:25:24
que sea un número entero 00:25:26
vale, pues tú sigue aquí en el bucle 00:25:27
mientras no válido 00:25:29
mientras no válido 00:25:32
y o 00:25:34
mientras no sea válido 00:25:34
o sea negativo 00:25:53
el número sea 00:25:56
menor que cero 00:25:58
vale, entonces 00:25:59
esto 00:26:01
lo primero que implica es que 00:26:02
n se quede inicializado a algo, a cualquier 00:26:06
número, vale 00:26:07
entonces 00:26:09
pues a cualquiera 00:26:11
a menos uno, no os da igual 00:26:13
vale, entonces ahora, esto funcionaría 00:26:15
pregunto, vamos a ver 00:26:17
la secretaria que lo prueba todo rápido 00:26:19
eso funcionaría, la secretaria por favor 00:26:21
vale 00:26:23
vamos a verlo 00:26:25
vamos a suponer 00:26:28
que si mete uno 00:26:30
no válido, está claro 00:26:31
que el válido no cambia, con lo cual 00:26:33
esta condición ya directamente 00:26:36
sería true 00:26:38
con lo cual sigue, eso está claro 00:26:40
vale 00:26:42
ahora, ha metido uno válido 00:26:43
con lo cual válido ha cambiado, entonces esta ya sería 00:26:46
falso, miraría la siguiente 00:26:48
como n es negativo 00:26:50
esta se convierte en true 00:26:52
con lo cual vuelve arriba 00:26:54
que es lo único que le haría salir, las dos 00:26:55
falsas, que es 00:26:58
que 00:26:59
el número haya sido entero, es decir 00:27:00
que válido es igual a true, que eso se ha completado 00:27:04
y que además 00:27:06
el número sea mayor o igual que 0 00:27:08
esto es lo único que le haría salir, las dos falsas 00:27:09
¿verdad? con lo cual esto 00:27:12
en principio funcionaría 00:27:13
¿verdad? 00:27:16
¿lo has probado? 00:27:18
vamos a probarlo porque hay veces que las 00:27:19
intuiciones de uno, uno ve los códigos 00:27:21
y dice uy que bien y luego de repente 00:27:23
lo prueba y dice uy no me he dado cuenta de esta 00:27:25
tontería 00:27:27
bueno a ver, salta si lo pongo 00:27:28
aquí, claro 00:27:35
Si n menor que 0 00:27:37
Entonces 00:27:39
Introduzca entero 00:27:40
Si lo pongo aquí, sí 00:27:45
No, ahorrar 00:27:46
No, no, es que el try catch no lo puedes ahorrar 00:27:52
Porque es que 00:27:54
A ver 00:27:55
O sea, el try catch no lo puedes quitar 00:28:00
Porque si el tío te mete jj 00:28:02
Va a parar el programa 00:28:04
El try catch no lo puedes quitar 00:28:05
El tema es añadir alguna validación extra 00:28:07
Entonces, a ver un momentito 00:28:11
Vamos a ver si funciona 00:28:13
Y si está ahí 00:28:14
Me pongo a un fin 00:28:16
Para que me entere yo de bien 00:28:19
De cuando ha salido 00:28:21
Vamos a probar 00:28:22
¿Cuántos alumnos queremos? 00:28:24
Le pongo esto 00:28:34
Introduzca entero 00:28:35
Vale, esta está clara 00:28:36
Le pongo menos cuatro 00:28:37
Introduzca entero 00:28:39
Vale, parece que sí, ¿no? 00:28:41
Y ahora ya le pongo 98 alumnos, fin 00:28:46
Vale 00:28:49
Bueno, pues eso también nos gusta 00:28:50
Y ahora 00:28:52
Vamos a hacer una excepción 00:28:55
¿Vale? 00:29:01
Se quedan las dos comentadas 00:29:03
Nuestro bucle original era este 00:29:05
Que vamos a darle la otra opción 00:29:08
Vale, pues volvemos al bucle original 00:29:12
que era este, que este es el que valida 00:29:41
solo que el número 00:29:43
no sea entero, ¿verdad? 00:29:45
si no es entero te vienes por aquí 00:29:47
y ya hemos visto que hay que poner el netline 00:29:49
porque como te vas a medias pues ha quedado roto 00:29:51
vale, bueno 00:29:53
ahora 00:29:54
vamos a validar también que el número no sea negativo 00:29:58
haciendo que lance 00:30:01
una excepción 00:30:03
pero 00:30:05
a ver 00:30:07
eso no sería tan sencillo porque 00:30:09
es que quedaría muy 00:30:11
tendríamos que meter esto 00:30:15
en un método aparte y que ese método 00:30:22
lance la excepción 00:30:24
si el número es negativo 00:30:27
entonces 00:30:29
vamos a ponerlo aquí 00:30:30
opción lanzando dos excepciones 00:30:32
vale 00:30:44
pues entonces 00:30:46
vamos a hacer un método auxiliar 00:30:48
que lea el número y ahora ese método 00:30:49
que lance las dos posibilidades 00:30:51
No eres número o eres número negativo 00:30:54
¿Vale? No nos queda más remedio 00:30:56
Tenemos que hacerlo así 00:30:58
Pues venga, vamos a hacernos aquí 00:30:59
Un método 00:31:01
Sí, sí, sí, claro 00:31:04
Porque es otro método aparte 00:31:14
Leer número 00:31:15
Vale, entonces este leer número 00:31:17
Me hace esto de aquí 00:31:21
Int n igual a 00:31:23
Esto 00:31:26
Y aquí me pongo yo un escáner local 00:31:27
Para no 00:31:38
guiar las cosas 00:31:40
vale, y ahora ya sí 00:31:42
si n 00:31:53
es menor que 0 00:31:55
entonces lanza 00:31:56
una excepción 00:31:59
vale 00:32:00
si n es menor que 0, lanza una excepción 00:32:02
que esa excepción 00:32:05
pues puede ser new 00:32:09
número 00:32:10
alumnos 00:32:13
negativo 00:32:14
excepción 00:32:19
y si no, return n. 00:32:22
Vale, pues este método 00:32:34
nuestro puede lanzar 00:32:35
dos excepciones. 00:32:37
La de input mismatch, 00:32:39
si el número es cadena. 00:32:42
O la de número 00:32:44
alumnos negativo excepción. Puede lanzar 00:32:45
dos. Entonces, cuando lo llamemos 00:32:47
arriba, haremos los dos catch. 00:32:49
¿Vale? 00:32:52
Pero claro, tenemos que completarlo. 00:32:53
Esta clase hay que 00:32:56
crearla. 00:32:57
entonces para no emborronar 00:32:57
y seguir aprendiendo cosas 00:33:00
nosotros hasta ahora todas las clases 00:33:02
las hemos declarado 00:33:04
cada una un código aparte 00:33:05
un fichero aparte 00:33:08
cada clase va por separado 00:33:09
y está fuera de las otras 00:33:12
no hace falta en realidad que estén en ficheros aparte 00:33:13
eso es lo de menos 00:33:16
yo en un fichero puedo tener clase, una clase entera 00:33:17
debajo de ella clase, otra clase entera 00:33:19
eso siempre lo podemos hacer 00:33:21
pero luego cuando se precompilan 00:33:23
ya son punto clase distinto 00:33:25
pero 00:33:27
por comodidad 00:33:29
se puede hacer una cosa que es 00:33:31
declarar una clase dentro de la otra 00:33:34
¿vale? 00:33:36
por ejemplo, en esta situación 00:33:38
me gusta y me interesa 00:33:40
esa idea, es decir 00:33:42
esta excepción yo me la he inventado 00:33:44
aquí solamente para poder 00:33:46
hacer la validación de forma bonita 00:33:48
con dos try-catch, con dos catch 00:33:50
¿vale? me la he inventado 00:33:52
para poder hacer una validación 00:33:53
Más bonita que estas de arriba 00:33:55
Que me he ofrecido aquí 00:33:57
Para hacer un try con dos cats 00:33:59
¿Vale? Para esto me he inventado esa excepción 00:34:01
Para poder hacer un try con dos cats 00:34:04
En este fichero 00:34:05
Pero esta excepción no va más allá de eso 00:34:06
No la van a usar otras clases por ahí 00:34:09
Ni la va a usar nadie 00:34:11
Entonces, meter otra clase más 00:34:12
En mi aplicación 00:34:15
Pequeñita 00:34:16
Que solamente va a ser usada desde aquí 00:34:18
Y solo desde aquí 00:34:21
Pues hombre, quizás emboronar un poco la aplicación 00:34:22
entonces yo siempre puedo hacer una cosa 00:34:25
que es declarar una clase dentro de la otra 00:34:27
eso es una clase interna 00:34:30
clase anónima es su siguiente paso 00:34:32
es una clase interna 00:34:35
que ni siquiera tiene nombre 00:34:37
es todavía más 00:34:39
más 00:34:39
como se dice cuando vas 00:34:42
se me van las palabras 00:34:44
no, no, no 00:34:47
no tiene que ver con programación 00:34:49
como es la palabra cuando vas quitándole a alguien 00:34:51
destitulado, no es destituida 00:34:53
más todavía destituida que la otra 00:34:56
no me gusta esa palabra 00:34:57
vale, de la clase anónima 00:34:59
por ahora, olvídate, si es 00:35:02
una clase anónima, es una interna 00:35:03
pero además sin nombre, está todavía, es que me sale 00:35:05
descatalogada, no, bueno, da igual 00:35:07
vale, pues a ver 00:35:10
uno puede declarar una clase dentro de la otra 00:35:11
si quiere, entonces 00:35:14
esta es mi clase 00:35:15
bueno, vamos a parar y lo hacemos 00:35:17
luego, vale 00:35:19
que esto no es corto 00:35:20
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
1
Fecha:
17 de marzo de 2026 - 12:19
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
35′ 26″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
142.14 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid