Clase 12-04-24 - 3 - 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 entonces, si uno arranca con el primer método, datos, pues nada, ese es el más sencillo, insertar alumno, insertar alumno es insertar en el map, entonces nos situamos para insertar un par en un map, pues el método put, pues ya está, alumnos put, ¿qué necesitamos?
00:00:00
la clave que es el
00:00:19
nif y el objeto alumno
00:00:21
pues nada, instanciamos el objeto
00:00:23
alumno y ya está, instanciamos
00:00:25
el objeto alumno con la clave
00:00:27
y sería esto, en este caso
00:00:29
sin verificar nada más
00:00:31
este método no verifica nada
00:00:33
yo aquí como la excepción además
00:00:35
la había dejado antes como
00:00:37
runtime exception
00:00:39
aquí no me sale ningún error de compilación
00:00:40
si esta excepción
00:00:43
fuera así
00:00:45
si esta excepción fuera así
00:00:46
automáticamente este método
00:00:49
me diría, uy, cuidado que al meter
00:00:51
un nuevo alumno en el map
00:00:53
puede que te salga
00:00:55
la excepción de que el año es negativo
00:00:57
cuidado, entonces pues aquí
00:00:59
haría un try catch
00:01:01
si quiero
00:01:03
hago el throw, lo que sea, lo que me pidan
00:01:07
lo que me pidan
00:01:09
pero vamos, lo que importa es
00:01:10
entender que como este método generaba
00:01:13
una excepción, si es de tipo
00:01:15
exception, aquí me veo en la obligación
00:01:17
de decidir qué hacer con ella
00:01:19
decidir si hay excepción, si quiero que
00:01:21
la propague al de arriba o la capturo
00:01:23
y en ese caso
00:01:25
pues aviso
00:01:26
no se ha podido, muestro
00:01:31
un mensaje por consola, no se ha podido meter en el
00:01:33
map, para que el usuario que llama al
00:01:35
método pues lo sepa, lo que sea
00:01:37
pero bueno, para no tener que arrastrar
00:01:39
ese error, le voy a poner el run time
00:01:41
este, y así ya
00:01:43
Pues nada, insertar sería esto
00:01:47
Nada más
00:01:49
Inserto la clave y el objeto
00:01:50
Y ya está
00:01:52
¿Vale?
00:01:54
Es que luego que me han metido un número negativo
00:01:57
Va a ser una excepción en tiempo de ejecución
00:01:59
Va a ser una excepción en tiempo de ejecución
00:02:01
Bueno, pues entonces
00:02:02
Añadir nota
00:02:05
Bueno, pues añadir nota tenemos que
00:02:06
La ventaja del map es que ahora es
00:02:08
Facilísimo operar
00:02:11
Si en lugar de estar los alumnos en un map
00:02:12
Estuvieran en un set
00:02:15
de alumnos y dentro del objeto alumno
00:02:17
tuviéramos el nif
00:02:20
pues entonces tendríamos que de esa colección
00:02:21
sacar el objeto
00:02:24
correspondiente iterando por ella
00:02:26
etcétera, pero es que aquí no hace falta
00:02:28
porque ya tenemos el método get que yo cojo
00:02:30
el map, le digo sácame
00:02:32
el objeto con esta clave
00:02:34
sácame el objeto con esta
00:02:36
clave, muy bien, ya tenemos el objeto con esa
00:02:38
clave, es mucho más sencillo que
00:02:40
encontrar en una colección
00:02:41
un objeto cuya propiedad es tal
00:02:43
es mucho más fácil
00:02:46
bueno, pues el alumno con ese nif
00:02:47
saca sus notas
00:02:50
y a su nota añade la nueva
00:02:52
y ya está
00:02:54
aquí lo único es que claro
00:02:55
que estas notas
00:02:57
si el alumno está recién creado
00:02:59
y su colección es null
00:03:02
me va a dar null pointer exception
00:03:04
pero claro, eso me di cuenta
00:03:06
la primera vez que lo pruebo
00:03:07
y decimos, ah, cuidado, espera, espérate
00:03:08
en la propiedad notas de alumno
00:03:10
vamos a inicializarla
00:03:13
con una colección vacía, pero no nula, vacía,
00:03:15
para que el alumno recién creado no tenga notas,
00:03:19
pero al menos la colección no sea vacía.
00:03:21
Y así ya nos ahorramos que cuando yo haga el getNotas,
00:03:24
esto ya nunca va a ser nul.
00:03:28
Puede ser una colección vacía, pero nunca nul.
00:03:29
Entonces, ¿que yo le meto la primera de las notas?
00:03:32
Pues ya está, la primera.
00:03:35
¿Que no es la primera, sino que es la siguiente?
00:03:36
Pues la siguiente. Esto va a funcionar siempre.
00:03:38
De nuevo, este método hay una cosa que no está verificando.
00:03:42
que no existe un alumno con este nif
00:03:45
porque si no existe
00:03:47
alumno con ese nif, el get nif
00:03:49
me va a dar null
00:03:51
y entonces aquí me saldría un null pointer exception
00:03:52
entonces este método
00:03:55
podríamos hacer una verificación
00:03:57
que fuera, if alumnos
00:03:59
get nif es diferente de null
00:04:01
entonces ahora
00:04:03
ya sí, haz esto
00:04:05
y si no, pues no hagas nada
00:04:07
muestras un mensajito, el alumno con ese nif
00:04:09
no existe, con lo cual no le puedo añadir la nota
00:04:11
lo que sea
00:04:13
vale
00:04:14
pues entonces, si yo no quiero verificar nada
00:04:16
y simplemente, si el alumno no existe
00:04:21
null pointer exception y ya está
00:04:23
pues esta línea sería suficiente
00:04:25
pero si no quiero que salga
00:04:27
un null pointer exception, pues tendría que hacer
00:04:29
pues eso
00:04:31
¿no?
00:04:32
en ese método no habría notas
00:04:33
en la lista de notas
00:04:35
pero ¿para qué?
00:04:44
para hacer notas
00:04:47
pero ¿para qué le quieres pasar
00:04:49
lista de notas, es que le complicas
00:04:51
la vida al que te está llamando
00:04:53
porque entonces el que te está llamando antes de llamarte
00:04:55
a ti tiene que irse al map, sacar la lista
00:04:57
de notas del alumno, entonces para eso ya que
00:04:59
la tiene, la añade
00:05:01
él directamente
00:05:03
no tiene sentido hacer un método
00:05:04
para añadir notas a una lista
00:05:06
y a ese método le pasas tú la lista
00:05:08
es que entonces ya en el principal te haces
00:05:11
tu NAT en esa lista y ya está
00:05:13
entonces este método es útil si tú
00:05:15
dices, tengo este GIF y tengo esta
00:05:17
nota, añádemelo
00:05:19
y ya está, porque si tienes que pasar tú la lista
00:05:21
antes de llamarlo tienes que
00:05:24
buscarla, encontrarla, pues ya para eso
00:05:25
haces tu ELA
00:05:27
entonces le pasas NIF y nota
00:05:28
que es lo que tú piensas
00:05:32
lo que va a
00:05:34
necesitar pasar el que está sentado
00:05:35
en la secretaría
00:05:37
estos datos son los que tienes de secretaría
00:05:38
el de secretaría no tiene por qué tener
00:05:42
una lista, nada, el de secretaría dice
00:05:43
yo quiero un NIF y una nota nueva
00:05:45
esto es lo que te doy
00:05:48
Esto es lo que te doy.
00:05:49
Tú ya haces dentro lo que quieras.
00:05:50
Pero si me pides que yo te dé la lista de notas
00:05:52
que ya tiene, que no sé cuánto,
00:05:54
pues para eso ya lo hago yo.
00:05:56
Vale, pues le pasamos el NIF, la nota nueva
00:06:00
y él ya pues se busca la vida,
00:06:03
que es coge el alumno con ese NIF,
00:06:04
saca sus notas
00:06:07
y de esas notas añade la nueva.
00:06:08
¿Vale?
00:06:11
Entonces, repito,
00:06:13
esto en tiempo de ejecución
00:06:15
me podría salir null pointer exception
00:06:16
si no hay alumno con este NIF.
00:06:18
Podría salirme null pointer exception
00:06:20
Si yo no quiero que salga eso
00:06:22
Pues hombre, siempre puedo hacer esto
00:06:24
¿No? Si alumnos getNif
00:06:25
Resulta que es igual a null
00:06:31
Pues hombre, pues a lo mejor
00:06:34
Puedes avisar y hacer un retun
00:06:36
Entonces el de secretaría
00:06:38
Que estáis sentados usando ese método
00:06:47
Pues dice, ah, no existe ese alumno
00:06:49
En lugar de salirle un null pointer exception
00:06:51
Que es mucho más feo
00:06:53
No existe alumno y retun
00:06:54
Ala
00:06:57
si no hemos salido por el retune
00:06:58
hemos llegado aquí y entonces ya hacemos esto
00:07:02
bueno, pues ya está
00:07:04
con esto hemos añadido ya notas a un alumno
00:07:10
vale
00:07:12
¿nota media de quién?
00:07:13
del alumno con este NIF
00:07:16
lo mismo de antes
00:07:17
el de secretaría quiere un NIF
00:07:20
y que tú saques la nota media
00:07:22
no quiere además tener que pasarle las notas
00:07:24
hacerla, no, para eso hace la media
00:07:27
entonces le pasas un NIF y el ya
00:07:29
el método hace lo que tiene que hacer
00:07:30
vale, pues ¿qué tendrá que hacer?
00:07:32
Bueno, pues entonces, yo aquí lo he puesto compacto, pero vamos, el alumno con este NIF es este, gracias a que tenemos un map, es facilísimo sacar alumno con ese NIF, ya está, alumno es NIF, esa es la ventaja del map, tengo una clave, automáticamente tengo al objeto con esa clave, lo tengo,
00:07:34
no es como cuando tengo, repito
00:07:54
un set o un list que tengo que
00:07:57
iterar hasta que encuentro el que cumple
00:07:59
esa propiedad, no, tengo
00:08:01
ya, al map le doy la clave
00:08:03
y él me dice, este es el valor asociado a esa clave
00:08:05
vale, bueno
00:08:07
pues el valor
00:08:09
el alumno con esa clave tiene estas notas
00:08:12
tiene estas notas
00:08:15
luego estas son las, el listado de notas
00:08:17
el listado de notas es este
00:08:19
es el listado de notas
00:08:21
Pues yo itero y me hago la media, voy sumando las notas de ese listado, esta es la suma de todas las notas y ahora ya cuando tengo toda la suma la divido entre el total, entre el total de notas que será el tamaño de la colección y ya está.
00:08:23
aquí
00:08:41
más para acá
00:08:47
vale, aquí lo mismo
00:08:50
este método no está verificando
00:08:53
que el nif que me han pasado sea válido
00:08:54
si el nif que yo le paso
00:08:56
no es válido, paz
00:08:58
aquí automáticamente sale un null pointer exception
00:09:00
porque esto es null
00:09:03
y aquí llamamos a esto
00:09:04
entonces si el nif no es válido, paz, null pointer exception
00:09:06
se va para el programa
00:09:08
de nuevo yo podría aquí meter un nif
00:09:09
if alumnos.getNif igual a null
00:09:11
no hay nada que hacer, no hay nota media que sacar
00:09:14
retún cero, ya está
00:09:17
y si no, pues ya hago esto
00:09:18
¿y la nota media
00:09:21
del curso?
00:09:33
¿la nota media del curso?
00:09:36
bueno, pues yo aquí
00:09:38
lo que he hecho es
00:09:39
vale, voy a
00:09:40
ahora ya sí que tengo que iterar
00:09:47
porque necesito
00:09:49
todos los alumnos
00:09:51
cuyo curso es el que me han pedido
00:09:53
todos los alumnos
00:09:55
cuyo curso es el que me han pedido
00:09:57
pues en este caso, ¿cuál es la forma más cómoda de iterar?
00:09:58
vale, me hago yo
00:10:01
un conjunto con las claves
00:10:03
recordad que tenemos
00:10:05
este método
00:10:07
en triset
00:10:08
no, con las claves no, con todo
00:10:17
perdón que lo he dicho mal
00:10:18
aquí tenemos que iterar por el map
00:10:19
vale, pues entonces
00:10:22
para iterar por el map
00:10:24
me hago
00:10:26
este set
00:10:27
que es un set de objetos
00:10:29
que envuelven los pares
00:10:31
vale, pues ya está, me hago este set
00:10:32
y ahora itero por él
00:10:35
itero por él y ahora
00:10:36
para cada
00:10:39
objeto
00:10:41
si el curso
00:10:43
es el que me han dado
00:10:46
pues sumo
00:10:48
la nota media
00:10:50
del alumno con ese nif
00:10:52
vale, entonces a ver si entendéis esto
00:10:54
E es el objeto que envuelve
00:10:58
tanto la clave como el valor
00:11:01
E es el objeto que envuelve tanto la clave como el valor
00:11:04
entonces yo voy iterando por E
00:11:08
entonces, para cada par
00:11:09
que está metido en E, envuelto, para cada par
00:11:14
si el curso del alumno de ese par
00:11:16
porque el alumno lo saco del value, si el curso del alumno es igual al curso
00:11:19
que me han dado, pues ahora tengo que
00:11:22
lo que sumo a la media es la nota media
00:11:25
de ese alumno
00:11:28
entonces la nota media del alumno, ¿cómo la saco?
00:11:29
tengo el método nota media al que tengo que pasar un NIF
00:11:32
a nota media
00:11:34
le paso el NIF de ese alumno
00:11:36
¿vale? o sea, E
00:11:38
es el objeto
00:11:41
que tiene dentro envuelto
00:11:42
tanto el NIF que es la clave
00:11:45
como el alumno que es el valor
00:11:47
este es el NIF
00:11:48
y este es el alumno
00:11:50
tengo este método
00:11:52
que le paso el NIF y me devuelve la nota media
00:11:55
bueno, pues para ese alumno
00:11:57
si su curso es el que corresponde
00:11:59
saco su nota media
00:12:02
y la agrego a la suma total
00:12:04
la agrego a la suma total
00:12:05
¡ay! me falta aquí la división
00:12:07
¿vale? no he hecho la división
00:12:10
entonces he devuelto la suma de todas las notas medias
00:12:12
no he hecho la división
00:12:14
tengo que dividir aquí entre el total de elementos que he sumado
00:12:16
voy a tener que hacer un contador aquí para contar
00:12:19
los que
00:12:23
cada vez que incorporo un sumando nuevo
00:12:26
a la suma, le cuento
00:12:38
y ahora ya me falta esto, claro
00:12:40
vale, pues de nuevo, repito
00:12:44
con el método ese en triset de ahí
00:12:54
con este método
00:12:56
en triset
00:12:59
saco un conjunto
00:12:59
de objetos
00:13:02
que tienen dentro la clave y el valor
00:13:03
que yo saco con getKey y getValue
00:13:06
y ya las uso como me dé la gana
00:13:08
pues las estoy usando
00:13:09
para el alumno
00:13:12
cuyo curso es el que me han dado
00:13:14
este es su NIF
00:13:16
pues uso el NIF
00:13:19
para sacar su nota media
00:13:21
la agrego al sumatorio y le cuento
00:13:22
y luego ya devuelvo
00:13:25
esa suma
00:13:27
entre el total
00:13:30
y ya está
00:13:31
y luego bueno, para comprobar luego en el main que todo funcionaba
00:13:36
en las pruebas que he hecho y tal
00:13:41
pues uno podría incorporar un listal alumnos
00:13:42
y ya está, un listal alumnos
00:13:45
que otra vez estoy recorriendo
00:13:50
Otra vez estoy recorriendo
00:13:51
Listo los alumnos
00:13:53
Para cada alumno
00:13:55
Pues muestro su NIF
00:13:56
Y su nota media, por ejemplo
00:13:59
Bueno, pues nada
00:14:00
Ya subiré esto
00:14:05
Vale, en el aula virtual
00:14:07
Siguiente, ¿qué más tenemos?
00:14:09
Aquí donde ponen el tema
00:14:17
Cuatro colecciones
00:14:19
Enunciar, grito y repaso
00:14:21
Bueno, pues si descargáis eso
00:14:22
Que está ahí
00:14:24
Sí, bueno, incluso ahora mismo
00:14:25
Por ejemplo
00:14:30
¿qué podéis hacer rápidamente?
00:14:31
este sí que es el típico programa rápido
00:14:33
porque no es de gestionar
00:14:35
de alumnos, de no sé qué, que es pesado
00:14:37
un diccionario
00:14:39
un diccionario
00:14:41
yo me quiero llevar mi propio diccionario
00:14:42
pues me voy a hacer mi aplicación diccionario
00:14:45
yo le digo una palabra y me la da en inglés
00:14:46
los datos de los que se va a nutrir
00:14:49
son todos estos
00:14:52
estos son los datos
00:14:53
¿vale?
00:14:56
entonces los tenéis aquí ya, podéis hacer un copia y pega
00:14:59
entonces, a ver
00:15:01
esto cambia la idea
00:15:03
de ejercicio, es un ejercicio más rápido
00:15:05
el tema es, yo quiero hacer un diccionario
00:15:07
mi propio diccionario, porque quiero
00:15:09
que trabaje con la interfaz que yo le hago
00:15:11
en nuestro caso por consola
00:15:14
y él va a estar todo el rato pidiéndome
00:15:15
palabras para traducir, introduce palabra
00:15:17
no sé qué, y me la escribe
00:15:19
en inglés, y así todo el rato, un bucle infinito
00:15:22
un bucle infinito que está todo el rato pidiéndome
00:15:23
palabras para traducir
00:15:25
¿vale? entonces
00:15:28
ahora, ya habría
00:15:29
hay que pensar, vale, los datos del diccionario
00:15:33
¿cuáles son los datos del diccionario?
00:15:35
son todas las palabras de las que tiene traducción
00:15:37
todas las palabras de las que tiene traducción
00:15:40
vamos a suponer que son estas
00:15:41
ese listado que tenéis ahí
00:15:43
entonces, el diccionario se tiene que
00:15:44
nutrir con esos datos
00:15:47
bueno, pues entonces, la forma
00:15:48
más cómoda para trabajar
00:15:51
es que los datos
00:15:53
estén en un map
00:15:55
y haya un listado de pares donde cada par
00:15:56
sea palabra en español, palabra en inglés
00:15:59
palabra en español, palabra en inglés
00:16:02
en inglés, palabra en español, palabra en inglés
00:16:03
porque si los tenemos así
00:16:05
luego el diccionario es facilísimo
00:16:06
tú le das una palabra y él te busca en el map
00:16:08
el valor de esa
00:16:11
palabra, te lo muestra, etc.
00:16:13
y se podría hacer
00:16:15
tanto en la traducción en un sentido como en el otro
00:16:17
en el sentido español
00:16:19
inglés es inmediata, se hace el
00:16:21
get key, en el sentido
00:16:23
inglés español no es
00:16:25
inmediata porque ahora buscamos
00:16:27
por el valor, luego entonces hay que iterar
00:16:29
¿vale? bueno
00:16:31
aquí, ¿cuál es lo más
00:16:33
entre comillas complicado
00:16:36
de este ejercicio?
00:16:37
de un string así de largo
00:16:39
de este string tan largo
00:16:41
que es un pedazo de string
00:16:44
que tiene este formato
00:16:45
palabra en español, guión, palabra en inglés
00:16:47
punto y coma, palabra en español, guión
00:16:50
pues de este string tan largo
00:16:52
sacar los datos
00:16:54
para el mapa
00:16:56
pero para eso tenéis el split, tenéis todo eso
00:16:57
pues venga, vamos a hacer
00:17:00
rápido, antes de irnos, son 10 minutos
00:17:02
este diccionario
00:17:05
inglés español, está en el aula denunciado este
00:17:06
para que copiéis y peguéis ese
00:17:08
ese estilo
00:17:10
en tema 4, en tema 4 al final
00:17:12
pone, no en el tema
00:17:15
perdón, en el de colecciones
00:17:16
el tema de colecciones, que no sé cuál es, el 4, el 5
00:17:18
pues el que sea
00:17:20
en el de colecciones
00:17:22
en el de colecciones
00:17:23
es que no sé cuál es
00:17:26
aquí
00:17:27
al final de todo, donde pone enunciado, ejercicio y repaso
00:17:28
pues es el segundo que hay en esa lista
00:17:33
pues hala, a ver cómo hacéis ese diccionario antes de irnos
00:17:35
hasta luego
00:17:41
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 6
- Fecha:
- 13 de abril de 2024 - 13:54
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 19′ 27″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 94.23 MBytes