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

4

5 回答 5

1

以下代码不正确:

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

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

尝试使用:

children.add(person.name);

编辑: 好的,以上是正确的,但克里斯托瓦尔德莱昂的回答是对您所经历的事情的解释。

于 2013-10-28T20:44:08.873 回答
1

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

于 2013-10-28T20:39:34.457 回答
1

我很确定问题是在您创建新的 ArrayList(); 之后 您永远不会为列表分配任何值,因此当您基于 children.size() 进行迭代时,您将始终从 0 迭代到 0,并且永远不会在下一个片段中添加任何子项:

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

根据@summerbulb的建议:person.name应该被当前的this采用,所以你应该这样做

children.add(person.name)

另外,在采用方法结束时,我认为您想将人(参数)标记为采用而不是这个(采用的人),因此您可以更改

person.adopted=true;

而不仅仅是adopted=true;

于 2013-10-28T20:39:48.627 回答
0

检查你的toString方法。我不确定是否所有的孩子都被打印出来。例如,查看 parent 不为 NULL 且 children.size() > 0 的情况

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

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

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

于 2013-10-28T20:42:10.863 回答
0

你的arraylist“children”中的项目数是0。

看这部分代码:

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

对于 children 中的每个对象,您将设置相同的名称。

因此,您将设置名称 0 次。这意味着也不会有任何输出。

我认为您需要一个数组,其中包含您主要创建的所有人。将采用代码更改为:

public void adopt(Person person) {
    if (!person.adopted && !person.name.equals(this.name)) {
        person.parent = name;
        children.add(person.name);
        person.adopted = true;
    }
}

为您的属性制作吸气剂或像这样公开它们:

公共字符串名称;

在你的主要:

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

persons[0].adopt(persons[1]);
于 2013-10-28T20:40:01.920 回答