2017-02-13 64 views
0

訪問我在類中創建的數組列表時遇到問題。我嘗試瞭解類似於我的問題的答案,但不幸的是我無法解決問題。從另一個類調用對象數組列表並迭代它通過它

所以我有兩個類StudentPerson,我想通過Person ArrayList中的類Student進行迭代。 (我知道這段代碼並不合理,我只是想明白)。

我嘗試兩種方法:

1)創建一個類型的人在學生類變量,並要求從人類中的get方法。

2)在返回數組列表的人員中創建一個get方法。 當我嘗試調用主方法中的isHere方法時,兩者都不能正常工作(假打印代替真)

我認爲我的兩種方法是初始化一個新的Person類型數組,而不是調用ArrayList元素已添加。如何解決這個問題?

import java.util.ArrayList; 

public class Student { 
    private Person p; 
    private String name; 
    private int age; 
    private String address; 

    public Student() { 

    } 

    public Student(String name, int age, String address) { 
     this.name = name; 
     this.age = age; 
     this.address = address; 
    } 

    public boolean isHere(String name) { 
     p = new Person(); 
     // I also tried for(Person per : p.getList) 
     for (Person per : this.getL()) { 
      if (per.getName().equals(name)) { 
       System.out.println("hi"); 
       return true; 
      } 
     } 
     return false; 
    } 

    public ArrayList<Person> getL() { 
     return p.getList(); 
    } 

    public Person getP() { 
     return p; 
    } 

    public void setP(Person p) { 
     this.p = p; 
    } 

    public String getName() { 
     return name; 
    } 

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

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

} 

Person類:

import java.util.ArrayList; 

public class Person { 
    private String name; 
    private ArrayList<Person> list = new ArrayList<Person>(); 

    Person() { 

    } 

    public Person(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

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

    public ArrayList<Person> getList() { 
     return list; 
    } 

    public void setList(ArrayList<Person> list) { 
     this.list = list; 
    } 

    public void add(String name) { 
     list.add(new Person(name)); 
    } 
} 
+0

從isHere方法中刪除'p = new Person();'並且用你的'public void setP(Person p)'方法在調用isHere之前。 –

回答

1

聲明p = new Person()isHere(..)方法是創建一個新Person對象。當創建Person對象時,對象p中的name將爲空,並且list將爲空。所以for循環從不執行,因爲列表是空的,因此它返回false。

如果你想讓代碼運行,你不應該創建Person對象,然後立即遍歷它,因爲它沒有任何東西。你必須添加一些東西,或者使用Person對象,在你運行isHere(..)方法之前,你會認爲這個對象會被人工填充

+0

你能解釋一下,在你運行isHere(..)方法之前,「使用你認爲會被填充的Person對象」是什麼意思? (如果可以通過向我展示如何在代碼中執行此操作)。提前致謝。 –

相關問題