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