Problema ao instanciar uma nova classe de dentro dela mesma

2 respostas
R

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;

<a href="//System.out.print">//System.out.print</a>("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();

}

*/

}

}

:?

2 Respostas

F

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;

F

“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;

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…

Criado 29 de outubro de 2003
Ultima resposta 29 de out. de 2003
Respostas 2
Participantes 3