2013-10-28 161 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); 

編輯: 好了,上面是正確的,但瓦爾·德萊昂的回答是解釋您遇到什麼。