Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 01-03-24 - 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:
Tenemos que localizar en nuestra colección de aquí arriba, que es una lista, un objeto de todos los que tiene papa, papa, tiene este, tiene este, tiene este, tiene este, tenemos que localizar uno cuyo número de matrícula sea igual que este.
00:00:01
¿Vale?
00:00:19
Bueno, pues exactamente igual que hacíamos en un array.
00:00:20
Recorremos.
00:00:24
Me voy con este, ahora este, ahora este, ahora este y con cada uno de ellos.
00:00:26
su número de matrículas igual que este
00:00:29
su número de matrículas igual que este
00:00:31
en cuanto encuentre uno que lo es
00:00:33
ya tengo al alumno que busco
00:00:35
construyo el string con sus datos
00:00:36
y fuera
00:00:39
entonces tengo que recorrer
00:00:39
recorrer la colección
00:00:43
en este caso la lista
00:00:46
recorrerla
00:00:47
y cuando encuentre
00:00:48
una posición en la que hay un alumno
00:00:51
con ese número ya lo tengo
00:00:53
exactamente igual que hacíamos con los arrays
00:00:54
pero ahora no vamos a recorrer un array
00:00:57
vamos a recorrer una lista
00:00:58
bueno, pues recorrer una lista
00:00:59
ya lo vimos el otro día
00:01:02
yo tengo un montón de posiciones en la lista
00:01:04
pues vamos a recorrerlas
00:01:07
con el bucle de toda la vida
00:01:09
desde la posición 0
00:01:10
mientras si sea menor
00:01:14
que el total de posiciones de mi lista
00:01:17
que el total de posiciones de mi lista
00:01:19
¿cómo lo puedo obtener?
00:01:21
con el método size
00:01:23
que vimos el otro día
00:01:24
vale, pues este for
00:01:26
es el que va avanzando
00:01:29
posición 0, 1, 2
00:01:31
así hasta la última de la lista
00:01:32
vale
00:01:34
y una lista la recorremos así
00:01:35
porque tiene posiciones
00:01:38
un conjunto jamás lo recorreríamos así
00:01:40
no se puede, es imposible
00:01:43
recorrer un conjunto así, no se puede
00:01:44
porque los conjuntos
00:01:46
no tienen posiciones
00:01:49
pero las listas sí
00:01:50
entonces una lista se puede recorrer
00:01:52
posición 0, posición 1
00:01:54
posición 2, vale
00:01:56
pues cada posición de la lista
00:01:58
¿cómo se sacaba? cuando era una raíz
00:02:00
ya sabemos cómo la sacábamos
00:02:02
cuando era una raíz, sacábamos así
00:02:04
la posición de la raíz
00:02:06
así lo sacábamos, ¿no?
00:02:08
pero alumnos no es una raíz
00:02:10
alumnos es una lista
00:02:12
luego la posición y la sacamos así
00:02:13
con get y la posición
00:02:16
¿verdad?
00:02:18
esto es lo que vimos el otro día
00:02:20
entonces este es el alumno
00:02:22
que está en la posición
00:02:24
Y. Ese alumno es en la posición
00:02:25
Y. Vale, ¿y qué tengo que hacer con el
00:02:28
alumno que está en la posición Y? Ver
00:02:30
si es el que tiene este número de matrícula.
00:02:32
Porque
00:02:35
si es él, ya lo he encontrado.
00:02:36
Eso es lo que tenemos que hacer.
00:02:38
Pues si el alumno
00:02:40
que está en la posición Y,
00:02:42
su número de matrícula
00:02:44
resulta que
00:02:46
es igual
00:02:49
voy a bajar aquí abajo
00:02:50
resulta que es
00:02:53
igual al número
00:02:55
silencio
00:02:56
al número de matrícula
00:02:58
que me han pasado por parámetro
00:03:01
o sea, este es
00:03:02
el objeto alumno en la posición
00:03:05
y, pues si el objeto
00:03:07
alumno en la posición y
00:03:09
su número de matrícula, que lo saco con el
00:03:10
get de toda la vida, es igual
00:03:13
al número de matrícula que estoy
00:03:15
buscando, este es
00:03:17
el alumno que estoy buscando
00:03:19
ese
00:03:21
¿vale? bueno, pues ya he encontrado
00:03:21
el alumno que tiene esa matrícula.
00:03:25
¿Qué tengo que hacer con ese alumno?
00:03:27
Pues en este caso, coger sus datos y concatenarlos
00:03:29
en un stream, ya está, para devolverlo.
00:03:31
Bueno, pues esto ya,
00:03:35
pues vamos a
00:03:41
poner en result, vamos a poner
00:03:42
primero el nombre
00:03:46
del alumno.
00:03:48
Es que no tengo que implementar
00:03:55
alto stream.
00:03:56
Sí, pero es que entonces, ya,
00:03:58
Sí, pero es que entonces tengo que implementar
00:04:00
el toString
00:04:02
¿Cómo que no tengo los de matrícula?
00:04:04
Es el get de la propiedad
00:04:09
no matrícula. Los getter y setters los tengo
00:04:10
todos.
00:04:12
Lo que pasa es que el toString
00:04:14
se tendría que adaptar al formato
00:04:16
que el secretario quiere.
00:04:18
¿Vale? Al formato que el secretario quiere.
00:04:20
Entonces yo aquí voy a poner un
00:04:22
una especie de papelito
00:04:24
lo que sacaría el secretario.
00:04:26
¿Vale?
00:04:29
con su listado de asignaturas, etc.
00:04:30
Esperamos, si tengo un toString construido
00:04:34
que lo que me saca se adapta
00:04:37
a lo que el secretario quiere ver en sus papeles,
00:04:39
magnífico.
00:04:41
Pongo ahí efectivamente el toString y ya está.
00:04:42
Perfecto.
00:04:45
Vale.
00:04:47
Result nombre más, pues el nombre del alumno.
00:04:48
Alumnos.geti.getNombre.
00:04:52
vale, voy a ponerle también la edad
00:05:00
al informe
00:05:06
voy a hacer un salto de línea
00:05:07
para que me lo ponga una línea separada
00:05:09
entonces
00:05:11
que poner todo esto en el toestring es un poco
00:05:14
ni siquiera
00:05:16
seguramente tendría yo acceso a la clase
00:05:18
alumno, para poner en el toestring
00:05:20
exactamente lo que quiere el secretario
00:05:22
que salga en el papel
00:05:23
vale, entonces le vamos a poner ahora
00:05:24
la edad
00:05:28
el alumno tiene
00:05:32
¿cuántos años tiene? pues tiene
00:05:34
get
00:05:36
y
00:05:49
get edad, vale
00:05:50
lo concateno con un salto de línea para que no me quede
00:05:58
todo seguido ahí en el papelito
00:06:01
y ahora
00:06:03
tengo nombre, edad
00:06:06
y ahora tengo que concatenar todas las asignaturas
00:06:08
en ese string
00:06:11
vale
00:06:13
las asignaturas del alumno son a su vez
00:06:15
una lista
00:06:19
entonces tengo que recorrer la lista
00:06:20
de asignaturas
00:06:26
e irlas concatenando
00:06:27
al result, para que aparezcan
00:06:30
todas, otra vez
00:06:32
¿vale?
00:06:34
repito, el alumno
00:06:38
su nombre y su edad son propiedades simples
00:06:40
las he concatenado al result fácilmente
00:06:43
sin problemas
00:06:45
pero asignaturas
00:06:45
es un array
00:06:49
perdón, es una lista
00:06:50
entonces tengo que recorrer
00:06:52
la lista de asignaturas
00:06:55
tengo que recorrerla
00:06:57
y cada asignatura irla concatenando al result
00:06:58
vale, pues entonces
00:07:01
aquí podría hacer
00:07:05
menor que
00:07:06
alumno
00:07:14
punto get y
00:07:16
punto
00:07:21
get asignaturas
00:07:23
a ver si abro esto
00:07:25
veis, este for de aquí
00:07:37
es para recorrer
00:07:41
las asignaturas
00:07:43
del alumno de posición I
00:07:46
para recorrer
00:07:48
las asignaturas del alumno de posición I
00:07:50
y ahora, ¿qué hago con
00:07:51
cada asignatura?
00:07:54
la concateno
00:07:56
¿vale?
00:07:57
get asignaturas
00:08:05
de J
00:08:07
¿vale? o sea, todo
00:08:15
este for
00:08:25
es para concatenar
00:08:25
todas y cada una de las asignaturas
00:08:29
del alumno este
00:08:31
para concatenarlas
00:08:32
todas ellas
00:08:35
a mi result
00:08:36
para que se vea mejor el código
00:08:38
como no me cabe, con la letra tan grande no me cabe
00:08:40
voy a guardar al alumno osgesti
00:08:42
en una variable auxiliar para que quede más cortito y se vea mejor
00:08:44
entonces voy a guardar
00:08:47
en una variable alumno aquí
00:08:48
el alumno con el que
00:08:52
este, el alumno encontrado
00:08:56
¿Vale? Este alumno estoy dentro de este if
00:08:59
Este es el alumno
00:09:02
Cuyo número de matrícula coincide
00:09:03
Este, el get if
00:09:06
Entonces para no arrastrar todo el rato el get if
00:09:07
Voy a sustituirlo por a que se va a ver mejor
00:09:09
A
00:09:11
Esto es a
00:09:14
Y esto es a
00:09:17
Así se ve mejor
00:09:20
¿Vale?
00:09:21
Este es mi alumno a
00:09:24
Pongo su nombre
00:09:25
En el resultado
00:09:28
concateno su edad en el resultado
00:09:29
y ahora recorro sus asignaturas
00:09:32
las recorro
00:09:35
que son una lista
00:09:36
cada asignatura
00:09:37
la voy concatenando al resultado
00:09:39
aquí me va a quedar mejor con un salto de línea
00:09:42
para que no salgan todas seguidas
00:09:44
¿vale? y de hecho le voy a poner aquí
00:09:45
asignaturas
00:09:55
para que quede más bonito luego cuando lo veamos
00:09:56
igual
00:09:59
asignaturas
00:10:04
y le ponemos un salto de línea
00:10:13
ya está
00:10:16
vale, pues es el informe que va a sacar
00:10:17
nombre, edad y todas sus asignaturas
00:10:20
concatenadas una tras otra
00:10:23
y ahora ya este resultado
00:10:24
lo devuelve
00:10:29
vale, pues nada
00:10:29
hemos recorrido nuestro array alumnos
00:10:33
cuando hemos encontrado un alumno
00:10:36
cuya matrícula
00:10:38
coincide con la que
00:10:40
me han pasado
00:10:42
ese alumno construyó el string
00:10:43
con sus datos
00:10:46
y ya está, construyó el string con sus datos
00:10:47
y he tenido que entrar
00:10:50
a su vez en un list
00:10:52
que es el de sus asignaturas
00:10:54
¿vale?
00:10:55
¿este código que he escrito aquí está claro?
00:11:11
vale
00:11:16
pues vamos a aprovechar este método
00:11:16
para ver otras formas de recorrer una lista
00:11:19
para ver otras formas de recorrerla
00:11:21
esta siempre es una forma
00:11:23
de recorrer la lista
00:11:25
voy posición por posición desde la 0
00:11:26
mientras no haya llegado a la última
00:11:29
y cada posición la recupero con get i
00:11:31
Esta es una forma de recorrerla, pero hay otras formas alternativas para recorrer una lista.
00:11:35
Dentro de este mismo método, lo vamos a poner aquí abajo.
00:11:43
Otras formas de recorrer una lista, aparte del for este de índice que estamos poniendo aquí, otras formas de recorrerla.
00:12:00
Pues una muy cómoda, pues el for each, un array, a veces lo hemos recorrido con un for de índice,
00:12:08
for each y patatín y a veces con un for each
00:12:15
normal, pues una lista igual
00:12:19
una lista también podemos recorrerla
00:12:21
con un for each cuando estamos
00:12:23
vagos y queremos escribir rápido
00:12:25
por ejemplo así
00:12:26
para cada alumno
00:12:29
a, por ejemplo
00:12:31
¿en qué lista?
00:12:33
en la lista alumnos
00:12:35
este es el for each
00:12:37
pero ahora ha aplicado
00:12:42
una lista, entonces
00:12:47
este for each recorre la lista alumnos
00:12:48
en la primera iteración
00:12:51
A será el primero de la lista
00:12:53
en la siguiente iteración
00:12:55
A será el segundo de la lista
00:12:57
en la siguiente iteración
00:12:58
A será el tercero
00:13:00
es exactamente igual que en el array
00:13:02
exactamente igual
00:13:04
vale exactamente igual
00:13:05
entonces esta es cómoda por vaguería de escribir
00:13:08
pero
00:13:11
pasa lo mismo
00:13:13
y aplica lo mismo que decíamos
00:13:15
con el array
00:13:17
esto como funciona
00:13:18
A
00:13:21
es una copia
00:13:22
de lo que hay en la lista
00:13:24
la primera iteración es una copia
00:13:27
del primero, pero una copia
00:13:29
la segunda iteración es una copia del segundo
00:13:30
pero una copia
00:13:33
la tercera iteración es una copia del tercero
00:13:34
pero una copia, entonces para consultar
00:13:37
estupendo, me da igual consultar
00:13:39
el original que la copia, para consultar
00:13:41
pero si yo quiero
00:13:42
estoy cambiando el objeto
00:13:44
o estoy eliminando
00:13:46
o algo
00:13:49
esto no le debería usar nunca jamás
00:13:50
¿vale?
00:13:53
este cuando yo lo que
00:13:56
quiero hacer es consultar
00:13:57
y no voy a tocar la lista
00:13:59
pero si voy a hacer modificaciones en la lista
00:14:00
no, porque entonces estaré trabajando con copias
00:14:03
¿vale? y no solo eso
00:14:05
sino que hay problemas añadidos
00:14:09
que forzaremos para que no salgan
00:14:11
dentro de un tiempo
00:14:13
para que lo veáis
00:14:14
pero por ahora que sirva como principio
00:14:16
que como este for it
00:14:19
ya sabéis dentro como funciona
00:14:21
A es una copia
00:14:23
que va siendo primero el primer elemento
00:14:25
luego el segundo, luego el tercero
00:14:27
esencialmente es útil para consultas
00:14:28
no para toquetear la lista
00:14:31
estamos trabajando con copia
00:14:34
para consulta
00:14:36
aparte de que es menos eficiente
00:14:38
porque es que está todo el rato haciendo copias
00:14:40
esto sin embargo
00:14:42
no trabaja con copias
00:14:46
o sea get i
00:14:48
es directamente una referencia
00:14:49
a ese objeto
00:14:52
cuando recorremos esto
00:14:53
alumnos get i es una referencia
00:14:56
directa al objeto, no es una referencia
00:14:58
a copia, es una referencia
00:15:00
directa a esa
00:15:02
bueno pues el for it sería
00:15:03
otra forma alternativa y otra
00:15:06
la más mejor y la más
00:15:08
recomendable, otra forma
00:15:10
el iterador
00:15:13
que lo mencionamos ya
00:15:14
el martes
00:15:17
cuando vimos los métodos
00:15:19
que ofrecía List
00:15:20
el literador
00:15:23
es un objeto que se crea
00:15:25
que sirve para recorrer colecciones
00:15:27
de cualquier tipo
00:15:29
de ahí viene su nombre
00:15:30
es un literador
00:15:33
vale, entonces esto es un objeto
00:15:34
que sirve para recorrer
00:15:37
colecciones de datos, sean listas
00:15:39
sean conjuntos, sean de lo que sean
00:15:41
porque hay más colecciones de datos aparte de estas
00:15:43
de la Java útil, hay muchas más
00:15:45
para cosas específicas
00:15:47
pero para cosas genéricas
00:15:49
son estas de Java útil
00:15:51
bueno, pues esto es un objeto
00:15:52
que vale para recorrer
00:15:54
colecciones
00:15:56
y gestiona temas como concurrencia
00:15:57
entonces es bastante
00:16:01
seguro de usar
00:16:02
bueno, pues para recorrer una colección con iterador
00:16:04
hay que crear el objeto iterador
00:16:07
pues el objeto iterador pertenece a la clase
00:16:08
iterator, como uno se puede imaginar
00:16:10
entonces, ¿cómo lo instancia uno?
00:16:12
bueno, pues
00:16:16
uno piensa, a ver, ¿en dónde
00:16:17
quiero yo iterar? en una colección de objetos
00:16:19
alumno, pues iterador
00:16:21
es una clase genérica
00:16:23
la clase iterador si uno entra
00:16:24
en ella
00:16:27
la clase iterador, bueno es una interfaz
00:16:27
uno hace una implementación
00:16:39
claro, es una
00:16:41
clase lo que implementa eso
00:16:43
los que implementen eso
00:16:45
lo que hacen es iterar en colecciones
00:16:46
pero en colecciones de qué, lo deja genérico
00:16:49
de lo que sea, cuando tú me instancies para iterar
00:16:52
cuando tú me instancies ya me dirás sobre qué itero
00:16:55
pero ahora mismo es genérica
00:16:58
bueno pues como recordáis de clases genéricas del otro día
00:17:00
cuando instanciemos el iterador que es aquí
00:17:03
en este momento, aquí ya decimos
00:17:07
oye, pero a qué clase pertenecen los objetos
00:17:09
sobre los que vas a iterar, en nuestro caso una colección de alumnos
00:17:13
pues aquí es donde nosotros
00:17:16
ya nos comprometemos y decimos
00:17:18
oye, que esto es de alumno
00:17:20
ah, vale, vale, esto es de alumno
00:17:22
pues aquí ya lo fijas
00:17:24
vale, pues hacemos un iterador
00:17:25
¿y cómo se instancia el iterador?
00:17:27
pues en qué lista queremos iterar
00:17:30
en la lista que se llama alumnos
00:17:32
pues la lista que se llama alumnos
00:17:33
tiene un método
00:17:36
que es este
00:17:37
que te devuelve ya ese objeto iterador
00:17:39
¿vale?
00:17:42
vamos a importar
00:17:44
la clase de Java útil
00:17:45
cuidado con los import
00:17:48
porque como ya sabéis el Eclipse
00:17:50
obviamente no sabe absolutamente nada
00:17:52
entonces él te ofrece
00:17:53
todas las clases iterador que he visto por ahí
00:17:55
pero claro tenéis que elegir
00:17:58
cuál queréis, queréis esta que viene
00:18:00
de su Intex HTML document
00:18:02
pero que es eso, no
00:18:04
sabemos que las colecciones están en Java útil
00:18:05
lo sabemos porque lo hemos estudiado
00:18:08
entonces obviamente querremos importarla de Java útil
00:18:09
no importamos la primera que nos ofrece
00:18:12
importamos la que sabemos
00:18:14
que es. Entonces, como
00:18:17
estamos con colecciones, esto de arriba
00:18:19
no tiene ningún sentido. Es java.util.
00:18:21
¿Vale? Pues eso.
00:18:24
Cuidado con los import, obviamente.
00:18:25
Vale. Pues ya tenemos el iterador.
00:18:28
Y ahora,
00:18:30
este objeto iterador
00:18:31
es un objeto adicional que sirve para
00:18:33
recorrer esta lista.
00:18:35
Es como si apuntara esa lista.
00:18:38
Y sirve para recorrerla.
00:18:40
Y además ofrece métodos para hacer cosas
00:18:41
con esa lista.
00:18:43
De forma sincronizada, por eso es útil.
00:18:44
¿Vale?
00:18:47
Pues ahora cómo lo usamos para recorrerla.
00:18:48
Pues it tiene un método que es el clave,
00:18:50
que es el método next.
00:18:54
¿Vale?
00:18:56
Y el método has next.
00:18:58
Tiene este, que ahora vemos cómo lo usamos,
00:18:59
y este, entre otros.
00:19:04
Estos son los dos más importantes,
00:19:07
los que se usan para recorrer.
00:19:09
Estos dos métodos.
00:19:11
¿Este qué te dice?
00:19:12
O sea, el iterador inicialmente se queda posicionado
00:19:13
Antes del principio
00:19:16
Si la lista tiene 0, 1 y 2
00:19:18
Es como si se quedara en la menos 1
00:19:21
Se queda en la posición menos 1
00:19:22
Vale, pues next que hace
00:19:24
Next lo va avanzando
00:19:27
Entonces un primer next hay que hacer
00:19:28
Porque él empieza en la menos 1
00:19:30
Un primer next hay que hacer
00:19:32
Y has next que hace
00:19:34
Te devuelve un boolean para decirte
00:19:36
Si hay siguiente o si no hay siguiente
00:19:38
¿vale? entonces
00:19:40
cuando llevamos al método it has next
00:19:43
nos devuelve true si hay otro
00:19:45
más todavía, si queda
00:19:47
alguno, si queda alguno
00:19:49
y nos devuelve false si no queda ninguno
00:19:51
si ya está al final
00:19:53
¿vale? esto es para decir, ¿quedan elementos o no quedan?
00:19:54
para esto vale
00:19:58
te devuelve un true
00:19:59
y este salta
00:20:00
bueno, pues ¿cómo se combinan estos métodos
00:20:02
para recorrer con un iterador?
00:20:05
se combinan en un while de esta manera
00:20:07
mientras
00:20:08
queden elementos
00:20:12
mientras queden
00:20:16
porque en it.next hemos dicho que devuelve
00:20:21
true o false, luego es una condición
00:20:23
devuelve true o false
00:20:25
es una condición, se puede meter en un while
00:20:27
pues mientras queden
00:20:29
¿qué hacemos? pues avanza
00:20:31
para quedarte con él
00:20:33
entonces it.next
00:20:34
avanza y te recupera
00:20:36
un objeto alumno, te lo recupera
00:20:39
hombre, aquí lo ideal sería
00:20:41
meterlo en una referencia
00:20:42
ahí
00:20:45
y ahora
00:20:46
con este alumno A
00:20:48
uno ya hace lo que le dé la gana
00:20:49
este es el bucle de recorrido
00:20:52
mientras queden
00:20:54
avanza
00:20:56
y ya estás en él, que es este
00:20:58
y con él ya haces lo que sea
00:21:00
mientras que siguen quedando
00:21:01
vuelve a avanzar
00:21:04
luego ya estás en el siguiente y haces con él lo que sea
00:21:05
que siguen quedando, vuelve a avanzar
00:21:07
y ya estás en el siguiente, haz con él lo que sea
00:21:10
¿Vale? Este es el recorrido
00:21:12
El aspecto del bucle para recorrer
00:21:15
Con un iterador
00:21:17
Entonces
00:21:18
Aplicaciones más complicadas que combinen estos
00:21:23
Con otros recorridos, con otras colecciones
00:21:27
Siempre va a ser mejor
00:21:28
Siempre va a ser mejor usar un iterador
00:21:29
Nosotros ahora mismo en esto que tenemos una única colección
00:21:32
Aislada y no estamos haciendo nada
00:21:35
Pues no notaríamos diferencia
00:21:36
Pero una aplicación más complicada
00:21:38
Que mezcle hilos, que mezcle cosas
00:21:40
De repente
00:21:42
podría no funcionarnos en un caso concreto
00:21:44
por haber
00:21:46
estado recorriendo con un
00:21:48
for normal y si cambiamos a iterador
00:21:50
ya así no se estaría funcionando. Entonces, esta
00:21:52
siempre es la forma más segura.
00:21:54
Pero en las aplicaciones que hacemos nosotros ahora
00:21:56
nos da igual porque
00:21:58
no estamos en situaciones de esas
00:22:00
críticas.
00:22:02
Vale, entonces aquí
00:22:05
ya haríamos lo que fuera con el alumno.
00:22:06
¿Vale?
00:22:09
Entonces, bueno,
00:22:10
pues estas serían formas alternativas
00:22:12
de recorrerlo, vale, me da igual como lo recorra
00:22:14
me da igual como llego al alumno A de cada iteración
00:22:18
lo que hemos hecho en este método es construir el informe y ya está
00:22:22
vale, pues entonces ya tenemos
00:22:26
insertar y mostrar datos, pues vamos a hacer un main rápido
00:22:30
que pruebe estos datos, pruebe estos métodos
00:22:34
a ver que
00:22:37
vale, yo no voy a hacer el main
00:22:39
porque no quiero escribir tanto ni perder el tiempo
00:22:45
entonces si haríais un main
00:22:47
entonces voy a insertarle un alumno
00:22:48
sin más
00:22:51
alumnos, esta es mi colección
00:22:52
de alumnos, pues voy a llamar
00:23:00
al método de insertar
00:23:02
eh
00:23:03
ay perdón
00:23:05
que estoy idiota
00:23:07
operaciones punto
00:23:08
insertar alumno
00:23:11
vale
00:23:13
vale, este es mi método
00:23:14
insertar alumno de la clase operaciones
00:23:18
vamos a insertar
00:23:21
un alumno
00:23:22
lo natural sería pedir antes los datos por teclado
00:23:23
pero bueno, voy a instanciar
00:23:29
ya directamente
00:23:31
un alumno aquí con mi constructor
00:23:32
con un número de matrícula
00:23:34
uno
00:23:38
y su nombre
00:23:38
ala, este
00:23:41
vale, y alumno tenía
00:23:43
por ahora
00:23:54
sin asignaturas
00:23:56
alumno
00:23:57
¿por qué no me
00:24:01
int string
00:24:02
int
00:24:07
ah vale no que era la edad
00:24:08
vale vale la edad me la estoy saltando
00:24:11
de la manga
00:24:13
vale 20
00:24:13
y tenía un constructor en el que no había metido las asignaturas
00:24:15
a propósito
00:24:18
¿no? recordáis de alumno
00:24:19
que no las habíamos metido a propósito
00:24:21
en el constructor para luego
00:24:24
irlas añadiendo a través del menú.
00:24:26
Vale, pues ya tengo aquí
00:24:31
la llamada a mi método de insertar alumno
00:24:32
donde inserto esto.
00:24:37
Lo va a insertar en los datos
00:24:41
que los dos están aquí.
00:24:43
Vale, entonces esto es
00:24:46
lo que hace la aplicación de secretaría.
00:24:48
En lugar de un menú,
00:24:51
yo estoy insertando uno a capón,
00:24:52
pero aquí habría que poner un menú
00:24:54
introduzca número de matrícula
00:24:55
edad y nombre, y ya está
00:24:57
y haría esto mismo
00:25:00
pero con los datos leídos por teclado
00:25:01
no directamente con los he puesto yo
00:25:04
vale, y ahora vamos a
00:25:05
mostrar el resultado
00:25:07
de
00:25:10
mostrar los datos de este alumno
00:25:10
mostrar datos del que tengan los matrícula 1
00:25:15
vale, este sería
00:25:17
nuestro primer caso de prueba
00:25:21
vale, bueno, vamos a hacer
00:25:23
un primer caso de prueba
00:25:26
estamos haciendo el testing de esta aplicación
00:25:28
Primer caso de prueba
00:25:30
Número de matrícula que no existe
00:25:32
A ver qué hace
00:25:34
A ver si lo que hace nos gusta o no
00:25:35
Si lo que hace nos gusta lo dejamos
00:25:37
Si lo que hace no nos gusta habrá que decir al desarrollador
00:25:39
Este caso de prueba lo has pasado fatal
00:25:42
Venga, primer caso de prueba
00:25:44
Número de matrícula que no existe
00:25:46
Vamos a ver qué hace
00:25:47
No ha dado error pero tampoco ha mostrado nada
00:25:48
Hombre, yo iría y le diría al desarrollador
00:25:58
Oye
00:26:00
Si el alumno no existe
00:26:01
Que me muestre un mensajito
00:26:04
¿Verdad? Me muestra un mensajito
00:26:06
Eso sería lo primero que yo haría
00:26:09
Si fuera del equipo de testing
00:26:11
¿Vale?
00:26:12
Pero eso lo podríamos cambiar muy fácilmente
00:26:16
Porque aquí hay mostrar datos
00:26:19
¿Qué haríais?
00:26:21
¿Qué haríais para que el programa
00:26:39
Me muestre? ¿Qué cambio incorporaríais?
00:26:41
Para que el programa me muestre
00:26:43
Cuando yo lo llamo por un número de matrícula
00:26:44
Que no existe, que me diga
00:26:47
En lugar de nada, porque me ha mostrado nada
00:26:49
que me diga, el alumno no está.
00:26:51
¿Qué cambio
00:26:55
podríais hacer en este método?
00:26:56
Si el alumno es diferente
00:27:14
de null, ¿dónde?
00:27:15
Bueno, alumno es diferente de null.
00:27:20
Claro, o sea, lo más fácil es,
00:27:26
si el alumno no existe, no ha entrado
00:27:28
nunca en el if, con lo cual esto se queda
00:27:30
vacío.
00:27:32
Pues entonces, aquí
00:27:34
simplemente decir,
00:27:36
if
00:27:38
result
00:27:38
es
00:27:40
diferente
00:27:43
de la cadena vacía
00:27:47
es porque ha encontrado el alumno
00:27:53
entonces que me devuelva result
00:27:54
y si no, que me devuelva
00:27:55
no existe alumno
00:27:58
con ese número
00:28:03
de matrícula
00:28:05
y ya está
00:28:10
es una posible forma
00:28:14
si hemos llegado a este punto
00:28:18
y esto ha cambiado de valor
00:28:20
no es el valor inicial de aquí
00:28:22
es porque hemos entrado en el if
00:28:24
y hemos encontrado al alumno
00:28:26
hemos entrado en el if y hemos construido el informe
00:28:27
pero si el alumno no existe
00:28:30
nunca hemos entrado en el if
00:28:32
luego no hemos construido el informe
00:28:33
y esto se ha quedado como tal
00:28:35
bueno pues entonces
00:28:36
una forma sencilla es
00:28:39
si la hemos construido
00:28:41
devuélvela y si no la hemos construido devuelve esto
00:28:44
entonces con ese arreglo rápido
00:28:46
ya cuando el que hace las pruebas
00:28:48
vuelva a hacer la prueba
00:28:50
Para este caso de prueba le dirá
00:28:51
Ah, vale, este caso de prueba ya lo has pasado con éxito
00:28:54
Vale
00:28:57
Este caso de prueba está pasado con éxito
00:28:57
Venga, vamos al siguiente caso de prueba
00:29:00
Que es matrícula que sí existe
00:29:02
A ver qué hace
00:29:04
Vamos a pasar el número de matrícula que sí existe
00:29:05
Vale, esto sería
00:29:09
Caso de prueba 1
00:29:11
Matrícula que no existe
00:29:13
Vale
00:29:20
Ahora, venga, caso de prueba 2
00:29:22
matrícula
00:29:24
que si existe
00:29:33
venga, caso de prueba 2
00:29:35
matrícula que si existe
00:29:39
vale, esta la dejo comentada
00:29:41
porque ya la hemos pasado, esta prueba
00:29:54
mostrar datos
00:29:56
1, matrícula que si existe
00:29:58
caso de prueba 1, a ver así
00:30:00
en 10 segundos, en menos, en 2 segundos
00:30:01
va a pasar este caso de prueba
00:30:04
o no lo va a pasar, va a pasar con
00:30:06
¿success o fail?
00:30:08
rápido
00:30:12
¿éxito o fracaso?
00:30:13
¿nadie dice nada?
00:30:17
normalmente solo fracaso
00:30:19
bueno, yo primero
00:30:22
hay que dejar un criterio
00:30:23
yo creo
00:30:25
¿por qué podría pasarlo con fracaso?
00:30:29
con lo que estamos diciendo hasta ahora
00:30:37
nuestros únicos errores hasta ahora están siendo
00:30:39
null pointer exception, ¿verdad?
00:30:41
es que no estamos haciendo más cosas
00:30:42
no hay más que
00:30:45
¿dónde podría salir aquí un null pointer exception?
00:30:46
en operaciones podría salir
00:30:51
un null pointer exception, ¿verdad?
00:30:53
si
00:30:59
esto
00:30:59
fuera null
00:31:02
pero no lo es
00:31:04
y si eso no es null
00:31:06
que esto fuera null
00:31:09
son los dos puntos clave
00:31:11
las asignaturas del alumno
00:31:14
Las asignaturas del alumno van a ser null.
00:31:17
No he introducido ninguna.
00:31:21
Vamos a ver alumno.
00:31:23
No he introducido ninguna asignatura.
00:31:24
Con lo cual, las asignaturas de alumno van a ser null.
00:31:27
Entonces, no va a pasar este caso de prueba.
00:31:30
Otra cosa es que yo aquí haya esta clase,
00:31:33
esté cambiada y esté inicializada una lista vacía.
00:31:36
Entonces, sí lo pasa.
00:31:39
Simplemente no muestra asignaturas.
00:31:40
Pero no lo va a pasar, va a decir un null pointer exception.
00:31:42
¿Verdad? Vamos a probarlo.
00:31:44
porque esto es null
00:31:45
vamos a pasar este caso de prueba
00:31:47
pues efectivamente
00:31:52
null pointer exception y donde
00:31:56
pues ahí
00:31:58
está haciendo
00:32:01
esto que es null
00:32:04
esto es un null enorme
00:32:06
punto 6
00:32:08
punto 6 de algo que es null
00:32:09
vale, no puede pasar ese caso de prueba
00:32:11
vale
00:32:15
entonces
00:32:17
si uno tiene acceso a esta clase
00:32:18
lo normal es que
00:32:23
estas clases, cuando hay colecciones
00:32:25
se generen con
00:32:27
la lista ya inicializada
00:32:29
pero sin elementos, precisamente para evitar
00:32:31
eso, ¿verdad?
00:32:33
entonces ya solo con este cambio de aquí
00:32:39
solo con este
00:32:40
cambio, ese null pointer
00:32:46
ya no está
00:32:50
ese null pointer ya no está
00:32:51
lo que pasa es que
00:32:53
como esto es cero
00:32:55
pues no va a entrar en este bucle
00:32:56
y no va a mostrar asignaturas, pero eso está bien
00:32:58
no va a mostrar asignaturas, ya está
00:33:00
¿vale? con este cambio ya
00:33:01
ese no va a estar
00:33:04
vamos a volver a pasar este caso
00:33:05
de prueba, vale
00:33:08
asignaturas vacío, a ver otra
00:33:12
cosa es que dijéramos, oye si no hay asignaturas
00:33:14
que ponga un mensaje
00:33:16
no está matriculado de nada
00:33:18
pero bueno, eso sería un cambio similar al que hemos hecho
00:33:20
¿vale? similar al que hemos hecho
00:33:22
bueno, estos métodos
00:33:23
vale, parece que
00:33:28
que están
00:33:29
vale
00:33:30
pero este de aquí operaciones
00:33:34
es que nos da mucho juego
00:33:37
este de mostrar datos
00:33:39
vamos a otra vez a este for
00:33:41
que recorre
00:33:47
otra vez a ese for que recorre
00:33:48
si pudiéramos evitar de alguna manera
00:33:52
tener que hacer ese for
00:33:55
todo el rato, ir uno por uno
00:33:56
si es igual, no habrá un método que me devuelva
00:33:58
ya directamente algo
00:34:01
no puede haber algo
00:34:02
pues realmente la interfaz list
00:34:03
tiene tropecientos métodos, a lo mejor
00:34:06
hay alguno que nos permite hacer esto
00:34:08
de otra manera
00:34:10
vale
00:34:11
no os perdáis, estamos al mismo punto
00:34:13
en el punto de recorrer mi lista
00:34:16
hasta ubicar el alumno
00:34:18
cuya matrícula es
00:34:20
igual que la que me han dado, estamos en este punto
00:34:22
vale, pero vamos
00:34:24
a seguir viendo métodos de list para ver
00:34:26
otra forma de hacer esto
00:34:28
pues en este mismo mostrar datos
00:34:30
otras formas de recorrer
00:34:32
la lista, otras formas
00:34:34
vamos a poner
00:34:36
aquí
00:34:38
otra forma más, otra cosa que se puede
00:34:39
hacer
00:34:42
vamos a ver que métodos me ofrece a mi list
00:34:42
a ver si hay alguno que me ofrece cosas
00:34:53
que me gusten
00:34:55
joe, que no quería yo esto, quería la
00:34:57
vale
00:34:58
a ver, venga, otra
00:34:59
cosa que se puede hacer, aquí está, vamos
00:35:09
vamos a ver que me ofrece la lista
00:35:11
alumnos
00:35:13
pues me ofrece aquí un montón de morralla
00:35:16
de historias de añadir de patatín
00:35:20
de no sé qué, de rollos patateros
00:35:23
y de repente me veo este método
00:35:27
que me gusta, este método te da
00:35:31
la posición donde está
00:35:35
un objeto igual a este
00:35:38
si uno describe, si uno mira la ayuda del index of
00:35:42
mira la ayuda
00:35:47
te dice, oye
00:35:48
te devuelve la posición
00:35:51
de la primera ocurrencia
00:35:54
que encuentra de un elemento
00:35:55
igual a este
00:35:57
según el método equals
00:35:59
es que te lo explica
00:36:01
según el método equals
00:36:02
te devuelve
00:36:05
la primera ocurrencia
00:36:07
en esta lista
00:36:09
de un objeto igual a este que le pasas
00:36:10
según el equals
00:36:13
cuando encuentra uno
00:36:14
get i que es igual a este
00:36:16
y este devuelve menos uno
00:36:18
si no hay ninguno
00:36:20
hombre pues justo, perfecto
00:36:21
le voy a pasar un objeto igual
00:36:24
a ese que tiene esa matrícula
00:36:25
y que me devuelva la posición
00:36:28
y ya lo tengo, no tengo que hacer un for
00:36:30
ni tengo que hacer nada
00:36:32
es decir, podemos hacer esto
00:36:33
este método
00:36:36
si yo le paso un objeto
00:36:46
igual
00:36:48
un objeto igual a uno con ese número
00:36:49
de matrícula, si yo le paso esto
00:36:56
vamos, como no tengo un constructor
00:36:58
solo con un número de matrícula, vamos a construir
00:37:03
aquí, new alumno
00:37:05
y ahora le pongo
00:37:11
aux.set
00:37:12
num matrícula
00:37:15
vale
00:37:17
ala, pues que me devuelve
00:37:19
esto
00:37:29
me devuelve la posición
00:37:29
del primer
00:37:32
objeto alumno que se encuentra
00:37:35
igual que este
00:37:36
y recordad que la igualdad de alumno
00:37:38
va por número de matrícula
00:37:40
la igualdad de alumno va por número de matrícula
00:37:42
que está aquí
00:37:44
va por número de matrícula
00:37:45
luego me va a devolver
00:37:46
una posición
00:37:52
que es la del primer alumno
00:37:53
que se encuentra igual que este
00:37:55
y como este tiene como número de matrícula
00:37:57
la que me han pasado
00:37:59
pues me va a devolver
00:38:00
la primera posición
00:38:03
que se encuentra con un alumno
00:38:04
cuyo número de matrícula es ese
00:38:06
luego el alumno que estoy buscando es este
00:38:07
es este, ya lo tengo
00:38:12
ni for ni nada
00:38:15
este es el alumno que estoy buscando
00:38:16
este es el alumno que estoy buscando
00:38:18
este, el alumno
00:38:27
que está en la
00:38:29
posición, de vuelta
00:38:31
por este método, es el alumno que estoy buscando
00:38:36
y de este es del que tengo que construir el informe
00:38:38
este es el alumno
00:38:40
que busco, ya está
00:38:42
no tengo que hacer for ni tengo que hacer nada
00:38:50
este es mi alumno
00:38:52
este es
00:38:54
Y ya con este alumno
00:39:02
Pues puedo hacer todo esto de aquí
00:39:05
Todo esto que he hecho aquí
00:39:06
Todo esto que he hecho
00:39:07
No tengo que meterlo en un for ni nada
00:39:10
Todo esto que he hecho aquí
00:39:12
Todo esto
00:39:14
Ya está
00:39:17
Es este
00:39:20
Y esto con alumno
00:39:24
Con alumno
00:39:28
Vale, pues este podría ser el código de mi método
00:39:32
Exactamente ese
00:39:47
luego con los métodos de las listas
00:39:48
se pueden hacer un montón de cosas
00:39:54
¿vale? pues ya conocemos este
00:39:55
le pasas un objeto
00:39:58
te busca la primera
00:40:01
posición de la lista de un objeto
00:40:02
igual a este
00:40:04
igual según el equals
00:40:05
como nuestro equals es con número de matrícula
00:40:08
pues te devuelve
00:40:11
la primera posición de un objeto
00:40:12
cuyo número de matrícula es igual a la de este
00:40:14
que se la acabamos de poner aquí
00:40:16
te devuelve la posición
00:40:18
y ahora esa posición se la pasas al get
00:40:20
Y ya tienes el alumno que estabas buscando
00:40:22
El alumno con ese número de matrícula
00:40:24
No tienes que meterte en un get to ni en un for ni nada
00:40:25
Ese alumno que buscábamos
00:40:28
Con ese número de matrícula
00:40:31
Y ya con él se hace lo que sea
00:40:32
¿Vale?
00:40:33
Bueno, merece la pena que lo probemos
00:40:39
Porque
00:40:40
A ver
00:40:41
Venga, este método vamos a denunciar la cabecera
00:40:49
Y lo hacéis ahora vosotros
00:40:57
Matricular a un alumno
00:40:59
De una asignatura
00:41:01
pues este método será
00:41:02
para matricular a un alumno de una asignatura
00:41:05
¿qué datos usa el secretario?
00:41:17
dime tu número de matrícula, dime la asignatura
00:41:26
y ya estás con los datos
00:41:27
pues esos son los datos que habrá que pasarle
00:41:29
el número de matrícula del alumno
00:41:31
porque es el que le identifica de forma única
00:41:34
matrícula
00:41:36
y la asignatura
00:41:39
que la asignatura hemos dicho que es un string
00:41:41
pues venga este método
00:41:43
habrá que localizar
00:41:58
el alumno con este número de matrícula
00:41:59
y una vez localizado meterle la asignatura
00:42:02
matricular uno de asignatura
00:42:04
venga pues
00:42:06
hacedlo
00:42:08
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 3 de marzo de 2024 - 19:04
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 42′ 11″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 192.74 MBytes