2017-03-08 3 views
0

私はクラスEightPuzzleを持っています。親ノードに子ノード、子ノードなどをJavaで設定/設定するにはどうすればよいですか?

私は Tがオブジェクト EightPuzzleのあるクラス Node<T>を持って
public class EightPuzzle { 

int[][] board = new int[3][3]; 
//code here 
} 

。私に1つのNode<EightPuzzle> parentがある場合、どのように子どもを設定するのですか?その子供たちの子供たち?子どもたちがArrayList<Node<EightPuzzle>>の場合は、同様に?

public class Node<T> { 

private List<Node<T>> children = new ArrayList<Node<T>>(); 
private Node<T> parent = null; 
private T data = null; 

public Node(T data) { 
    this.data = data; 
} 

public Node(T data, Node<T> parent) { 
    this.data = data; 
    this.parent = parent; 
} 

public List<Node<T>> getChildren() { 
    return children; 
} 

public void setParent(Node<T> parent) { 
    parent.addChild(this); 
    setParentInternal(parent); 
} 
public void setParentInternal(Node<T> parent){ 
    this.parent = parent; 
} 

public void addChild(T data) { 
    addChild(new Node<T>(data)); 
} 
public void addChild(Node<T> child) { 
    child.setParentInternal(this); 
    this.children.add(child); 
} 

//may not use this and set data 
public T getData() { 
    return this.data; 
} 

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

public boolean isRoot() { 
    return (this.parent == null); 
} 

public boolean isLeaf() { 
    if(this.children.size() == 0) 
     return true; 
    else 
     return false; 
} 

public void removeParent() { 
    this.parent = null; 
} 
+0

何を取得しようとしていますか? – 4castle

+0

Object EightPuzzleでparent.childrenを設定しようとしていて、子などを設定しよう –

+0

'Node'オブジェクトを作成して、それらを' addChild'または 'setParent'と一緒にリンクしようとしましたか?あなたがどこにいるのか分かりません。 – 4castle

答えて

2

次のような場合には、再帰的な方法を使用することをお勧めします。

例:

public void assignChildren(Node node) { 
    List<Node> children = ... // somehow decide the children here 
    node.setChildren(children); 

    // This is just a for each loop using a java 8 method reference 
    // to make a recursive call 
    children.forEach(this::assignChildren); 
} 

EDIT:あなたのクラスにsetChildren(...)メソッドを追加することができない場合は答え

にコメントを移転 、あなたは常にだけに追加する子供を反復処理することができますノードを1つずつ

+0

申し訳ありませんが、私が半分しかやっていないときに、誤って提出されたドリップとドレープが返ってきました。あなたのクラスに '' '' setChildren(...) ''メソッドを追加できない場合は、子ノードを反復してノードに1つずつ追加します。 –

+0

再帰の基本ケースが必要です。 –

+0

追加が必要な場合は、回答を編集できます。 – 4castle

関連する問題