3

これを実装する際にいくつか問題があります。私は持っていArrayListます。私は今数日探していましたが、どこにも答えが見つからないようです:

private List<FamilyTree> Tree;

Trees私はこのように新しいものを追加することができarrayます:

FamilyTree Generation = new FamilyTree();
Generation.add(new Tree());

私は基本的に世代間を移動できるようにしたいと思っています。たとえば、ツリーに新しい人を追加します

Generation.add(new Person(height, hair colour, eyes));

それで、前の世代にもう一人追加したいと思います。それは(これではなく)Arraylist電流を含むことArrayListです。

問題をうまく説明しているかどうかわからないので、次の図を示します。

----John----Peter----Sandra----Rachel-----
   /   \       |       |
-Jon--Sunny---Cassie--Milo---
                     /  |  \
                   Ron-Kim-Guy

つまり、基本的に、ArrayListジョン、ピーター、サンドラ、レイチェルのイニシャルがあります。それぞれが独自のを持っていArraylist(s)ます。GuyのRachelに追加したい場合、別々のアレイ間をどのように行き来しますか?

前もって感謝します

4

3 に答える 3

4

一人一人に2人の親と任意の数の子供がいる場合は、次のような構造を使用できます。

class Person {
   final Person mother, father;
   final List<Person> children = new ArrayList<>();

   public Person(Person mother, Person father) {
     this.mother = mother;
     this.father = father;
     mother.addChild(this);
     father.addChild(this);
   }

   public void addChild(Person p) {
     children.add(p);
   }
}

マテリアルラインを上に移動したい場合は、次のようなことができます

for(Person p = ...; p != null; p = p.mother) {

}

ツリーをどのように表示するかを考えるのではなく、ツリーがどのように表現されるかを考える必要があります。

于 2012-04-16T11:12:03.217 に答える
1

多次元リストは必要ありませんが、ツリーが必要です。ツリーの実装については、この質問を参照してください。

多次元リストは、たとえば、テーブル、直方体などです。ディメンションは最初に認識されている必要があり、データの構造を定義します。

ツリーにはルートノードと子があり、それらの子は実行時にさらに多くの子を取得できるため、制限はありません。

于 2012-04-16T11:11:08.077 に答える
1

最も簡単な方法は、各リストにその親への参照を持たせることです。たぶんあなたがこれに似たオブジェクトPersonを作成するなら:

public class Person{

ArrayList<Person> childs;//the child's nods
Person parent; //the parent, null if is the root

}
于 2012-04-16T11:14:45.923 に答える