Logic for family tree program
我在Java中创建一个家庭树程序,或者至少试着去做。我已经开设了几个课程:
- 名字的获取者和设置者性别年龄等
- FamilyMember-扩展个人getter以及设置家长和儿童
- 家庭-由多个族成员和添加方法正在删除成员
- 家族树是主要的阶级用于设置关系。
我有两个主要问题:
1)我需要建立人与人之间的关系。目前我正在做:
1 2 3 | FamilyMember A, FamilyMember B B.setMother(A); A.setChild(B); |
上面的示例用于设置母子关系。
这看起来很笨重。实现所有关系都变得非常冗长。关于如何以不太程序化的方式实现多个关系有什么想法吗?
2)我必须能够显示家族树。我该怎么做?有没有定制课程可以让生活更轻松?
谢谢你的时间…
在绘制结构时,如果显示的代数超过2,则很难避免碰撞(线交叉)。所以如果你的申请允许你把它减到两个,那就太好了。我已经编写了一些使用这种表示的程序,或者是垂直的:
。
或水平:
氧化镁
如果您需要同时显示更多的代,您需要想出其他表示,它们可能开始变得非常稀疏,这样您就可以在同一级别显示同一代中的每个人。
关于如何将关系表示为数据结构,这很混乱。最简单、最干净的事情是,任何两个分别是同一个人的母亲和父亲的人都是"已婚"的。但是,您希望如何表示多个合作伙伴、继子女等?如果不知道你的程序应该做什么,这很难回答。也许你的数据集没有这些复杂的问题。如果是这样的话,最好先考虑复杂的情况——简单的表示不适合简单地扩展来覆盖困难的情况。
(用手)画出一些你预料到的最困难的情况;这将建议你需要记录什么类型的数据,以及如何组织它。绘制时所做的选择(谁先来,在每个节点使用什么符号和文本等)将通知您的数据结构决策。
设置B的母亲和A的孩子似乎是多余的-冗余导致错误-选择一个。哪一个?好吧,当你设定B的母亲(A的性别)时,有更多的信息,我们知道任何人都需要两个父母,而不是0个或更多的孩子。所以我倾向于只设置B的母亲;你总是可以通过遍历所有对象来找出任何个体的子对象,从而找出父对象与相关个体相等的集合。事实上,储存父母关系(与简单的父母关系相比)可以减少重复(假设你是在储存与个人的性别)。
Any ideas on how to implement multiple
relationships in a less procedural
way?
号
是的,您可以将关系本身表示为对象。任何两个人都可以拥有零个或更多的关系。
几年前,我在一个警察记录系统工作,在它的主名索引中为任何两个人之间的联系做了更广泛的工作。
关系可以是直接的。母亲---是孩子的母亲。
关系可能是分层的。母亲是父母。
2) I have to be able to display the
family tree. How can I do this? Are
there any custom classes out there to
make life easier?
号
是的,有支持图形显示的现有代码。我个人在使用预使用可视化工具包方面有很好的经验。
您可能会找到感兴趣的prefuse treeview;请尝试单击本例中的节点。(但是,如果您打算将您的软件供您自己的家庭以外的其他家庭使用,则一棵树可能不够。)
类似下级的东西(这是一个伪代码而不是真正的Java类)
1 2 3 4 5 6 7 8 | class Node { public Node Parent { get;set;} public List<Node> Childs {get;set;} } |
使用
1 2 3 | Node ultimateGrandParent = new Node(); ultimateGrandParent.Parent = null; ultimateGrandParent.Childs = new List<Node>(); |
号