从另一个类调用一个对象arraylist并迭代它

时间:2017-02-13 22:09:12

标签: java arraylist

访问我在课堂上创建的arraylist时遇到问题。我尝试了类似于我的问题的答案,但不幸的是我无法解决问题。

所以我有两个课程StudentPerson,我希望在课程Person中遍历Student的arraylist。 (我知道,代码真的没有意义。我只是想了解。)

我尝试了两种方法:

1)在Student类中创建Person类型的变量,并从person类调用get方法。

2)在返回arraylist的类人员中创建一个get方法。 当我试图在main方法中调用isHere方法时,两者都无法正常工作。(false是打印而不是true)

我认为我的两种方法初始化一个类型为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));
    }
}

1 个答案:

答案 0 :(得分:1)

p = new Person()方法中的语句isHere(..)正在创建一个新的Person对象。创建Person对象后,对象name中的p将为空,list将为空。所以for循环永远不会执行,因为列表是空的,因此它返回false。

如果您希望运行代码,则不应创建Person对象,然后立即迭代它,因为它没有任何内容。您必须向其添加内容或使用您认为将在运行isHere(..)方法之前填充的Person对象