我试图将两个节点链接在一起。当n
添加s
作为链接时,s
也应该更新以添加n
作为链接。但是代码调用自身并陷入无限循环,然后溢出。如何让节点相互分配,但不能递归分配自己?
public class Node {
Set<Node> connections = new HashSet<Node>();
public static void main(String args[]) {
Node n = new Node();
Node s = new Node();
n.addNode(s);
}
public Node() {
}
public void addNode(Node newNode) {
connections.add(newNode);
newNode.addNode(this);
}
}
更新:我添加了此代码,让方法调用另一个setter
方法。
public void addNode(Node newNode) {
connections.add(newNode);
newNode.addSingleNode(this);
}
protected void addSingleNode(Node newNode) {
connections.add(newNode);
}
}
答案 0 :(得分:4)
不要为此使用递归,并且您不会遇到问题。
public void addNode(Node newNode) {
connections.add(newNode);
newNode.connections.add(this);
}
即使connections
是私有的,也允许这样做,因为对字段和方法的访问是基于每个类控制的,而不是基于每个对象的。
答案 1 :(得分:2)
您可以直接访问其他节点成员:
public void addNode(Node newNode) {
connections.add(newNode);
newNode.connections.add(this);
}
一种可以说是“更清洁”的方法是将这种“逻辑”封装在一个方法中:
private void addConnection(Node newConnection) {
connections.add(newConnection);
}
public void addNode(Node newNode) {
addConnection(newNode);
newNode.addConnection(this);
}