Olá amigos, tenho uma matriz chamada aux_distancia que é um clone de outra matriz chamada “distancia”.
O problema é o seguinte: Criei a matriz aux_distancia para poder alterar alguns valores a medida em que ele é acessada. Entretanto, a alteração que faço na matriz aux_distancia, ocorre também na matriz distancia que está em outra classe, alterando assim seus valores originais, e isso não posso deixar que aconteça. O que devo fazer nesse caso?
segue o trecho da matriz:
aux_distancia = new ArrayList<ArrayList>((ArrayList<ArrayList>) AG_PMPC_Matriz_Distancia.distancia.clone());
Desde já obrigado!
Você está clonando a lista, mas os objetos não.
Ao invés de clonar a lista, use por exemplo um for e clone cada objeto da lista.
package teste;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Matriz implements Cloneable {
String info;
public Matriz(String valor) {
this.info = valor;
}
public String getInfo() {
return info;
}
public static void main(String[] args) {
Matriz[][] matriz = {
{new Matriz("a"), new Matriz("b"), new Matriz("c")},
{new Matriz("d"), new Matriz("e"), new Matriz("f")}};
Matriz[][] auxiliar = new Matriz[matriz.length][matriz[0].length];
try {
for (int linha = 0; linha < matriz.length; linha++) {
for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
auxiliar[linha][coluna] = (Matriz) matriz[linha][coluna].clone();
auxiliar[linha][coluna].info += " auxiliar";
System.out.print("[" + matriz[linha][coluna].info + "] [" + auxiliar[linha][coluna].info + "]");
}
System.out.println("");
}
} catch (CloneNotSupportedException ex) {
Logger.getLogger(Matriz.class.getName()).log(Level.SEVERE, null, ex);
}
}
}