Jump to content
Sign in to follow this  
davide92

HashMap fica fazio

Recommended Posts

davide92

Boas noites a todos.

Tenho um programa em Java que está um bocado estranho.

Tenho algo assim

public static boolean Connect(String ip) throws Exception{ 
 boolean connected = true;
 try {
  if (debug == true) {
   System.out.println("Random IP: " + ip);
  }
  SocketAddress sockaddr = new InetSocketAddress(ip, TCP_Port);
  socket = new Socket();
  socket.connect(sockaddr, timeout);
  System.out.println("Successfully connected to " + ip);
  connected = true;
 } catch (UnknownHostException e) {
  System.out.println("Host not found: " + e.getMessage());
  connected = false;
  if (debug == true) {
   System.out.println("IP: " + ip);
  }
 } catch (IOException ioe) {
  System.out.println("I/O Error " + ioe.getMessage());
  connected = false;
  if (debug == true) {
   System.out.println("IP: " + ip);
  }
 }

 if(connected == false){
  return false;
 }else{
  PrintStream output = new PrintStream(socket.getOutputStream(), true);
  output.println("table");

  ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  table.clear();
  table = (HashMap<String, Double>) ois.readObject();

  printMap(sortHashMapByValues(table));
  return true;
 }
}

Onde tenho previamente declarado acima:

private static HashMap<String, Double> table = new HashMap<String, Double>();

E nesta parte eu recebo de uma HashMap:

table = (HashMap<String, Double>) ois.readObject();

O problema é quando esse método acaba e continua o próxima onde eu vou usar esse HashMap que estranhamente está vazio :/

O que poderá ser ?

PS: Para chegar a essa função é feita através destes passos Main -> Connection -> Connect

Share this post


Link to post
Share on other sites
HappyHippyHippo

bem ... vejo 3 possíveis problemas

- não estás a enviar um HashMap com valores

- tens a função sortHashMapByValues mal implementada

- tens a função printMap mal implementada


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davide92

Estou a receber a HashMap com os valores desejados pois já fiz debug.

A sort apenas faz o sort e serve puramente para usar a do printMap. Basicamente são apenas para ter o meu "debug"

Como podes ver a printMap não é nada de especial:

public static void printMap(Map<String, Double> map) {
 for (Entry<String, Double> entry : map.entrySet()) {
  System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
 }
}

Edited by davide92

Share this post


Link to post
Share on other sites
HappyHippyHippo

como fizeste o debug para verificar que estás a receber os valores desejados ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davide92

Usando o debug do eclipse, e também pelo facto que se ele imprime é porque guardou os dados naquela variável e sendo uma variável "geral" não percebo o porque de ela perder os valores...

Share this post


Link to post
Share on other sites
HappyHippyHippo

Usando o debug do eclipse

então estás a dizer que estás a ver a HashMap com os valores após a atribuição do ObjectInputStream, certo ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davide92

O meu output é este:

Random IP: 192.168.1.99

Successfully connected to 192.168.1.99

Key : 192.168.1.79 Value : 0.2

Key : 192.168.30.67 Value : 0.5

Key : 169.254.251.144 Value : 2.2

Key : 172.18.26.254 Value : 2.2

Key : 192.168.1.105 Value : 2.5

Key : 192.168.1.99 Value : 2.5

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.rangeCheck(Unknown Source)

at java.util.ArrayList.get(Unknown Source)

at cd.EchoClient2.Check_Load(EchoClient2.java:207)

at cd.EchoClient2.Connection(EchoClient2.java:155)

at cd.EchoClient2.main(EchoClient2.java:47)

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que estás a dizer não tem sentido nenhum

primeiro dizes que o HashMap está vazio, agora apresentas os valores do HashMap e dizes que o que aconteceu foi na realidade uma excepção ? ainda por cima não dizes que linha é a 207


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davide92

Eu disse anteriormente que recebia "Estou a receber a HashMap com os valores desejados pois já fiz debug."

Já sei qual era o problema, tinha a haver com o método sort. Ele retornava-me uma LinkedHashMap e apagava-me a outra.

Share this post


Link to post
Share on other sites
HappyHippyHippo

O problema é quando esse método acaba e continua o próxima onde eu vou usar esse HashMap que estranhamente está vazio :/

será que não sei ler ? não estará esta frase no teu primeiro post ?

Já sei qual era o problema, tinha a haver com o método sort. Ele retornava-me uma LinkedHashMap e apagava-me a outra.

- tens a função sortHashMapByValues mal implementada


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davide92

Sim tens razão, pensei que não fosse do sort. Peço desculpa.

Agora deparei-me com outro problema, tenho uma LinkedHashMap e não consigo passar para uma List

Tenho algo deste género mas não faz nada:

List<String> key_list = new ArrayList<String>(SortedMap.keySet());

Já resolvi, meti antes assim:

key_list.addAll(SortedMap.keySet());

Edited by davide92

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.