当对象和值存在时,Java HashMap返回null

时间:2014-11-30 04:44:40

标签: java hashmap

我正在尝试从一个Java游戏的HashMap中获取Point2D.Double。

 public void Undo(){
    if(Moves.size() >=1)
    {
        GW.ClearBoard();
        Ships.clear();
        Move m =Moves.remove(0);
        HashMap<Ship,Point2D.Double> shipMoves = m.getShips();
        for(Ship s: shipMoves.keySet()){
            if(shipMoves.get(s)!= null){
                Point2D.Double pos = shipMoves.get(s);
                String type = s.getType();
                GW.setShipLocation(pos, type);
                s.setPosition(pos.x, pos.y);
                Ships.add(s);
            }
        }
        System.out.println("Undo");
    }
}

从我在eclipse中调试的屏幕截图中可以看出,哈希映射包含key = MasterShip(id = 87)的条目,其值包含Point2D.Double,输入S是id = 87的船只然而程序仍然返回null,我不知道为什么或我能做些什么。我也通过调试器检查了Move类中的值。

更正,会有图像,但显然我还不能发布图像。

编辑

您还可以迭代地图的entrySet()。 - 尼克赫里斯托夫

谢谢你,解决这个问题的entryset()方法工作得很好,不知道如何进行投票或设置评论作为答案。

2 个答案:

答案 0 :(得分:0)

迭代EntrySet

Map
   for(Map.Entry<Ship,Point2D.Double> e : shipMoves.entrySet(){
        if(shipMoves.get(s)!= null){
            Point2D.Double pos = e.getValue();
            String type = s.getType();
            GW.setShipLocation(pos, type);
            s.setPosition(pos.x, pos.y);
            Ships.add(s);
        }
    }

答案 1 :(得分:-1)

如果使用带有对象的HashMap作为键,则需要实现两种方法:

  1. boolean equals(Object other)
  2. int hashCode()
  3. 查看此问题:Creating a hashCode() Method - Java