2015-11-13 231 views
0

我需要将另一个对象(例如Class NODE中的对象)中的对象(例如Class DATA中的对象)传递给另一个对象(来自NODE类)? 节点对象是树的节点。树的实现是:JAVA:如何将一个对象内的对象传递给另一个对象?

public class Tree { 

private Node rootElement; 

public Tree() { 
    super(); 
} 

public Node getRootElement() { 
    return this.rootElement; 
} 

public void setRootElement(Node rootElement) { 
    this.rootElement = rootElement; 
} 

,然后节点,我有:

public class Node { 

public MyNode data; 
public List<Node> children; 
public int childNo; 

public Node() { 
    super(); 
} 

public Node(MyNode data) { 
    this(); 
    setData(data); 
} 

public Node(MyNode data, int childNo) { 
    this(); 
    setData(data); 
    this.childNo=childNo; 
} 

public void setChildren(List<Node> children) { 
    this.children = children; 
} 

public void addChild(Node child) { 
    if (children == null) { 
     children = new ArrayList<Node>(); 
    } 
    children.add(child); 
} 

public MyNode getData() { 
    return this.data; 
} 

public void setData(MyNode data) { 
    this.data = data; 
} 

和MYNODE我:

public class MyNode { 

public String ID = new String(); //UUID 
protected String parentID; 
MyNodesDATA d = new MyNodesDATA(); 


public MyNode() { 
    setID(UUID.randomUUID().toString()); 
} 

public MyNodesDATA getMyNodesDATA() { 
    return this.MyNodesDATA ; 
} 

public void setData(MyNodesDATA d) { 
    this.MyNodesDATA = data; 
} 

,这是MyNodesDATA

public class MyNodesDATA { 
int iD; 
String name; 
} 

所以树的每个节点都有一个M的对象yNode类型,每个MyNode对象都有一个数据作为MyNodesDATA类中的一个对象。我已经使用一些预定义的递归方法初始化了树,并且使用了一些递归方法,这些方法我没有放在这里... 现在,情人级别树中的节点处理它们的数据并需要将它们发送给父母(USING他们的家长ID)。我坚持在这里...一个节点(一个对象)如何将其数据发送到另一个节点(另一个对象)(在这种情况下说它的父节点),只使用另一个对象的一个​​ID变量...以一种更简单的方式需要一种方法来获取(ID和DATA)并将数据发送到具有ID的对象!当然,接收端应该有另一个功能或事件处理程序在接收数据后采取行动......

+0

如果我理解你的新问题正确,你需要什么是搜索树对于给定ID的功能?做到这一点的最简单的方法是从根开始,并按顺序递减每个孩子,假设没有排序。到目前为止,您有什么搜索功能? – jonk

+0

请参阅[本维基百科条目](https://en.wikipedia.org/wiki/Tree_traversal)了解有关不同树遍历算法的信息,如果这是您卡住的地方。 – jonk

回答

1

首先,您可能希望使在Node构造函数中创建的DATA实例成为实例成员。否则一旦构造函数完成,它就可以被垃圾收集器释放。

然后可以将DATA参数传递给构造函数Node,或者您可以使用setter方法来接受参数DATA

public class Node { 
    int iD; 
    private DATA d; 

    public Node(){ 
     this.d = new DATA(); // or this(new DATA()); 
    } 

    public Node(DATA d){ 
     this.d = d; 
    } 

    public void setData (DATA d) { 
     this.d = d; 
    } 

    public DATA getData() { 
     return this.d; 
    } 
} 

现在你有2个Node实例几个选项来共享DATA成员:

public class MAIN { 
    public static void main(String[] args) { 
     DATA data = new DATA(); 
     Node node1 = new Node(data); 
     Node node2 = new Node(data); 
    } 
} 

public class MAIN { 
    public static void main(String[] args) { 
     Node node1 = new Node(); 
     Node node2 = new Node(node1.getData()); 
    } 
} 

public class MAIN { 
    public static void main(String[] args) { 
     Node node1 = new Node(); 
     Node node2 = new Node(null); 
     node2.setData (node1.getData()); 
    } 
} 
1

在你r example,Node does not has DATA in object within;你只需在构造函数中初始化一个,然后允许它超出范围。您还需要修改你的构造函数,如果你想在一个DATA对象传递,所以更改Node是:

public class Node { 
    int iD; 
    DATA d; 
    public Node(){ 
     d = new DATA(); 
    } 
    public Node(DATA d){ 
     this.d = d; 
    } 
} 

,让你有存储DATA实例。然后简单地提供一个吸气剂,例如:

public DATA getData() { 
    return d; 
} 

,然后你可以这样做:

public class MAIN { 
    public static void main(String[] args) { 
     Node node1 = new Node(); 
     Node node2 = new Node(node1.getData()); 
    } 
} 
+0

谢谢你是对的我忘了在Node对象中声明一个DATA对象。实际上我的代码比这个更复杂。我有几个没有声明和初始化的对象,如“Node node1 = new Node();”所以我没有像我的对象node1的引用..但我的对象有一个ID ..我想传递数据使用节点对象的ID .... – Farhood

+0

其实我的节点是在一个树结构...所以我想要将树的一个节点的数据传递给树的另一个节点... – Farhood

+0

所以你想通过id为一个节点搜索一棵树,然后从该节点获取DATA对象并将它传递到另一个节点该树还发现了ID?如果是这样,那完全是另一个问题:P – jonk

相关问题