在Java中传递对象需要帮助
更新: 我修改了hashCode,现在好一点了。 :)但问题仍然存在... :(在Java中传递对象需要帮助
左右,而且修改了我的方法太:
private Node getMinNode()
{
int min = 9999999; //value
Node minNode = new Node(); //key,index
for (Node key : this.distances.keySet()) {
int minOfNode= this.distances.get(key);
System.out.println("Key "+ key +", Value = " + minOfNode);
if(minOfNode<min)
{
min= minOfNode;
minNode= key;
System.out.println("Key minNode = " + minNode + ", Value minNode = " + minOfNode);
}
}
return minNode;
}
并有输出:(空格(,)中的行会空字符),这是不是终点......这仅仅是第几行......
Key 66601, 3546492, 3546493, 228, f, Value = 9999999
Key 77393, 3628185, 3628186, 64, t, Value = 9999999
Key 0, 0, 0, 0, , Value = 0
Key minNode = 0, 0, 0, 0, , Value minNode = 0
Key 66601, 3546492, 3546493, 228, f, Value = 9999999
Key 77393, 3628185, 3628186, 64, t, Value = 9999999
(注:与“键0,0,0,0,值= 0处的元素'确实存在,这是startNode) 在该构造函数的attribs初始化零,我知道, 所以我的主要问题是,为什么会发生这种情况?他们通过if(),但在if()他们不是 通过rig我希望它更清楚我的问题是什么。 :)
首先存储min和minNode - 是不是很好的做法,他们是没有必要的。
接下来,将整个Map传递给方法比使用全局变量要好(如果你真的不需要它,cource会更好)
Map.keySet() - 返回键列表,好像你需要Map.getEntrySet )方法,检索所有 '节点'(在通常地图,他们被称为输入)
你的代码应该是这样的:
private Map.Entry getMinNode(Map<String, Integer> distances) {
Map.Entry minNode = null;
for (Map.Entry node : distances.entrySet()) {
System.out.println("Key = " + node.getKey()+ ", Value = " + node.getValue());
if (minNode == null || node.getValue() < minNode.getValue()) {
minNode = node;
}
}
return minNode;
}
你应该看看的JavaDoc http://docs.oracle.com/javase/6/docs/api/java/util/Map.html
感谢您的回复!这将是一个简单的MinSearch,但我需要获得属于最低int值的Node(仅限Node)。但我不明白当我做了'节点键'的另一个实例像Node index = key;这很好,但是当我通过if()中的'Node key'传递它时,像minNode = key;它不起作用,并打印出愚蠢的东西。为什么会发生? – Thomas 2013-02-12 14:04:02
首先,@StrekoZ部分是正确的。如果迭代entrySet,则不需要调用get(key)
。
但我不确定是什么原因导致您的问题。几个理论:
存储在地图中的距离值确实为零;即无论创建条目是什么问题。
您的
Key
类没有正确执行equals(Object)
和hashCode()
。你
Key
对象是可变的,事情是变异他们正在改变他们的哈希码值,而他们在地图上的方式。
最后两个可能互为因果键键集中显示出来,但会丢失,当你使用它们做一个get
。
UPDATE - 在你的更新问题的输出是我的第一个理论最一致的;即地图中的距离值不正确。
'key'和'minOfNode'在循环中没有改变,你确定两个'println'不打印相同的消息吗?你能告诉我们输出吗?另外,您可能需要稍微修改第二个'println',以便更好地区分它们。 – Cephalopod 2013-02-12 13:40:25
我错了,它打印在第一个println中:Key = 0,0,0,0,Value = 9999999,数百行长...,它也不会在if()中输入 – Thomas 2013-02-12 13:50:10
更新你的问题。如果您需要帮助,您必须提供更多信息。 – Cephalopod 2013-02-12 14:20:43