您可以帮我删除银行计划中的帐户吗?
删除客户的方法工作正常。客户可以拥有多个帐户,删除其中一个帐户的代码无效。它的作用是删除整个客户,而不仅仅是账户。 我相信它与迭代器有关。我的代码删除它,它是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
}
}
}
}
}
答案 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
。