Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2015, 18:57
Avatar de alemar10
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();