Problema ao instanciar uma nova classe de dentro dela mesma

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();
}
*/
}
}
:?

isso ocorre porque as variaveis nao sao estaticas, variaveis nao estaticas tem uma copia independente para cada instanciacao da classe, o seu problema poderia ser resolvido apenas declarendo as variaveis como static EX:

public static int x;

[quote=“Felipe”]isso ocorre porque as variaveis nao sao estaticas, variaveis nao estaticas tem uma copia independente para cada instanciacao da classe, o seu problema poderia ser resolvido apenas declarendo as variaveis como static EX:

public static int x;[/quote]

Exato, isso tornaria a variável de “classe”, quer dizer pertence a classe.Quando elá é instanciada, na memória é criado apenas um “atalho” para essa váriavel , sendo que onde que que ela seja mudada, o resultado é unico para todos os métodos e classes que usarem a mesma váriavel…Se na classse x vc colocar ex=3; quando for ver o resultado na classe y expermanece 3…