删除帐户,银行计划

时间:2014-09-25 19:14:42

标签: java iterator

您可以帮我删除银行计划中的帐户吗?

删除客户的方法工作正常。客户可以拥有多个帐户,删除其中一个帐户的代码无效。它的作用是删除整个客户,而不仅仅是账户。 我相信它与迭代器有关。我的代码删除它,它是customerlist中的迭代器。但是我怎么能这样做呢?

删除客户的方法:

public void deleteCustomer(String customerNumber) {        
    Iterator<Customer> it = customers.iterator();
    while (it.hasNext()) {
        Customer c = it.next();
        if (c.getNumber().equals(customerNumber)) {
            it.remove();
        }
    }
}

删除帐户的方法(非工作):

public void deleteAccount(String accountId, String customerNumber) {        
    Iterator<Customer> it = customers.iterator();
    while (it.hasNext()) {
        Customer c = it.next();
        if (c.getNumber().equals(customerNumber)) {
            for(Account a: c.getAccounts()) {
                if(a.getAccountId().equals(accountId)) {
                    it.remove();                            //I Think it's wrong here
                }
            }
        }
    }
}   

2 个答案:

答案 0 :(得分:3)

您需要使用Iterator类在帐户上添加第二级迭代,就像您在迭代客户时所做的那样。您的代码中的问题是使用以下语句(因为您怀疑):

it.remove();

it引用 customers 列表的迭代器。因此,该行所做的是删除客户而不是帐户。只需添加另一个循环,如下所示:

Iterator<Customer> it = customers.iterator();
while (it.hasNext()) {
    Customer c = it.next();
    if (c.getNumber().equals(customerNumber)) {
        Iterator<Account> it2 = c.getAccounts().iterator();
        while (it2.hasNext()) {
           Account a = it2.next();       
           if (a.getAccountId().equals(accountId)) {
               it2.remove();                      
           }
        }
    }
}

答案 1 :(得分:1)

您需要在帐户上创建Iterator,而不是客户:

for(Customer c : customers) {
    if (c.getNumber().equals(customerNumber)) {
        Iterator<Account> it = c.getAccounts().iterator();
        while(it.hasNext()) {
            Account a = it.next();
            if(a.getAccountId().equals(accountId)) {
                it.remove();
                break;                            
            }
        }
        break;
    }
}

在找到帐户和客户时,我还添加了break