错误是客户具有不同的ID,但在ArrayList类的readCustomer对象中,唯一保存的ID是最后一个客户的ID。
//reads customer data from register.txt file
//has 2 string as arguments
//returns a ArrayList object with all the customer with the same name
public ArrayList<Customer> readCustomer(String name,String surname){
Customer temp = new Customer();
//will hold all the customers with the same name and surname
ArrayList<Customer> readCustomer = new ArrayList<Customer>();
try{
FileInputStream fstream = new FileInputStream("register.txt");
BufferedReader fbr = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = fbr.readLine()) != null) {
String line[];
line = strLine.split(" ");
if(name.equals(line[1]) && surname.equals(line[2])){
temp.setCustomerID(Integer.parseInt(line[0]));
temp.setName(line[1]);
temp.setSurname(line[2]);
temp.setAddress(line[3]);
temp.setAge(Integer.parseInt(line[4]));
readCustomer.add(temp);
}
}
fbr.close();
}
catch(Exception ex){*emphasized text*
System.out.println(ex.getMessage());
}
return readCustomer;
}
答案 0 :(得分:5)
在每次迭代时创建一个新对象,而不是一个以渐进方式填充的对象。另外,学习理解对象引用。
while ((strLine = fbr.readLine()) != null) {
Customer temp = new Customer();
// and so on
答案 1 :(得分:1)
使用
Customer temp;//instead of doing Customer temp = new Customer();
内部迭代
temp = new Customer();
在每个循环中都会创建一个新的 temp 实例,因此您可以根据需要将新客户添加到数组列表中。
答案 2 :(得分:0)
您只在顶部一次创建Consumer对象。这意味着,每次只是用不同的值更新同一个对象,并将其添加到列表中。因此,您需要为从文本文件中读取的每条记录创建Consumer对象。 (即)您需要在while循环中添加以下行,
Customer temp = new Customer();
答案 3 :(得分:-1)
不只是你的ID
而且列表中的整个对象都是相同的,因为你只需要使用一个Customer
,你必须在每个循环中创建新的客户。
我的意思是temp = new Customer();
必须在你的循环中