Foros del Web » Programación para mayores de 30 ;) » Java »

Como clonar matrices de objetos

Estas en el tema de Como clonar matrices de objetos en el foro de Java en Foros del Web. Hola buenas, me gustaría que me ayudaran con este problema, la cuestión es que tengo que clonar una superficie compuesta por una matriz de células, ...
  #1 (permalink)  
Antiguo 12/11/2015, 18:57
Avatar de alemar10  
Fecha de Ingreso: noviembre-2015
Ubicación: Madrid
Mensajes: 1
Antigüedad: 8 años, 5 meses
Puntos: 0
Como clonar matrices de objetos

Hola buenas, me gustaría que me ayudaran con este problema, la cuestión es que tengo que clonar una superficie compuesta por una matriz de células, como vienen en las imágenes y en principio al mostrar la original y la copia parece estar bien, pero al modificar la original la copia también se modifica, cosa que no quiero, mi idea es que la copia no tenga cambios mientras recorro y modifico la original. Llevo mucho dándole vueltas y me parece que el código esta bien, lo único que dudo que este bien es la forma de clonar esa superficie, si me pueden ayudar seria genial. muchas gracias.
---------
public class Celula implements Cloneable {

static final int MAX_PASOS_SIN_MOVER = 1;
static final int PASOS_REPRODUCCION = 2;
private int pasosDados;
private int pasosSinMov;

//constructor de una celula con 0 pasos dados y 0 pasos sin moverse
public Celula() {
setPasosDados(0);
setPasosSinMov(0);
}
public Object clone(){
Object copia=null;
try{
copia=super.clone();

}catch(CloneNotSupportedException ex){
System.out.println("no se puede duplicar");
}
return copia;
}
---------
public class Superficie implements Cloneable {

private Celula[][] tablero;
private int filas;
private int cols;

public Superficie(int nf, int nc) {
filas = nf;
cols = nc;
tablero = new Celula[filas][cols];
}
public Superficie clone(){
Superficie copia=null;
try{
copia=(Superficie)super.clone();
copia.tablero = new Celula[filas][cols];

}catch(CloneNotSupportedException ex){
System.out.println("no se puede duplicar");
}
copia.tablero=(Celula[][])tablero.clone();
return copia;
}
private void clonarCelula(int x, int y, int i, int j) {
tablero[i][j] = (Celula) tablero[x][y].clone();
}
------------
public void evoluciona() {
Superficie copia = (Superficie) superficie.clone();
System.out.println("esta es la copia");
copia.mostrarSuperficie();
  #2 (permalink)  
Antiguo 13/11/2015, 03:14
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Como clonar matrices de objetos

Código Java:
Ver original
  1. public Superficie clone(){
  2. Superficie copia=null;
  3. try{
  4. copia=(Superficie)super.clone();
  5. copia.tablero = new Celula[filas][cols];
  6.  
  7. System.out.println("no se puede duplicar");
  8. }
  9. copia.tablero=(Celula[][])tablero.clone();
  10. return copia;
  11. }

No entiendo lo que haces, clonas Superficie creando un array de Celula nueva (todo null) en tablero(copia), pero después te cargas tablero(copia) clonando directamente tablero, que se supone que copiará las Celulas que haya en el original pero sin los datos de pasos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: clonar, matrices, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:18.