-5

I am creating a very simple simple Bank Manager Class which handles a number of Bank Account objects - each object is created with a unique accountNumber, accName, etc., This is how a bank account is created:

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;}

}

The bank account Manager class is created as below, I am using for loops so that the program can identify Bank Accounts I want to edit.

package banksystem;

import java.util.*;

public class BankMngr {

    private ArrayList<BankAcc> bankAccounts = new ArrayList<>();

public BankMngr(){

    this.bankAccounts = new ArrayList<BankAcc>();
}

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;
}
}

All seems to work fine, but when I use this code in my main, I get an error.

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());
}

}

I just want to remove the account 1976 but get an error. I can't figure out what the solution may be, and the error message doesn't help me as I'm quite a beginner, I'd really appreciate a point in the right direction,

thanks guys.

Pepe
  • 59
  • 6
  • 3
    _"but get an error"_ - it would be extremely useful (not to say: required) to add that error message. They are there for a reason. – Marvin Apr 26 '19 at 12:49

1 Answers1

0

I'm assuming the error you're getting is the ConcurrentModificationException. You shouldn't remove from a list when browsing it with a "for each" loop.

See: ConcurrentModificationException for ArrayList

sawprogramming
  • 737
  • 1
  • 9
  • 15
  • 1
    Thanks for pointing me here, I've looked into iterators and the solutions, however I was able to make much neater code using: bankAccounts.removeIf(BankAcc -> BankAcc.accountNumber() == accountNumber); – Pepe Apr 26 '19 at 16:22