私は、ユーザーとその位置のリスト(携帯電話アプリ)を取得するこの関数を作成し、正しい値をハッシュマップ(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;
}
私の間違いは、各友達に同じオブジェクトを再利用していたことです。 getHashとequals関数を自分自身で定義することはできません。私がUserIDとLocationsを0にしたのは、recvへのすべての呼び出しの間にFriendMsgがリセットされるからです。 – mamidon