无法确定错误原因 - 与ArrayList和FOR循环相关,我该如何修复我的代码?

8 浏览
0 Comments

无法确定错误原因 - 与ArrayList和FOR循环相关,我该如何修复我的代码?

这个问题已经在此处有答案:

在迭代时删除集合中的元素

我正在创建一个非常简单的银行经理类,它处理许多银行账户对象 - 每个对象都使用唯一的accountNumber、accName等创建。这就是一个银行账户的创建方式:

package banksystem;
import java.util.*;
public class BankAcc {
    private String accountName;
    private int accountNumber;
    private int accountOverdraft;
    private int currentBalance;
public BankAcc(String accountName, int accountNumber, 
int accountOverdraft, int currentBalance){
    this.accountName = accountName;
    this.accountNumber = accountNumber;
    this.accountOverdraft = accountOverdraft;
    this.currentBalance = currentBalance;
}
public void deposit(int money){this.currentBalance += money;}
public void withdraw(int money){
    int curr = this.currentBalance + this.accountOverdraft;
    if (money < curr){this.currentBalance -= money;}
}
public String accountName(){return this.accountName;}
public int accountNumber(){return this.accountNumber;}
public int getCurrentBalance(){return this.currentBalance;}
public int accountOverdraft(){return this.accountOverdraft;}
}

银行账户经理类是如下创建的,我使用for循环以便程序可以识别我要编辑的银行账户。

package banksystem;
import java.util.*;
public class BankMngr {
    private ArrayList bankAccounts = new ArrayList<>();
public BankMngr(){
    this.bankAccounts = new ArrayList();
}
public void addBankAcc(String accountName, int accountNumber, int 
accountOverdraft, int currentBalance){
    BankAcc newBankAcc = new BankAcc(accountName, accountNumber, 
    accountOverdraft, currentBalance);
    bankAccounts.add(newBankAcc);
}
public void removeBankAcc(int accountNumber){
    for(BankAcc b: bankAccounts){
        if (b.accountNumber() == accountNumber){bankAccounts.remove(b);}
        else;
    }
}
public String accountsList(){
    String s = "ACCOUNTS UNDER MANAGER:" + "\n";
    for(BankAcc b: bankAccounts){s+= b.accountNumber()+ " " + 
    b.accountName() + "\n";}
    return s;
}
}

一切都看起来很好,但当我在我的主程序中使用这段代码时,我得到了一个错误。

package banksystem;
import java.util.*;
public class BankSystem{
public static void main(String[] args) {
    BankMngr ManagerBob = new BankMngr();
    ManagerBob.addBankAcc("John", 1425, 2000, 1000);
    ManagerBob.addBankAcc("Kane", 1358, 4000, 6000);
    ManagerBob.addBankAcc("Kane", 1693, 4000, 6000);
    ManagerBob.addBankAcc("Dave", 1976, 2000, 3500);
    System.out.println(ManagerBob.accountsList());
    ManagerBob.removeBankAcc(1976);
    System.out.println(ManagerBob.accountsList());
}
}

我只想删除1976账户但是却出现了错误。我想不出解决方案是什么,错误消息也没有帮助我,因为我是一个很新手,我真的很感激指点。

谢谢大家。

admin 更改状态以发布 2023年5月24日
0
0 Comments

我假设你遇到的错误是 ConcurrentModificationException。当使用“for each”循环遍历列表时,不应该从列表中删除任何元素。

参考链接:
ConcurrentModificationException for ArrayList

0