2017-02-13 8 views
0

У меня проблема с доступом к arraylist, который я создал в классе. Я попытался пройти ответы на вопросы, похожие на мои, но, к сожалению, я не смог решить проблему.Вызов объекта arraylist из другого класса и итерация через него

Поэтому у меня есть два класса Student и Person, и я хочу, чтобы перебирать ArrayList из Person в классе Student. (Кодекс действительно не имеет смысла, я знаю. Я просто хочу понять).

Я попробовал два подхода:

1) создание переменного типа Person в классе Student и призывающие методы получить от лица класса.

2) создание метода get в классе человек, который возвращает arraylist. Оба не работают должным образом, когда я пытался вызвать метод isHere в основном методе. (False было напечатано вместо истинного)

Я думаю, элементы уже добавлены. Как это можно решить?

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

удалите 'p = new Person();' из метода isHere и установите человека с вашим 'public void setP (Person p) 'перед вызовом isHere. –

ответ

1

p = new Person() Заявление в методе isHere(..) создает новый объект Person. Когда этот объект Person создан, name в объекте p будет пустым, а list будет пустым. Таким образом цикл for никогда не выполняется, поскольку список пуст и, следовательно, возвращает false.

Если вы когда-нибудь захотите, чтобы ваш код запускался, вы не должны создавать объект Person, а затем сразу же итерации через него, потому что он ничего не будет иметь. Вам нужно либо добавить что-то к нему, либо использовать объект Person, который, по вашему мнению, будет заселен, прежде чем вы запустите метод isHere(..)

+0

Можете ли вы объяснить, что означает «использовать объект Person, который, по вашему мнению, будет заселен, прежде чем вы запустите метод isHere (..)»? (Если это возможно, показывая мне, как я могу это сделать в своем коде). Заранее спасибо. –

Смежные вопросы