You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复maxBalanceAccounts方法:仅返回余额为最大值的账户

修复maxBalanceAccounts方法返回多余账户的问题

原代码问题分析

你的maxBalanceAccounts方法存在两个核心问题:

  1. 初始max值不合理:将max初始化为0,导致第一个余额为200.0的账户满足>=0的条件,被错误加入结果列表。
  2. 未清理非最大余额的账户:每次遇到更大或等于当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:03:02