Bom dia,
Criei uma classe chamada Puzzle, e dentro dela eu tenho um método chamado getChildren() que cria novas instancias desta mesma classe com uma alteração no atributo board[] das classes que estou instanciando, mas quando faço isso o atributo board[] da minha classe corrente também está sendo alterado.
Porque acontece isso?
O correto não seria essas novas instancias serem criandas deixando minha classe corrente inalterada?
Por favor me ajudem nessa.
Obrigado,
Rodrigo Zampieri Castilho
Segue abaixo minha classe Puzzle e uma classe para Teste:
// Puzzle.java
import java.util.*;
public class Puzzle
{
// Atributos privados
private char[] board;
private Puzzle parent;
private int value;
private int pathValue;
// Constantes publicas
public static final char BLANK = '-';
public static final char RED = 'V';
public static final char WHITE = 'B';
// Construtores
public Puzzle(String s)
{
board = new char[s.length()];
for (int i = 0; i < board.length; i++)
board[i] = s.charAt(i);
parent = null;
}
public Puzzle(String s, Puzzle p)
{
board = new char[s.length()];
for (int i = 0; i < board.length; i++)
board[i] = s.charAt(i);
parent = p;
}
// Métodos Privados
private int getBlank()
{
for (int i = 0; i < board.length; i++)
if (board[i] == BLANK)
return i;
return -1;
}
private char[] getBoardArray()
{
return board;
}
private String getBoardString()
{
String r = new String();;
for (int i = 0; i < board.length; i++)
r += board[i];
return r;
}
private String getBoardString(char[] c)
{
String r = new String();
for (int i = 0; i < c.length; i++)
r += c[i];
return r;
}
// Métodos Publicos
public Vector getChildren()
{
Vector r = new Vector();
for (int i = 0; i < board.length; i++)
{
System.out.println("Before: " + getBoardString());
if (i != getBlank())
{
char[] c = getBoardArray();
c[getBlank()] = c[i];
c[i] = BLANK;
r.add(new Puzzle(getBoardString(c), this));
}
System.out.println("After : " + getBoardString());
}
return r;
}
public int getSize()
{
return board.length;
}
public void show()
{
for (int i = 0; i < board.length; i++)
System.out.print(board[i]);
System.out.println();
}
}
// Teste.java
import java.util.*;
public class Teste
{
public static void main(String args[])
{
Puzzle p = new Puzzle("VBBV-BBVV");
Puzzle c;
//System.out.print("show(): "); p.show();
Vector v = new Vector();
v = p.getChildren();
/*
for (int i = 0; i < v.size(); i++)
{
c = (Puzzle)v.get(i);
System.out.print("Children: "); c.show();
}
*/
}
}
:?
