Bom dia,
Criei uma classe chamada Puzzle, e dentro dela eu tenho um método chamado getChildren() que cria novas instancias desta mesma classe baseando-se em seu estado atual, mas quando faço isso, meus atributos da classe corrente são alterados.
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:
import java.util.*;
public class Puzzle
{
// Atributos privados
private char[] board;
private Puzzle parent;
private int value;
private int pathValue;
// Constantes publicas
public final char BLANK = '-';
public final char RED = 'V';
public 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();
Puzzle p;
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;
p = new Puzzle(getBoardString(c), this);
r.add(p);
}
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();
}
}
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();
}
*/
}
}
:?