Java - ¿Cómo copio los valores de una matriz en una nueva matriz?

 
Vista:
Imágen de perfil de Omi
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

¿Cómo copio los valores de una matriz en una nueva matriz?

Publicado por Omi (6 intervenciones) el 30/04/2020 11:57:55
Hola, soy nueva programando y me gustaría resolver una duda que tengo.
Quisiera pasar los valores de una matriz ya generada en una matriz vacía.
Por ejemplo:

1
2
3
4
5
6
7
8
9
10
int [ ] [ ] matriz = new int [3] [3];
int [ ] [ ] matrizVacia = null;
 
for(int filas=0; filas<3; filas++) {
     for (int columnas = 0; columnas < 3; columnas++) {
           matriz[filas][columnas] = (int) (Math.random() *9 + 1);
     }
}
 
matrizVacia[ ] [ ] =  matriz [filas] [columnas];
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 2.728
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Cómo copio los valores de una matriz en una nueva matriz?

Publicado por Kabuto (717 intervenciones) el 30/04/2020 18:50:43
Podrías hacer esto:

1
matrizVacia = matriz;

Pero entonces lo que estarías haciendo es "pasar por referencia".
Es decir, sigues teniendo UNA SOLA matriz, pero ahora tiene dos nombres: matriz y matrizVacia.

Entonces si luego haces modificaciones en matrizVacia, esas modificaciones también afectarán a matriz.
Porque, insisto, en realidad es la misma matriz, solo que ahora dispones de dos nombres diferentes para "referirte" a ella.
Por eso se le llama "pasar por referencia"

Se puede comprobar con este código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class CopiarMatriz {
 
	public static void main(String[] args) {
 
		int [ ] [ ] matriz = new int [3] [3];
		int [ ] [ ] matrizVacia = null;
 
		for(int filas=0; filas<3; filas++) {
		     for (int columnas = 0; columnas < 3; columnas++) {
		           matriz[filas][columnas] = (int) (Math.random() *9 + 1);
		     }
		}
 
		matrizVacia =  matriz; //Pasamos por referencia
 
		System.out.println(matriz[0][0]);
		System.out.println(matrizVacia[0][0]);
		matrizVacia[0][0] = 10001;
		System.out.println(matriz[0][0]);
		System.out.println(matrizVacia[0][0]);
 
	}
 
}
Tras pasar por referencia, mostramos el primer elemento de "ambas matrices" (vuelvo a insistir, solo hay una en realidad).
Luego modificamos ese primer valor en una de las matrices.
Y al volver a mostrar el primer elemento de cada una, podemos ver como la modificación ha afectado a "ambas" (solo hay una, perdón, no lo digo más -_-x ).

Esto es lo que vemos en pantalla al ejecutar el código.
1
2
3
4
8
8
10001
10001

Si queremos hacer una copia de verdad, es decir, "pasar valores" y no pasar "referencia", hay que hacerlo de otro modo.
Se puede usar un bucle exactamente igual al que has usado para llenar la matriz principal, solo que dentro lo que haremos será copiar los valores de una matriz a otra.
Importante, eso sí, que matrizVacia, esté inicializada con las mismas dimensiones que la otra matriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class CopiarMatriz {
 
	public static void main(String[] args) {
 
		int [ ] [ ] matriz = new int [3] [3];
		int [ ] [ ] matrizVacia = new int [3] [3];
 
		for(int filas=0; filas<3; filas++) {
		     for (int columnas = 0; columnas < 3; columnas++) {
		           matriz[filas][columnas] = (int) (Math.random() *9 + 1);
		     }
		}
 
		//Copiamos valores mediante bucles
		for(int filas=0; filas<3; filas++) {
		     for (int columnas = 0; columnas < 3; columnas++) {
		           matrizVacia[filas][columnas] = matriz[filas][columnas];
		     }
		}
 
 
		System.out.println(matriz[0][0]);
		System.out.println(matrizVacia[0][0]);
		matrizVacia[0][0] = 10001;
		System.out.println(matriz[0][0]);
		System.out.println(matrizVacia[0][0]);
 
	}
 
}

Si ejecutamos el programa, veremos que ahora la modificación que hacemos en una matriz, no tiene efecto sobre la otra.
Porque ahora SÍ que hay dos matrices, cada una con su propia referencia.
1
2
3
4
4
4
4
10001
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar