ArrayList方法添加错误

时间:2014-10-19 14:36:15

标签: java

错误是客户具有不同的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;        
}

4 个答案:

答案 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();必须在你的循环中