【问题标题】:Cannot identify Error reasoning - Related to ArrayList and FOR loops, how could I fix my code? [duplicate]无法识别错误推理 - 与 ArrayList 和 FOR 循环相关,我该如何修复我的代码? [复制]
【发布时间】:2019-09-15 23:47:18
【问题描述】:

我正在创建一个非常简单的银行管理器类,它处理许多银行账户对象 - 每个对象都使用唯一的 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<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;
}
}

似乎一切正常,但是当我在 main 中使用此代码时,出现错误。

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,但出现错误。我无法弄清楚解决方案可能是什么,并且错误消息对我没有帮助,因为我是一个初学者,我真的很感激正确方向的一点,

谢谢大家。

【问题讨论】:

  • “但出现错误” - 添加该错误消息将非常有用(不是说:必需)。他们在那里是有原因的。

标签: java object for-loop arraylist netbeans


【解决方案1】:

我假设您遇到的错误是ConcurrentModificationException。使用“for each”循环浏览列表时,不应将其从列表中删除。

见: ConcurrentModificationException for ArrayList

【讨论】:

  • 感谢您向我指出,我已经研究了迭代器和解决方案,但是我能够使用以下方法制作更简洁的代码:bankAccounts.removeIf(BankAcc -> BankAcc.accountNumber() == accountNumber );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多