在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我希望它更清楚我的问题是什么。 :)

+0

'key'和'minOfNode'在循环中没有改变,你确定两个'println'不打印相同的消息吗?你能告诉我们输出吗?另外,您可能需要稍微修改第二个'println',以便更好地区分它们。 – Cephalopod 2013-02-12 13:40:25

+0

我错了,它打印在第一个println中:Key = 0,0,0,0,Value = 9999999,数百行长...,它也不会在if()中输入 – Thomas 2013-02-12 13:50:10

+0

更新你的问题。如果您需要帮助,您必须提供更多信息。 – Cephalopod 2013-02-12 14:20:43

首先存储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

+0

感谢您的回复!这将是一个简单的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 - 在你的更新问题的输出是我的第一个理论最一致的;即地图中的距离值不正确。