O.AEESS
O.AEESS

Reputation: 9

Calling an object arraylist from another class and iteration through it

I have a problem accessing the arraylist I created in a class. I tried going through the answers of questions similar to mine but unfortunately I was unable to solve the problem.

So I have two classes Student and Person and I want to iterate through the arraylist of Person in the class Student. (The code doesn't really make sense, I know. I just want to understand).

I tried two approaches :

1) creating a variable of type Person in Student class and calling the get method from person class.

2) creating a get method in the class person that returns arraylist. Both are not working properly when i tried to call the isHere method in the main method.(false was printed instead of true)

I think my two approaches intialise a new array of type Person and not call the arraylist to which elements are already added. How can solve this?

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;
    }

}

The Person class:

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));
    }
}

Upvotes: 0

Views: 1618

Answers (1)

Jayesh Doolani
Jayesh Doolani

Reputation: 1233

The statement p = new Person() in your isHere(..) method is creating a new Person object. When that Person object is created, the name in object p will be null and the list will be empty. So the for loop is never executed as the list is empty and hence it returns false.

If you ever want your code to run, you should not create the Person object and then immediately iterate through it because it will have nothing. You have to either add something to it or use a Person object which you believe will be populated before you run the isHere(..) method

Upvotes: 1

Related Questions