Java ArrayList银行账户搜索不到、存款提示无效问题排查
问题根因
账号永远匹配不到的核心原因:你维护了两个完全独立、无任何关联的ArrayList,存储和搜索的路径完全不互通:
- main方法中你手动创建了临时列表
accountList,所有硬编码的银行账户都被存入了这个列表 - 负责搜索、存款逻辑的
myBank实例(Bank类对象),内部自带独立的list成员属性,这个属性从对象初始化后就一直是空的,没有存入任何账户
Bank的搜索方法只会遍历自己内部持有的空列表,自然永远匹配不到你输入的账号,固定触发“无效账号”提示,和你之前的判断完全一致。
具体修复步骤
1. 移除冗余的独立存储列表
删掉main方法中所有和临时accountList相关的代码:
// 以下代码全部删除 ArrayList<BankAccount> accountList = new ArrayList<>(); accountList.add(new BankAccount("123","Susan Richards")); accountList.add(new BankAccount("44567109","Delroy Jacobs")); accountList.add(new BankAccount("46376205","Sumana Khan"));
当前的类结构本来就是设计成由Bank类统一管理所有账户的,不需要在main方法里并行维护一套独立的存储列表。
2. 通过Bank类自带方法存入账户
Bank类已经封装了addAccount方法,会自动将新账户存入它内部用于搜索的列表,替换掉原来直接new账户塞入临时列表的逻辑:
// 硬编码创建账户,直接存入Bank的内部存储 myBank.addAccount("123","Susan Richards"); myBank.addAccount("44567109","Delroy Jacobs"); myBank.addAccount("46376205","Sumana Khan");
执行完这段代码后,Bank内部的搜索列表就会存在3个有效账户,匹配逻辑可以正常识别输入的账号。
3. 补充全量账户遍历能力
因为你最后需要打印所有账户的完整信息,但目前Bank类没有提供获取全量账户的方法,在Bank类中补充如下方法即可:
// 返回内部存储的账户副本,避免外部直接修改内部存储结构 public ArrayList<BankAccount> getAllAccounts() { return new ArrayList<>(list); }
4. 调整账户信息打印逻辑
把原来遍历临时accountList的循环,改成遍历Bank返回的全量账户列表:
System.out.println("Account Details..... \n"); for(BankAccount item : myBank.getAllAccounts()) { System.out.println("Account number: " + item.getAccountNumber()); System.out.println("Account name: " + item.getAccountName()); System.out.println("Current balance: " + item.getBalance()); System.out.println(); }
可选优化点
- 删除main方法中冗余的
BankAccount account = myBank.getItem(myAcc);代码:depositMoney方法内部已经封装了账号校验、获取对应账户的逻辑,这个变量创建后从未被使用,属于无效代码 BankAccount类中定义的private char choice;成员完全冗余,这个变量是main方法里的局部控制变量,不需要存在每个银行账户对象中,可直接删除- Bank类搜索方法中的循环条件
i <= list.size() - 1可简化为等价写法i < list.size(),代码更简洁
内容的提问来源于stack exchange,提问作者Luke Delves
相关产品推荐
相关产品推荐

