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

如何实现不超限取款求和并定位超限交易ID?

解决多笔取款超限检测的代码问题

需求说明

计算多笔取款的累计总和,确保不超过给定限额;当累计总和超限时,输出触发超限的那笔交易ID。

原代码的问题分析

原代码存在多处语法和逻辑错误,直接导致“无法解析符号'b.amount'”的错误,具体问题如下:

  • stream().map()仅支持单元素处理,不能传入(a,b)两个参数,这是b.amount无法解析的核心原因——map方法不会提供第二个元素参数
  • 参数amoutLimit拼写错误(应为amountLimit),且未声明参数类型
  • 代码中使用的creditLimit变量未定义,实际应使用传入的限额参数
  • Customer类定义语法错误:用圆括号()替代了大括号{},且成员变量TransactionId的大小写与代码中引用的transactionId不匹配
  • 方法声明返回String,但代码中返回Collections.emptyList(),返回值类型完全矛盾
  • 输入示例是字符串列表,但方法参数是List<Customer>,缺少字符串到Customer对象的转换逻辑

修正后的代码实现

import java.util.List;
import java.util.Arrays;

// 修正Customer类定义,统一命名规范并添加对象构造逻辑
class Customer {
    String firstName;
    String lastName;
    String email;
    int amount;
    String transactionId;

    public Customer(String inputStr) {
        String[] parts = inputStr.split(",");
        this.firstName = parts[0];
        this.lastName = parts[1];
        this.email = parts[2];
        this.amount = Integer.parseInt(parts[3]);
        this.transactionId = parts[4];
    }
}

public class WithdrawalLimitChecker {
    public static String findOverLimitTransaction(List<String> customerStrs, int amountLimit) {
        // 将输入字符串转换为Customer对象列表
        List<Customer> customers = customerStrs.stream()
                .map(Customer::new)
                .toList();

        int totalWithdrawal = 0;
        for (Customer customer : customers) {
            totalWithdrawal += customer.amount;
            // 累计后超过限额,返回当前交易ID
            if (totalWithdrawal > amountLimit) {
                return customer.transactionId;
            }
        }
        // 所有交易未超限,返回null或空字符串
        return null;
    }

    // 测试示例
    public static void main(String[] args) {
        List<String> input = Arrays.asList("John,Doe,john@doe.com,200,TrId1", "John,Doe,john@doe.com,2,TrId2");
        int limit = 200;
        String result = findOverLimitTransaction(input, limit);
        System.out.println(result); // 输出:TrId2
    }
}

代码说明

  1. 修正Customer类的语法错误,添加了从输入字符串生成对象的构造方法,解决输入格式匹配问题
  2. 改用普通循环实现累计求和,逻辑直观,便于跟踪累计总额和判断超限时机
  3. 修复了参数命名、类型声明、返回值类型等语法问题
  4. 测试代码直接验证输入示例,输出符合预期的TrId2

内容的提问来源于stack exchange,提问作者learningUser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:32:23