修复maxBalanceAccounts方法:仅返回余额为最大值的账户
修复maxBalanceAccounts方法返回多余账户的问题
原代码问题分析
你的maxBalanceAccounts方法存在两个核心问题:
- 初始max值不合理:将
max初始化为0,导致第一个余额为200.0的账户满足>=0的条件,被错误加入结果列表。 - 未清理非最大余额的账户:每次遇到更大或等于当前max的账户时直接添加,但没有移除之前加入的、余额小于新max的账户,最终结果混入了非最大余额的账户。
修正方案:分两次遍历实现逻辑
先遍历所有账户找到最大余额,再二次遍历收集所有余额等于最大值的账户,确保结果仅包含目标账户。
修正后的代码
public static ArrayList<Account> maxBalanceAccounts(ArrayList<Account> accounts) { ArrayList<Account> maxBalanceAccounts = new ArrayList<>(); // 处理空列表,避免空指针异常 if (accounts.isEmpty()) { return maxBalanceAccounts; } // 第一步:遍历找到最大余额 double max = accounts.get(0).getBalance(); for (Account account : accounts) { if (account.getBalance() > max) { max = account.getBalance(); } } // 第二步:收集所有余额等于最大值的账户 for (Account account : accounts) { // 浮点数比较建议用精度阈值,避免精度误差 if (Math.abs(account.getBalance() - max) < 1e-9) { maxBalanceAccounts.add(account); } } return maxBalanceAccounts; }
代码说明
- 先处理空列表场景,避免后续操作抛出空指针异常;
- 用第一个账户的余额初始化
max,适配所有账户余额为负数的极端场景; - 浮点数比较使用
Math.abs(差值) < 1e-9的方式,避免double类型的精度误差导致的判断错误。
可选:Java 8+流式API实现
如果项目使用Java 8及以上版本,可通过流式API简化代码:
import java.util.ArrayList; import java.util.stream.Collectors; public static ArrayList<Account> maxBalanceAccounts(ArrayList<Account> accounts) { if (accounts.isEmpty()) { return new ArrayList<>(); } double max = accounts.stream() .mapToDouble(Account::getBalance) .max() .orElse(0.0); return accounts.stream() .filter(account -> Math.abs(account.getBalance() - max) < 1e-9) .collect(Collectors.toCollection(ArrayList::new)); }
内容的提问来源于stack exchange,提问作者user19382080
相关产品推荐
相关产品推荐

