2011-04-19 14 views
1

私は、ユーザーとその位置のリスト(携帯電話アプリ)を取得するこの関数を作成し、正しい値をハッシュマップ(ret.put(...))に貼り付けますが、マップの値が誤ったユーザーID 0および場所0,0に設定されています。私は、Javaがfmsgを削除しているように思えます.fmsgは、マップに配置したUserIDとLocationを削除しています。皆さんはどう思いますか?ハッシュマップの値が無効になる

public HashMap<UserID, Location> getFriendsLocations(ArrayList<UserID> friends) { 
     MessageHdr hdr = new MessageHdr(sock); 
     hdr.len = 2; 
     hdr.id = MessageID.FRIENDS.id; 
      //Transmit the list of users' we are interested in 
     for(UserID u : friends) { 
      if(!hdr.send() || !u.send()) 
       return null;    
     } 
      //Now, start receiving responses from the server. 
     HashMap<UserID, Location> ret = new HashMap<UserID, Location>(); 
     FriendsMsg fmsg = new FriendsMsg(sock); 
     for(int i = 0; i < friends.size(); i++) { 
      if(fmsg.recv()) 
       ret.put(fmsg.uid, fmsg.loc); 
     } 
     return ret; 
    } 
+0

私の間違いは、各友達に同じオブジェクトを再利用していたことです。 getHashとequals関数を自分自身で定義することはできません。私がUserIDとLocationsを0にしたのは、recvへのすべての呼び出しの間にFriendMsgがリセットされるからです。 – mamidon

答えて

3

おそらくあなたUserIDが可変であり、道の変化はそのハッシュコードを変更すること、および/または行動に等しいです。この方法で、HashMapを完全に吹き飛ばします。

1

Javaに責任を負わないでください。ここに表示されているのは、構造 やUserIDやLocationの使用方法が何であるかを示すものではありません。 fmsg.recvは、()は、おそらく(あなたがFriendsMsg構造を再利用しているだけのように)それらを表し 構造を再利用している

+0

実際には、fmsgの宣言をループに移すだけでよいと思いますか?そして私はxD – mamidon

+0

という仮説を立てて、結果を変えるかもしれないし、変えないかもしれない。 fmsg.recv()が何をしているかを知る必要があります。 – ddyer

0

あなたが与えたコードスニペットが不完全であるため、あなたのコードに何が問題なのかを言うのは非常に難しいです。私たちはあなたのデータ構造(FriendMsg、ArrayListの友人など)とサーバーから受け取ったデータに関する多くの情報を持っていません。ちょうどあなたに言うと、エラーはJavaまたはHashMapにはなりません。あなたは正しいデータを受け取っていることを確認する必要があります。

関連する問題