Lista estatica

2 respostas
D
pessoal estou com um probleminha e nem sei como vou fzr isso,tenho uma classe grafo ...., ta funcionando,tenho 3 listas,blz qnd executo a classe, na funcao SizeLista() me retorna 6 blz,so q qnd eu executo minha outra classe q pega informacoes dessa classe a funcao SizeLista() me retorna 12, pq ela me retorna minha List lx q é statica,so q todas essas List tem q ser statica pos em execucao posso inserir um ponto e associalo com algum q eu tenha inserido anteriormente na mesma execucao, alguem tem uma sugestao?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; 
import java.util.HashMap;
import java.util.Map;
import java.lang.Object;

public class grafo implements Serializable {
	
	private static final long serialVersionUID = 1L;
	public static Map<String,Double> p = new HashMap<String,Double>();
	public static List<String> lx = new ArrayList<String>();
	public static List<String> ly = new ArrayList<String>();
	public static List<String> tab = new ArrayList<String>();
	public int k;
	public boolean liga;
	public String combo[];
	public grafo()
	 {
	 	 p.put("A",235.000);
		 p.put("B",321.000);
		 p.put("C",87.000);
		 p.put("D",102.000);
		 p.put("E",46.500);
		 p.put("F",647.000);
		 
		 lx.add("A");
		 lx.add("B");
		 lx.add("C");
		 lx.add("D");
		 lx.add("E");
		 lx.add("F");
		 
		 ly.add("A");
		 ly.add("B");
		 ly.add("C");
		 ly.add("D");
		 ly.add("E");
		 ly.add("F");
	
   	  tab.add(ly.get(0) +","+ lx.get(2));
   	  tab.add(ly.get(1) +","+ lx.get(2));
   	  tab.add(ly.get(1) +","+ lx.get(5));
   	  tab.add(ly.get(2) +","+ lx.get(0));
   	  tab.add(ly.get(2) +","+ lx.get(1));
   	  tab.add(ly.get(2) +","+ lx.get(3));
   	  tab.add(ly.get(3) +","+ lx.get(2));
   	  tab.add(ly.get(3) +","+ lx.get(4));
   	  tab.add(ly.get(4) +","+ lx.get(3));
   	  tab.add(ly.get(4) +","+ lx.get(5));
   	  tab.add(ly.get(5) +","+ lx.get(1));
   	  tab.add(ly.get(5) +","+ lx.get(4));
   	 
	 }
	public List MostraGrafo()
	{
		return tab;
	}	
	public int sizeLista()
	{
		return lx.size();
	} 	 
	public List lista()
	{
		return lx;
	}	

   public boolean Ligacoes(String y,String x)
   { 
   	 String z = y +","+ x;
   	 k = 0;
   	 for(int i=0;i < tab.size();i++)
   	  {
   	  	if(z.equals(tab.get(i)))
   	  	k = 1;
   	  }
   	 if(k > 0)
   	  return true;
   	 else
   	  return false;	 
   }
   
   public void AdicionaVertice(String x,Double y,String z)
   {
	 p.put(x,y);
	 lx.add(x);
	 ly.add(x);
	 tab.add(x+","+z);	 
   }
   public void RemovoVertice(String x)
   {
   	 p.remove(x);
   }   
 
  
   public static void main(String args[])
   {
   	 grafo g = new grafo();
   	 System.out.println(g.sizeLista());//g.Ligacoes("A","C"));
   }
  
}

2 Respostas

H

Nao sei se entendi bem, mas o codigo que esta no construtor é o codigo que inicializa as listas staticas. o problema é que a cada instancia que vc cria ele incrementa as informaçoes da lista statica dobrando os dados. assim quando vc cria a primeir instancia ele tem o valor size = 6 na segunta instancia size = 12, na terceira instancia 18, isso por que para cada instancia ele adiciona os valores “de incializaçao novamente”.

se for isso, acredito que vc pode usar um bloco static pra iniciarlizar as listas estaticas. o bloco static é executado uma unica vez independente de quantas instancias da classe vc criar. ele é perfeito prar fazer essas atividades de inicializaçao de variaveis static.

public Classe 
{
    public static int instancesClass;
   
    static 
    {
          Classe.instancesClass = 100; //inicializa a variavel
    }
  
    public Classe()
    {
         Classe.instancesClass++;
    }
}

com esse codigo de exemplo vc pode criar varias instancias e perceberá que a inicialização ocorre uma unica vez. Assim para primeira instancia vc terá o valor 101 para Classe.instancesClass e na segunda instancia terá o valor 102… que só é incrementado pelo construtor

espero que isso ajude…

D

vlw ajudou e muito

Criado 29 de maio de 2007
Ultima resposta 30 de mai. de 2007
Respostas 2
Participantes 2