Saltar navegación

20241029 Copiar array - 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 29 de octubre de 2024 por Stefano C.

17 visualizaciones

Descargar la transcripción

Voy a grabar esta clase, por lo tanto, si habláis, me dais vuestro consentimiento a hablar, a grabar. 00:00:00
Vale, entonces, ahora lo que vamos a ver es el concepto de copiar un array, ¿vale? 00:00:07
Imaginámonos que yo tenga este array, string, corchetes x, es igual a un array, ¿vale? 00:00:12
Y que ahora cree un nuevo array, string, corchetes y, es igual a x, ¿sí? 00:00:19
Y ahora me voy a X en posición 3, 0, 1, 2, 3, y cambio este señor con 7. 00:00:27
¿Qué pasa si ahora miro Y de 3? 00:00:38
Pues lo que pasa es que también Y de 3 ha cambiado a 7. 00:00:44
¿Por qué? 00:00:50
Porque cuando yo creo un array, la X es como con los strings más o menos, no es un tipo primitivo, es un objeto, entonces aquí dentro no hay el valor directamente, 00:00:51
Pero hay un puntero, el famoso que luego hace null pointer exception, un puntero, una zona de memoria en el que está este array. 00:01:08
Aquí lo tenemos. Este x no es el array, es una flecha hacia una zona de memoria en la que está el array. 00:01:20
¿Sí? Ahora, cuando hago esta operación de aquí, string y es igual a x, no estoy copiando la memoria 00:01:30
No estoy copiando el array, pero estoy creando un nuevo y que apunta a la misma zona de memoria 00:01:39
Entonces, estos no son dos arrays distintos, pero son el mismo array referenciado por dos variables distintas 00:01:46
Tengo dos variables que apuntan al mismo objeto 00:01:58
Es lo que estamos viendo 00:02:03
Entonces, si ahora el puntero X en posición 3 00:02:09
Cambia el interno a 7 00:02:13
O sea, el puntero X llega a esto 00:02:17
Vas a la zona 3 y modifica este 4 00:02:19
Y escribe 7 00:02:22
Lo está modificando en el array 00:02:23
Lo que quiere decir que Y de 3 00:02:26
También contendrá 7 00:02:29
O sea que los arrays no se copian así, un int se copia así, int x es igual a 3, int y es igual a x, he creado dos zonas de memoria separadas, los tres valen 3, si cambio x, no cambio y. 00:02:32
Ahora voy, ¿eh? Con enteros. Si yo hago int x es igual a 3, creo una zona de memoria que tiene solo int, que se llama x y que tiene dentro 3. 00:02:52
ahora hago int, y es igual a x 00:03:17
lo que estoy haciendo es crearme otra zona de memoria 00:03:22
que se llama y, que contiene int 00:03:26
y que tendrá aquí dentro el valor actual de x, o sea 3 00:03:29
si ahora hago x es igual a 7 00:03:33
esto se machaca y se pone un 7 00:03:37
y si ahora digo imprime y 00:03:42
me imprimirá 3 00:03:47
porque son dos trozos 00:03:50
de memorias distintos 00:03:55
¿se entiende esto? 00:03:56
todos los tipos primitivos 00:03:59
funcionan así 00:04:01
int, float 00:04:02
float, double 00:04:05
char 00:04:07
boolean 00:04:09
así 00:04:10
ahora, con los arrays 00:04:11
es distinto 00:04:16
cuando yo hago 00:04:17
int 00:04:20
array 00:04:22
es igual a algo 00:04:26
lo que estoy haciendo es crearme 00:04:28
una variable que se llama x 00:04:31
de tipo 00:04:33
no lo sé, de tipo puntero 00:04:34
¿vale? que en realidad 00:04:37
lo que tiene es un puntero 00:04:39
a una zona de memoria 00:04:41
y en esta zona de memoria 00:04:42
está mi array 00:04:44
con sus posiciones 00:04:45
0, 1, 2 y 3 00:04:49
cuando hago int 00:04:51
esta cosa aquí 00:04:55
y es igual a x 00:04:58
me creo también otro trozo de memoria 00:05:00
de tipo que se yo 00:05:03
que se llama y 00:05:05
y lo que tiene es el mismo valor que esto 00:05:07
y el mismo valor de esto es el mismo puntero 00:05:11
de la misma zona de memoria 00:05:13
¿se entiende? 00:05:14
entonces cuando ahora hago x 00:05:18
de 1 es igual a 9 00:05:20
quiere decir que pongo 9 aquí dentro 00:05:24
y cuando ahora hago siso 00:05:28
de y de 1 00:05:32
y apunta esta cosa aquí, voy a la 1 00:05:36
y escribo 9, ¿se entiende? 00:05:43
o sea que, repito 00:05:48
los arrays no se copian así 00:05:52
Esto no copia array 00:05:56
Esto hace dos referencias al mismo array 00:05:58
Por ejemplo, me puede servir para recorrer el array de dos formas distintas 00:06:01
No lo sé 00:06:08
Estoy dando dos nombres al mismo objeto 00:06:08
Todos los objetos funcionan así 00:06:12
Los objetos funcionan por referencia 00:06:15
Los tipos primitivos funcionan por valor 00:06:17
Por copia de valor 00:06:20
¿Cómo duplicas un objeto? 00:06:21
No tengo ni idea porque no sé qué es un objeto 00:06:25
¿Qué es un objeto? Ni idea 00:06:27
Pero sí que sé que existen los arrays. Entonces, ¿cómo copio un array? Fíjate tú. Es lo que estamos viendo. Copia de un array. Lo que no se hace es copiarlo así. Esto no copia el array. 00:06:29
¿Queda claro a todos que esto no es una copia del array? ¿Que estas dos cosas se quedan vinculadas entre ellas y si modifico uno estoy modificando también la otra? 00:06:44
¿Porque las dos cosas no son separadas, son el mismo objeto referenciado por dos variables distintas? 00:06:53
Esto será particularmente útil cuando en un futuro veremos lo que se llama el paso por referencia. 00:07:04
Paso un parámetro a un método 00:07:09
Y lo que hace el método sobre este objeto que le he pasado 00:07:12
Se verá también en el método que lo llama 00:07:16
Entonces, ¿cómo se hace? 00:07:18
Pues lo que se hace es lo siguiente 00:07:23
Para copiar un array 00:07:25
Lo que tengo que hacer es crearme otro array del mismo tamaño 00:07:30
Tengo mi array, creo otro array vacío del mismo tamaño 00:07:35
Y a este punto, celda por celda, voy a copiar lo que estaba en el viejo array en el nuevo 00:07:40
¿Cómo se hace? 00:07:49
Tengo mi array 00:07:52
Se ve algo 00:07:53
Tengo mi array 00:07:55
He perdido mi array 00:07:59
Lo tenía 00:08:05
Tengo mi array otra vez, tercera vez 00:08:06
La tercera vez la vencía 00:08:08
Creo un nuevo array 00:08:09
Nuevo 00:08:11
Este es un objeto distinto 00:08:12
no son el mismo, de hecho esto tiene 1, 2, 3, 4, 5 00:08:14
y este no tiene nada 00:08:18
tendrá todo null dentro 00:08:19
y ahora con un for 00:08:21
voy a mirar 00:08:24
todas las posiciones de este de aquí 00:08:25
y lo que voy a hacer 00:08:28
es copiármelo 00:08:29
de hecho 00:08:30
este de aquí no debería ser 5 00:08:36
debería ser x.length 00:08:38
me hago un array con los mismos números 00:08:41
posiciones de este de aquí 00:08:45
Luego recorro este array de aquí y cada uno de los elementos los copio en este nuevo elemento 00:08:46
Gráficamente, me creo un array con varias cosas 00:08:52
Vale, fenomenal 00:08:57
Me creo un nuevo array Y de 5 posiciones 00:08:58
Es este de aquí, veis que está vacío 00:09:02
Y ahora empiezo desde Y0 hasta YX.length 00:09:04
Y pillo 1 y lo copio aquí 00:09:10
Pillo 2 y lo copio aquí 00:09:12
Pillo 3 y lo copio aquí 00:09:14
pillo 4, lo copio aquí, pillo 5, lo copio aquí 00:09:16
y ahora tengo dos arrays que son 00:09:19
dos posiciones de memoria completamente separadas 00:09:22
que si modifico uno 00:09:25
este de aquí, no se está modificando 00:09:27
el otro, porque son completamente separados 00:09:31
se ve 00:09:34
si modifico uno, el otro se queda igual 00:09:41
porque ahora los dos punteros no apuntan 00:09:46
a la misma zona de memoria, entonces los cambios de uno se ven en el otro, 00:09:50
sino a zonas de memoria distintas, entonces los cambios que hago aquí 00:09:54
no se reflejarán aquí. A menos que no lo haga yo 00:09:57
explícitamente. Si ahora yo hago un i de 3 igual a 7, 00:10:02
pues modificará el otro. ¿Dudas? 00:10:06
¿A raíz multidimensionales os interesan? ¿For? ¿Por qué? 00:10:12
¿Por qué estáis aprendiendo los for? Hacedlo vosotros. 00:10:27
¿Hay algunos métodos perdidos en el multiverso que me permiten copiar un array? 00:10:32
Probablemente. 00:10:38
Probablemente, porque no es una cosa que hemos inventado hoy en clase, sino que es una cosa que se usa bastante comúnmente. 00:10:39
Por lo tanto, sí. 00:10:45
¿Y cuándo lo usaréis vosotros? 00:10:47
Pues esto vosotros lo usaréis cuando tendréis un array de cinco posiciones y el usuario os pone seis palabras. 00:10:49
Pero no quiero hacer spoiler con lo divertido que es eso cuando lo encontrare 00:11:00
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
17
Fecha:
29 de octubre de 2024 - 11:08
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
11′ 08″
Relación de aspecto:
16:10 El estándar usado por los portátiles de 15,4" y algunos otros, es ancho como el 16:9.
Resolución:
1152x720 píxeles
Tamaño:
27.20 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid