2013-10-28 123 views
-1
public class Person { 

    private String name; 
    private boolean adopted; 
    private String parent; 
    private List<String> children; 

    public Person(String Aname) { 
     name = Aname; 
     children = new ArrayList<String>(); 
     adopted = false; 
    } 

    public void adopt(Person person) { 
     if (!person.adopted && !person.name.equals(name) 
       && children.size() <= 10) { 
      person.parent = name; 
      // System.out.println(parent); 
      // children=person.name; 
      for (int i = 0; i < children.size(); i++) { 
       children.add(i, person.name); 
      } 
      // System.out.println(children); 
      adopted = true; 
     } 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void disown(Person person) { 

    } 

    public String toString() { 
     if (children.size() == 0 && parent == null) { 
      return name + " Parent: No parent. Children: No children "; 
     } else if (children.size() == 0) { 
      return name + " Parent: " + parent + " Children: No children"; 
     } else if (parent == null) { 
      String list = null; 
      for (int i = 0; i < children.size(); i++) { 
       list = children.get(i); 
      } 
      return name + " Parent: No Parent " + "Children: " + list; 
     } else { 
      String list = null; 
      for (int i = 0; i < children.size(); i++) { 
       list = children.get(i); 
      } 
      return name + " Parent: " + parent + " Children: " + list; 
     } 
    } 
} 

在这我试图将person.name添加到arraylist儿童,但我无法添加。我正在初始化列表,然后向列表中添加一个名称。我正在使用采用方法将子项添加到列表中。请告诉我在这里做错了什么。要添加一个元素到arraylist

+8

你还没有真正告诉我们什么是错的。你是否收到编译器错误?没有得到预期的输出?什么? –

+0

我在输出中没有得到任何儿童的退化 – Hafiz

回答

0

项目的数量在您的ArrayList“孩子”为0

看这部分代码:在您将设置孩子的每一个对象

for (int i = 0; i < children.size(); i++) { 
    children.add(i, person.name); 
} 

同名。

因此,您将设置名称0次。这意味着也不会有任何输出。

我想你需要一个数组与你在你身上创建的人主。 的采用代码改成这样:

public void adopt(Person person) { 
    if (!person.adopted && !person.name.equals(this.name)) { 
     person.parent = name; 
     children.add(person.name); 
     person.adopted = true; 
    } 
} 

制作干将为您atributes或让他们公开这样的:

公共字符串名称;

在你的主:

Person[] persons = new Person[5]; 
persons[0] = new Person("Dude"); 
persons[1] = new Person("Dude's child"); 

persons[0].adopt(persons[1]); 
1

这些属性是私有的,请放置setter和getters,然后尝试访问getName()属性。

1

我敢肯定,问题是你创建新的ArrayList();你从来没有任何值分配到列表中,所以当你基于children.size()迭代,你将永远从0到迭代0,从未在接下来的片段添加任何孩子:

for (int i = 0; i < children.size(); i++) { 
      children.add(i, person.name); 
     } 

按@summerbulb建议:person.name应由目前采用此所以你只要做

children.add(person.name) 

此外,在采用方法的结束,我想你要标记的人(参数)的通过并没有这样(的人采纳),所以你可能会改变

person.adopted=true; 

,而不是仅仅adopted=true;

0

检查toString方法。我不确定是否所有的孩子都印了。例如。看看哪个父母不为NULL和children.size()的情况下> 0

String list = null; 
for (int i = 0; i < children.size(); i++) { 
    list = children.get(i); 
} 
return name + " Parent: " + parent + " Children: " + list; 

这里你遍历所有的孩子,您可以在列表中最后一个孩子的名字,并与父母一起回吧名称。

另外:请检查是否孩子也可以是类的Person

+0

如何显示所有儿童的姓名? – Hafiz

1

下面的代码是不正确的:

for (int i = 0; i < children.size(); i++) { 
    children.add(i, person.name); 
} 

每次调用Adopt(person)您在列表中添加的孩子,而不是所有的孩子的时候。

使用try:

children.add(person.name); 

编辑: 好了,上面是正确的,但瓦尔·德莱昂的回答是解释您遇到什么。