Autor
|
Tema: Matrices: ¿se pueden asignar? (Leído 5,921 veces)
|
reygecko
Desconectado
Mensajes: 26
|
Seguramente estoy preguntando una tontería, pero he googleado en busca de respuestas y no he encontrado nada, así que ahí va mi pregunta:
¿Es posible duplicar una matriz bidimensional mediante una asignación (por ejemplo, del tipo matriz1 = matriz2) o es necesario copiar uno a uno todos sus valores de una matriz a otra?
No sé si queda claro lo que estoy preguntando, espero que sí.
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
Puedes probarlo tú mismo, haz la prueba y mira a ver qué pasa
|
|
|
En línea
|
|
|
|
reygecko
Desconectado
Mensajes: 26
|
Bueno, eso ya lo había intentado. Pero tengo este error: Uploaded with ImageShack.us
|
|
|
En línea
|
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
Respecto a la pregunta : cuando tienes una matriz (p.e: int matriz[][]) simplemente tu puedes hacer int matriz2[][] = matriz. De este modo NO ESTAS DUPLICANDO LA MATRIZ, sino que le estás asignando una referencia, es decir, las 2 variables apuntarían a la misma matriz.
Respecto a la imagen, el error que te da porque pones los [][], esos corchetes solo se ponen para que dentro pongas números, que sirven para indicar el desplazamiento que se le ha de aplicar a la direccion base de la variable.
En definitiva, si quieres duplicar una matriz, basta con crear otra del mismo tipo (int matriz2[][] por ejemplo) y recorrer la original asignando cada valor a la nueva
|
|
|
En línea
|
|
|
|
reygecko
Desconectado
Mensajes: 26
|
Muchas gracias por tu ayuda y por el detalle de tu explicación, Oblivi0n. Ahora entiendo todo mucho mejor. ¿Serías, por favor, tan amable de explicarme qué significa o qué consecuencias tendría el nuevo error/aviso que me aparece al aplicar el consejo que me has dado? (Por si te sirve de orientación, pretendo que la matriz introducida por referencia modifique a la matriz declarada en la clase "Tablero", creo que he seguido bien tus indicaciones) Te adjunto la captura: P.D.- Siento si alguien piensa que mis preguntas son estúpidas, pero estoy aprendiendo por mí mismo y me suelo atascar en cosas que (seguro) son muy sencillas. Siempre busco una respuesta en Google antes de preguntar, pero no siempre la encuentro. Gracias de nuevo a todos quienes ayudáis desinteresadamente a los novatos como yo.
|
|
|
En línea
|
|
|
|
1mpuls0
Desconectado
Mensajes: 1.186
|
Hola. Es muy importante lo que dice Oblivi0n. De este modo NO ESTAS DUPLICANDO LA MATRIZ, sino que le estás asignando una referencia, es decir, las 2 variables apuntarían a la misma matriz.
Mira el siguiente ejemplo. public class TestArray { public static void main (String[] args ) { new TestArray(); } public TestArray() { int array1[]={1,2,3}; int array2[]=new int[array1.length]; array2=array1; System. out. println("array1[0]: "+array1 [0]); System. out. println("array2[0]: "+array2 [0]); array1[0]=4; //Modificar el indice 0 de array1 System. out. println("array1[0]: "+array1 [0]); System. out. println("array2[0]: "+array2 [0]); } }
Lo mejor sería copiar los elementos del arreglo. Para esto hay dos formas. Tomando como ejemplo un arreglo unidimensional. //Método 1 for (int x=0;x<array1.length;x++) array2[x] = array1[x]; //Método 2 System. arraycopy(array1, 0,array2, 0,array1. length);
Saludos.
|
|
« Última modificación: 27 Diciembre 2012, 17:53 pm por Darhius »
|
En línea
|
abc
|
|
|
reygecko
Desconectado
Mensajes: 26
|
Gracias por el ejemplo, Darhius. Entre la explicación de Oblivi0n y tus ejemplos, ahora lo entiendo perfectamente. Muchas gracias a todos.
|
|
|
En línea
|
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
Ya que queda explicado el problema, como última puntilla, el error que te dá es porque estas llamando igual a una variable local que a un atributo de clase (las variables de arriba del todo vamos). Recuerda que las variables siempre deben de tener nombres diferentes de los atributos, es decir: Imagina que tienes n atributos ( puedes llamarlas fields en ingles o variables de clase ), que se llamana atributo1,atributo2,...,atributonen ningún metodo de esa clase puedes volver a utilizar ese nombre, porque ese es global a la clase. Sin embargo, si yo tengo un metodo, por ejemplo la suma int suma(int x, int y){ return x+y; }
nadie te quitara de utilizar esos mismos nombres en otro metodo, por ejemplo: int resta(int x, int y){ return x-y; }
Dado que estos nombres son locales, es decir, una vez "muerto" el metodo, esos nombres desaparecen, al contrario que en los atributos de clase, que permanecen durante todo el tiempo de ejecución de la clase. Y finalmente, perdón por la chapa que doy xD
|
|
|
En línea
|
|
|
|
reygecko
Desconectado
Mensajes: 26
|
No me pidas perdón por explicarme las cosas, ¡¡faltaría más!! No sé si seré capaz de terminar a tiempo el proyecto que estoy haciendo, pero al menos esto está despertando mi curiosidad por Java. Y eso es por la gente que me está ayudando, así que en serio, muchas gracias, aprendo con cada cosa que leo por aquí. Un saludete.
|
|
|
En línea
|
|
|
|
|
|