向arraylist添加元素

时间:2013-10-28 20:31:14

标签: java arraylist

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孩子但我无法添加。我正在初始化列表,然后在列表中添加一个名称。我正在使用采用方法将子项添加到列表中。请告诉我这里做错了什么。

5 个答案:

答案 0 :(得分:1)

属性是私有的,请放置setter和getter,然后尝试访问getName()属性。

答案 1 :(得分: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;

答案 2 :(得分:1)

以下代码不正确:

for (int i = 0; i < children.size(); i++) {
    children.add(i, person.name);
}

每次拨打Adopt(person)时,都会添加该孩子,而不是列表中的所有孩子。

尝试使用:

children.add(person.name);

修改 好的,上面的说法是正确的,但cristobal de Leon的回答是对你所经历的内容的解释。

答案 3 :(得分:0)

你的arraylist“children”中的项目数是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;
    }
}

为您的属性制作getter或将其公之于众:

  

public String name;

在你的主要:

Person[] persons = new Person[5];
persons[0] = new Person("Dude");
persons[1] = new Person("Dude's child");

persons[0].adopt(persons[1]);

答案 4 :(得分:0)

检查您的toString方法。我不确定是否所有的孩子都被打印出来。例如。看一下父元素不是NULL的情况和children.size()&gt; 0

String list = null;
for (int i = 0; i < children.size(); i++) {
  list = children.get(i);
}
return name + " Parent: " + parent + " Children: " + list;

在这里,您将遍历所有子项,获取列表中最后一个子项的名称,并将其与父项名称一起返回。

此外:请检查孩子是否也可以上课Person