因此,如果我有一类人,您可以在其中定义他们的姓名,年龄和出生日期。
public class Person
{
private String name;
private int age;
private String dOB;
public Person (String name, int age, String dateOfBirth)
{
this.name = name;
this.age = age;
dOB = dateOfBirth;
}
}
然后在另一个成员资格类中,我有一个名为Members的arrayList。我知道如何通过以下方式添加Person:
import java.util.ArrayList;
public class Memberships
{
private ArrayList<Person> members;
public Memberships()
{
members = new ArrayList<Person>();
}
public void addMember(Person person)
{
members.add(person);
}
}
但是,如何在不单独创建Person实例的情况下添加成员。 所以从:
开始 public void addMember(String name, int age, String dOB)
{
}
这是我陷入困境的地方我不知道如何使用这些值创建一个Person来添加到我的成员ArrayList。
@dehlen抱歉!
public void addNewMember(String name, int age, String dOB)
{
Person p = new Person(name, age, dOB);
for (Person pers : members)
{
if (pers.getName().equals(name))
{
System.out.print("This member is already included.");
}
else
{
members.add(p);
}
}
}
所以我这样做了,但是这个人永远不会被添加?我很困惑为什么?
答案 0 :(得分:5)
您需要来创建Person的实例,因为这是您ArrayList
所期望的。
以下是完成任务的方法:
public void addMember(String name, int age, String dOB)
{
Person p = new Person(name,age,dOB);
members.add(p);
}
为确保不向ArrayList
添加重复内容,您可以迭代ArrayList
并查看是否存在已包含相同值的Person
对象。
public void addMember(String name, int age, String dOB)
{
//Create a new Person instance with given parameters
Person p = new Person(name,age,dOB);
//Loop through existing Person instances in ArrayList
for (Person pers : members){
//If there exists a Person with the same name
if (pers.getName().equals(name)) {
//We can stop searching for a duplicate and leave the method
return;
}
}
//Since we did not exit the method above we did not found any duplicate, therefore it is safe to add our Person instance to our ArrayList
members.add(p);
}
当然,这仅检查是否存在具有相同名称的Person。但是,在这段代码的帮助下,您还可以完成检查更多属性。
我也使用名为getName(
)的方法,称为getter。必须在Person模型类中指定此方法:
public String getName() {
return name;
}
正如@BorisTheSpider正确指出的那样,有一种更好的方法来测试相等性。
您可以 / 应覆盖模型类的equals()
方法,如下所示:
@Override
public boolean equals(Object person)
{
boolean same = false;
if (person != null && person instanceof Person)
{
same = this.name == ((Person) person).name;
}
return same;
}
然后您可以使用contains()
方法,如下所示:
members.contains(p);
要检查其他属性,您应该在重叠的equals()
方法中实现逻辑。
答案 1 :(得分:0)
只需创建一个Person
个实例,然后您就可以将其传递到现有的addMember
方法中。
public void addMember(String name, int age, String dateOfBirth) {
this.addMember(new Person(name, age, dateOfBirth);
}