java写的家谱_关于java:家谱计划的逻辑

博主正在使用Java构建一个家庭树程序,面临如何简洁表示人际关系和展示家族树的难题。对于关系表示,他们考虑去除冗余的父/子设置,并探讨了用对象表示关系的可能性。在显示家族树方面,寻求图形化解决方案,例如使用现有的可视化工具包。
摘要由CSDN通过智能技术生成

我在Java中创建一个家庭树程序,或者至少试着去做。我已经开设了几个课程:

名字的获取者和设置者性别年龄等

FamilyMember-扩展个人getter以及设置家长和儿童

家庭-由多个族成员和添加方法正在删除成员

家族树是主要的阶级用于设置关系。

我有两个主要问题:

1)我需要建立人与人之间的关系。目前我正在做:

FamilyMember A, FamilyMember B

B.setMother(A);

A.setChild(B);

上面的示例用于设置母子关系。

这看起来很笨重。实现所有关系都变得非常冗长。关于如何以不太程序化的方式实现多个关系有什么想法吗?

2)我必须能够显示家族树。我该怎么做?有没有定制课程可以让生活更轻松?

谢谢你的时间…

您希望如何显示它?

在绘制结构时,如果显示的代数超过2,则很难避免碰撞(线交叉)。所以如果你的申请允许你把它减到两个,那就太好了。我已经编写了一些使用这种表示的程序,或者是垂直的:

a01cbefb1c5251e635957397fe5b9ea1.png

或水平:

氧化镁

如果您需要同时显示更多的代,您需要想出其他表示,它们可能开始变得非常稀疏,这样您就可以在同一级别显示同一代中的每个人。

关于如何将关系表示为数据结构,这很混乱。最简单、最干净的事情是,任何两个分别是同一个人的母亲和父亲的人都是"已婚"的。但是,您希望如何表示多个合作伙伴、继子女等?如果不知道你的程序应该做什么,这很难回答。也许你的数据集没有这些复杂的问题。如果是这样的话,最好先考虑复杂的情况——简单的表示不适合简单地扩展来覆盖困难的情况。

(用手)画出一些你预料到的最困难的情况;这将建议你需要记录什么类型的数据,以及如何组织它。绘制时所做的选择(谁先来,在每个节点使用什么符号和文本等)将通知您的数据结构决策。

设置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类)

class Node

{

public Node Parent { get;set;}

public List Childs {get;set;}

}

使用

Node ultimateGrandParent = new Node();

ultimateGrandParent.Parent = null;

ultimateGrandParent.Childs = new List();

我想把它以树形结构复线。我的主要问题是建立关系。我有一个家庭成员班,允许一个人有其他的父亲和许多孩子。我不知道如何实现婚姻,也不知道如何实现为许多有着相同父母的孩子建立关系…谢谢你这么快的回复!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值