2015-11-13 7 views
0

Мне нужно передать объект (например, объект из класса DATA), который находится внутри другого объекта (например, объект из класса NODE) ​​на другой объект (из класса 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. Я уже инициализировал дерево с предопределенными структурами иерархических узлов, используя некоторые рекурсивные методы, которые я здесь не ставил ... Теперь узлы дерева на уровнях любовника обрабатывают свои данные и должны отправлять их своим родителям (ИСПОЛЬЗОВАНИЕ ИДЕНТИФИКАТОР РОДИТЕЛЯ). Я застрял здесь ... как узел (объект) может отправить свои данные другому узлу (другому объекту) (скажем, его родительский объект в этом сценарии), используя только одну переменную ID другого объекта ... более простым способом необходимо получить метод (ID и DATA) и отправить данные объекту с идентификатором! и, конечно, должна быть другая функция или обработчик событий на стороне приемника, чтобы принять меры после получения данных ...

+0

Если я понять ваш новый вопрос правильно, что вам требуется это функция для поиска дерева для данного идентификатора? Самый простой способ сделать это - начать с корня и рекурсивно сбрасывать каждый ребенок по порядку, считая, что сортировки нет. Что вы пробовали до сих пор для функции поиска? – jonk

+0

См. [Эту запись в Википедии] (https://en.wikipedia.org/wiki/Tree_traversal) для получения информации о разных алгоритмах обхода дерева, если это место, где вы застряли. – jonk

ответ

1

Прежде всего, вы, вероятно, захотите создать экземпляр DATA, созданный в конструкторе экземпляра Node. В противном случае он может быть освобожден сборщиком мусора после завершения конструктора.

Затем можно либо передать параметр DATA в конструктор Node, или вы можете иметь метод установки, который будет принимать параметр 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

В вас Например, Node делает не имеет объект DATA внутри него; вы просто инициализировали его в конструкторе, а затем разрешили ему выйти из области видимости. Кроме того, необходимо изменить свой конструктор если вы хотите передать в 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

Спасибо, что ты прав. Я забыл объявить объект DATA в объекте Node. на самом деле мой код более сложный, чем этот. У меня есть несколько объектов, которые не объявлены и не инициализированы, как «Node node1 = new Node();» поэтому у меня нет таких ссылок, как node1 для моих объектов .. но у моих объектов есть ID. Я хочу передать DATA с помощью объектов ID узла ... – Farhood

+0

Собственно, мои узлы находятся внутри древовидной структуры ... поэтому я хочу передать данные одного узла дерева другому узлу дерева ... – Farhood

+0

, поэтому вы хотите искать дерево для узла по идентификатору, затем получить объект DATA с этого узла и передать его в другой узел в дерево также найдено по id? если это совсем другой вопрос: P – jonk

Смежные вопросы