Java - clonacion matrices

 
Vista:

clonacion matrices

Publicado por Fany (2 intervenciones) el 26/11/2009 12:45:00
Hola, a ver si me podeis ayuda, tengo el siguiente codigo;

******************************************************************************************
// * Si no implementamos Cloneable, obtendremos una excepción
// CloneNotSupportedException del método Object.clone()
public class TipoCasilla implements Cloneable {
private int enlaces_rest;
private String valor;

public TipoCasilla(int enlaces_rest, String dato) {
this.enlaces_rest=enlaces_rest;
this.valor=dato;
}

public int getEnlaces_rest() { return enlaces_rest; }
public void setEnlaces_rest (int enlaces_rest) {this.enlaces_rest=enlaces_rest; }

public String getValor() { return valor; }
public void setValor(String valor) {this.valor=valor; }

// * Método para clonar
// * De protegido pasa a público
public TipoCasilla clone() throws CloneNotSupportedException {
Object o=super.clone();
// * Como ha hecho una copia bit a bit del estado
// es suficiente
return (TipoCasilla)o;
}
}
******************************************************************************************
public class TipoNodo implements Cloneable
{
TipoCasilla[][] tablero;
int nhijos;

public TipoNodo (TipoCasilla[][] tablero) {
this.tablero=tablero;
nhijos=0;
}

public TipoNodo clone() throws CloneNotSupportedException{
TipoNodo obj=null;
try{
obj=(TipoNodo)super.clone();

}catch(CloneNotSupportedException ex){
System.out.println("No se puede duplicar.");
}
obj.tablero=(TipoCasilla[][])obj.tablero.clone();
for(int i=0; i<obj.tablero.length; i++){
obj.tablero[i]=(TipoCasilla[])obj.tablero[i].clone();
}
return obj;
}

public void pintarNodo (TipoNodo n) {
int i, j;
for (i=0; i<2; i++) {
for (j=0; j<2;j++)
System.out.print (n.tablero[i][j].getValor()+ " ");
System.out.println("");
}
}
}
******************************************************************************************
public class principal
{

/*
* Contructor de la clase
*/
public principal () {

}

/*
* inicio del programa
*/
public static void main(String[] a) throws CloneNotSupportedException {
System.out.println ("") ;

TipoCasilla ccc1[][]=new TipoCasilla[2][2];
ccc1[0][0]=new TipoCasilla(2,"4");
ccc1[0][1]=new TipoCasilla(2,"4");
ccc1[1][1]=new TipoCasilla(2,"5");
ccc1[1][0]=new TipoCasilla(2,"4");

TipoNodo n1= new TipoNodo (ccc1);
n1.nhijos=0;

TipoNodo n2=n1.clone();
n2.tablero[1][1].setValor("hh"); //al modificar este valor, me modificar también
// el valor en el tablero del nodo n1 ¿por qué?
n2.nhijos=1; //en cambio la variable nhijos del nodo no la cambia en ambos nodos

n1.pintarNodo(n1);
n2.pintarNodo(n2); //pinta los mismos valores (tableros) para los dos nodos
System.out.println(n1.nhijos +"--"+ n2.nhijos); //bien, pinta distintos valores
}
}

¿Me podeis ayudar con esto? Es que ya estoy desesperada. Ya hice muchas pruebas, e incluso me funciona si en lugar de declarar una matriz TipoCasilla tablero[][] declaro un array TipoCasilla tablero[].

Muchisimas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder