我对这项任务一无所知。我需要做这样的家谱

但是我不能在Main.java中解出孩子。对于每个名字,我必须将null写到孩子。
下面是我的代码:Main.java。第二个文件:Osoba.java
public class Main {
public static void main(String[] args) {
Osoba abraham = new Osoba("Abraham Simpson", null, null, null, null, null, null, null);
Osoba penelope = new Osoba("Penelope Olsen", null, null, null, null, null, null,null);
Osoba pan = new Osoba("Pan Bouvier", null, null, null, null, null,null,null);
Osoba jackie = new Osoba("Jackie Bouvier", null, null, null, null, null,null,null);
Osoba herb = new Osoba("Herb Powers", abraham, penelope, null, null, null,null,null);
Osoba homer = new Osoba("Homer Simpson", abraham, penelope, null, null, null,null,null);
Osoba marge = new Osoba("Marge Simpson", pan, jackie, null, null, null,null,null);
Osoba selma = new Osoba ("Selma Bouvier", pan, jackie, null, null, null,null,null);
Osoba bart = new Osoba("Bart Simpson", homer, abraham, penelope,marge, pan,jackie,null);
bart.sestavRodokmen();
System.out.println();
homer.sestavRodokmen();
}
}
public class Osoba {
private String name;
private Osoba father;
private Osoba dad_grandpa;
private Osoba dad_grandma;
private Osoba mother;
private Osoba mom_grandpa;
private Osoba mom_grandma;
private Osoba child;
public Osoba (String name, Osoba father, Osoba dad_grandpa, Osoba dad_grandma, Osoba mother, Osoba mom_grandpa, Osoba mom_grandma, Osoba child) {
this.name = name;
this.father = father;
this.dad_grandpa = dad_grandpa;
this.dad_grandma = dad_grandma;
this.mother = mother;
this.mom_grandpa = mom_grandpa;
this.mom_grandma = mom_grandma;
this.child = child;
}
private String rodokmen;
public void sestavRodokmen () {
System.out.println("Rodokmen pro osobu: " + name);
System.out.println("Name: " + name);
System.out.println("Father: "+ father);
System.out.println("Grandfather: "+ dad_grandpa);
System.out.println("Grandmother: "+ dad_grandma);
System.out.println("Mother: "+ mother);
System.out.println("Grandfather: "+ mom_grandpa);
System.out.println("Grandmother: "+ mom_grandma);
System.out.println("Child: "+ child);
rodokmen = "";
System.out.println(rodokmen);
}
@Override
public String toString () {
String a = "";
if(mother != null && father != null)
a += name + "\n" + father + "\n" + mother +"\n" +"\n" + child;
else
a += name;
return a;
}
}发布于 2018-12-06 23:01:04
在奥萨巴,只需要直接父母和/或直接子女。
在创建新的Osaba时,仍然不能定义父对象或子对象。
完全自由的创作顺序将是:
Osoba abraham = new Osoba("Abraham Simpson");
Osoba penelope = new Osoba("Penelope Olsen");
Osoba pan = new Osoba("Pan Bouvier");
Osoba jackie = new Osoba("Jackie Bouvier");
Osoba herb = new Osoba("Herb Powers");
Osoba homer = new Osoba("Homer Simpson");
Osoba marge = new Osoba("Marge Simpson");
Osoba selma = new Osoba ("Selma Bouvier");
Osoba bart = new Osoba("Bart Simpson");然后使用如下内容创建祖先图:
herb.setParents(abraham, penelope);
martha.setParents(null, penelope); // If no father.现在,如果你想检查所有的Osaba:是否有人没有父母,有人不是他自己的祖先等等,也许你需要一个容器类:
public class Osabas {
private List<Osaba> persons = new ArrayList<>();
public Osaba createOsaba(String name) {
Osaba osaba = new Osaba(name);
persons.add(osaba);
return osaba;
}
public void drawAncestryDiagram() {
...
}
}祝好运!
发布于 2018-12-06 23:00:35
grand-parents,因为你会发现他们的父母的父母public Osoba (字符串名称,Osoba父亲,Osoba母亲,Osoba孩子){ this.name =名称;this.father =父亲;this.mother =母亲;this.child =孩子;}
toString()应该看起来更像Bart,只有名称,而不是完整的信息,否则你将面临递归,如果你像Bart一样打印,就会有整个家庭:@Override公共字符串toString() { return String.join(“/ ",name,String != null?father.name : null,妈妈!= null?mother.name : null,子级!= null?child.name :空);}
void sestavRodokmen(int level) { System.out.println(toString());printParentTab(level,parent);printParentTab(level,level);} void printParentTab(int level,Osoba parent){ if (parent != null) { for (int i= 0;i <= level;i++) { System.out.print("\t");} parent.sestavRodokmen(level + 1);}}
巴特·辛普森/荷马·辛普森/玛吉·辛普森/ null荷马·辛普森/亚伯拉罕·辛普森/佩内洛普·奥尔森/ null亚伯拉罕·辛普森/ null / null / null佩内洛普·奥尔森/ null / null玛吉·辛普森/潘·布维耶/杰基·布维尔/ null潘·布维尔/ null / null / null Jackie Bouvier / null / null
发布于 2018-12-06 23:26:30
这就是我解决这个问题的方法:
首先,我们需要一个类来表示一个人。
您提供的图表似乎跟踪了4个属性:
这反映在Person类中。
static class Person{
private Person father;
private Person mother;
private List<Person> children = new ArrayList<>();
private String firstname;
private String surname;
private boolean isMale;
public Person(String firstname, String surname, boolean isMale){
this.firstname = firstname;
this.surname = surname;
this.isMale = isMale;
}
public Person addChild(Person child){
this.children.add(child);
if(this.isMale){
child.father = this;
}else{
child.mother = this;
}
return this;
}
public void printTreeUp(){
printTreeUp(0);
}
private void printTreeUp(int depth){
String tabs = "";
if(depth != 0){
tabs = "";
for(int i=0;i<depth;i++)
tabs += "\t";
tabs += "∟ ";
}
System.out.println(tabs + firstname + " " + surname + " " + (isMale ? "♂" : "♀"));
if(father != null)
father.printTreeUp(depth+1);
if(mother != null)
mother.printTreeUp(depth+1);
}
public void printTreeDown(){
printTreeDown(0);
}
private void printTreeDown(int depth){
String tabs = "";
if(depth != 0){
tabs = "∟";
for(int i=1;i<depth;i++)
tabs += "_";
}
System.out.println(tabs + firstname + " " + surname + " " + (isMale ? "♂" : "♀"));
for(Person child : children)
child.printTreeDown(depth+1);
}
}如您所见,我还添加了一些方法来打印家谱树。特别地,有printTreeUp (从给定的Person开始)将打印他们的父母、祖父母等。还有printTreeDown (从给定的Person开始)将打印他们的孩子、孙子等。
main方法(构造示例家族树)如下所示:
public static void main (String[] args) throws java.lang.Exception
{
Person gp0 = new Person("Abraham","Simpson", true);
Person gp1 = new Person("Penelope","Olsen", false);
Person gp2 = new Person("Pan","Bouvier", true);
Person gp3 = new Person("Jackie","Bouvier", false);
Person p0 = new Person("Herb","Powers", true);
gp0.addChild(p0);
gp1.addChild(p0);
Person p1 = new Person("Homer","Simpson", true);
gp0.addChild(p1);
gp1.addChild(p1);
Person p2 = new Person("Marge","Bouvier", false);
gp2.addChild(p2);
gp3.addChild(p2);
Person p3 = new Person("Selma","Bouvier", true);
gp2.addChild(p3);
gp3.addChild(p3);
Person c0 = new Person("Bart", "Simpson", true);
p1.addChild(c0);
p2.addChild(c0);
// your code goes here
c0.printTreeUp();
}它输出Bart Simpson的族树(up),如下所示:
Bart Simpson ♂
∟ Homer Simpson ♂
∟ Abraham Simpson ♂
∟ Penelope Olsen ♀
∟ Marge Bouvier ♀
∟ Pan Bouvier ♂
∟ Jackie Bouvier ♀https://stackoverflow.com/questions/53653749
复制相似问题