elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Matrices: ¿se pueden asignar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Matrices: ¿se pueden asignar?  (Leído 4,922 veces)
reygecko

Desconectado Desconectado

Mensajes: 26



Ver Perfil
Matrices: ¿se pueden asignar?
« en: 27 Diciembre 2012, 14:18 pm »

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 Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #1 en: 27 Diciembre 2012, 14:30 pm »

Puedes probarlo tú mismo, haz la prueba y mira a ver qué pasa  ;)


En línea

reygecko

Desconectado Desconectado

Mensajes: 26



Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #2 en: 27 Diciembre 2012, 14:57 pm »

Bueno, eso ya lo había intentado.  Pero tengo este error:



Uploaded with ImageShack.us

En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #3 en: 27 Diciembre 2012, 15:08 pm »

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 Desconectado

Mensajes: 26



Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #4 en: 27 Diciembre 2012, 16:20 pm »

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 Desconectado

Mensajes: 1.186


Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #5 en: 27 Diciembre 2012, 17:44 pm »

Hola.

Es muy importante lo que dice Oblivi0n.

Citar
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.

Código
  1. public class TestArray {
  2.  
  3.    public static void main(String[] args) {
  4.     new TestArray();
  5.    }
  6.  
  7.    public TestArray() {
  8.     int array1[]={1,2,3};
  9.     int array2[]=new int[array1.length];
  10.  
  11.     array2=array1;
  12.  
  13.     System.out.println("array1[0]: "+array1[0]);
  14.     System.out.println("array2[0]: "+array2[0]);
  15.     array1[0]=4; //Modificar el indice 0 de array1
  16.     System.out.println("array1[0]: "+array1[0]);
  17.     System.out.println("array2[0]: "+array2[0]);
  18.    }
  19. }
  20.  

Lo mejor sería copiar los elementos del arreglo. Para esto hay dos formas.

Tomando como ejemplo un arreglo unidimensional.

Código
  1. //Método 1
  2. for (int x=0;x<array1.length;x++)
  3.  array2[x] = array1[x];
  4.  
  5. //Método 2
  6. System.arraycopy(array1,0,array2,0,array1.length);
  7.  

Saludos.
« Última modificación: 27 Diciembre 2012, 17:53 pm por Darhius » En línea

abc
reygecko

Desconectado Desconectado

Mensajes: 26



Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #6 en: 27 Diciembre 2012, 18:02 pm »

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 Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #7 en: 27 Diciembre 2012, 21:45 pm »

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,...,atributon
en 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
Código
  1. int suma(int x, int y){
  2. return x+y;
  3. }
  4.  

nadie te quitara de utilizar esos mismos nombres en otro metodo, por ejemplo:

Código
  1. int resta(int x, int y){
  2. return x-y;
  3. }
  4.  


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 Desconectado

Mensajes: 26



Ver Perfil
Re: Matrices: ¿se pueden asignar?
« Respuesta #8 en: 27 Diciembre 2012, 22:49 pm »

No me pidas perdón por explicarme las cosas, ¡¡faltaría más!!  :D

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
asignar variables en .bat
Scripting
viejari 4 7,108 Último mensaje 31 Mayo 2012, 00:03 am
por viejari
Asignar nombre filas y columna matrices
Java
miguel96 2 3,149 Último mensaje 21 Noviembre 2014, 17:57 pm
por DarK_FirefoX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines