【发布时间】:2014-11-30 04:44:39
【问题描述】:
我正在尝试从 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() 方法效果很好,但不知道如何投票或设置评论作为答案。
【问题讨论】:
-
首先,使用 Java 命名约定(类型以大写开头,方法和变量不是)。一目了然很难判断您的某些代码是否使用了静态变量。
-
您的
Ship类是否覆盖.equals()?您可能有不同的对象引用,因此不会从HashMap获取对象。 -
不,它不会覆盖 .equals
-
你能显示 Ship 的来源吗?
-
也可以遍历map的entrySet()。