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();