我正在用Java创建一个家族树程序,或者至少尝试一下.我开发了几个类:
我有两个主要问题:
1)我需要设置人与人之间的关系.目前我在做:
FamilyMember A, FamilyMember B
B.setMother(A);
A.setChild(B);
Run Code Online (Sandbox Code Playgroud)
以上示例用于设置母子关系.
这看起来很笨重.实现所有关系的时间越来越长.关于如何以较少程序的方式实现多个关系的任何想法?
2)我必须能够显示家谱.我怎样才能做到这一点?有没有自定义课程让生活更轻松?
谢谢你的时间...
在绘制结构时,如果显示的代数超过 2 代,就很难避免冲突(线条交叉)。因此,如果您的应用程序允许您将其减少到两个,那就太好了。我已经编写了许多使用这种表示形式的程序,无论是垂直的:

或水平:

如果您需要一次显示更多代,则需要提出其他表示形式,并且它们可能会开始变得相当稀疏,以便您可以在同一级别上显示同一代中的每个人。
关于如何将关系表示为数据结构 - 嗯,这很混乱。最简单、最干净的事情是,任何两个分别是同一个人的母亲和父亲的人都“结婚”了。但你想如何代表多个伴侣、继子女等?如果不更多地了解您的程序应该做什么,就很难回答这个问题。也许您的数据集没有这些复杂性。但如果确实如此,最好首先考虑棘手的情况 - 简单的表示并不适合轻松扩展以涵盖困难的情况。
(手绘)画出一些您预期的最困难的情况;这将建议您需要记录什么样的数据以及如何组织它。您在绘制时做出的选择(谁先来、在每个节点使用什么符号和文本等)将告知您的数据结构决策。
设置 B 的母亲和 A 的孩子似乎是多余的 - 并且冗余会导致错误 - 选择一个。哪一个?好吧,当您设置 B 的母亲(A 的性别)时,会得到更多信息,并且我们知道任何人都需要恰好两个父母,而不是 0 个或更多数量的孩子。所以我倾向于只设置 B 的母亲;您始终可以通过迭代所有个体来找出其父级等于所讨论的个体的集合,从而找出任何个体的子代。实际存储母亲和父亲关系(相对于简单的父母关系)可能会减少重复(假设您正在存储个人的性别)。