我正在尝试从一个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()方法工作得很好,不知道如何进行投票或设置评论作为答案。
答案 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
作为键,则需要实现两种方法:
boolean equals(Object other)
int hashCode()