我正在尝试使用用户对象创建一个arraylist,但是当尝试将新对象添加到列表中时,它似乎只是部分工作。
第一期:在添加对象后在列表上执行.size(),并通过system.out.println确认列表中包含此对象时,它仍然没有。增加它的大小。
假设我有一个包含100个元素的列表,并且在执行.size()时会输出该元素。然而,当然后尝试添加新元素时,.size()仍返回100,但.toString()也返回新对象。
第二期:
在我的列表中使用.add()时,它似乎将对象添加到列表中一次,但是如果我再次尝试调用该方法来创建另一个用户,它只会覆盖前一个用户。
怎么可能?
以下是我的方法的代码段" createPerson()":
public void createPerson(){
int pid = handler.getPersonsCount();
pid += 1;
String name = JOptionPane.showInputDialog(null, "What's your name?");
String mail = JOptionPane.showInputDialog(null, "What's your e-mail?");
String phone = JOptionPane.showInputDialog(null, "What's your phone nummber?");
String city = JOptionPane.showInputDialog(null, "Which city are you currently living in?");
String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
handler.addPerson(new Person(pid, name, mail, phone, city, dateTime));
showMsg("The following has been added:" + pid
+ "\nName: " + name
+ "\nMail: " + mail
+ "\nNumber: " + phone
+ "\nCity: " + city
+ "\nDatetime: " + dateTime);
System.out.println(handler.PersonsArraylist.toString());
System.out.println("Size: " + handler.getPersonsCount());
});
}
handler.getPersonsCount():
public int getPersonsCount() {
return PersonsArraylist.size();
}
handler.addPerson():
public void addPerson(Person person) {
PersonsArraylist.add(person);
}
如果需要,我已将其推送到Github,因此您可以浏览整个代码:EENielsen/personseacher_oo
答案 0 :(得分:2)
您的方法showInterface
似乎不正确。
private void showInterface() {
try {
Interface test = new Interface();
} catch (ParseException ex) {
Logger.getLogger(Interface.class.getName()).log(Level.SEVERE, null, ex);
}
}
执行命令后,您似乎正在创建一个新界面,该界面又会创建一个新的PersonHandler
。
您至少需要删除new Interface()
方法中的showInterface
。
也许这就是你追求的目标?
private void showInterface() {
try {
createStartMenu();
} catch (ParseException ex) {
Logger.getLogger(Interface.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 1 :(得分:1)
它可能与您当前的问题没有直接关系,但我想就您的代码分享一些观察结果:
PersonHandler
中,字段PersonData
和PersonsArray
似乎只在构造函数中使用,因此它们应该是方法局部变量。PersonsArraylist
,但是也通过getPersons()
将它提供给外面的世界(它看起来错过了返回类型的泛型)。这样,外面的某个人可能会弄乱列表,这可能是导致问题的原因。sortPersons()
你自己正在进行排序。如果这不是出于学习目的,我建议改为使用Collections.sort()
。showInterface()
中回答,您正在重新创建您不使用的界面。deletePerson()
和deletePersons()
中,您应该重新创建pid,因为删除后的所有人的索引都会改变,并且您定义了pid = index(即在getPerson(int pid)
中使用了pid直接访问列表)。