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

Java中locked-up shares计算逻辑错误,求正确实现方案

问题分析与代码修正

问题根源

你的代码逻辑错误在于第二个循环中,每次都是用解锁股总和直接减去当前时间段的解锁股,而非在上一次计算出的限售股基础上递减。比如第三个时间段,你用9000-3000得到6000,但正确逻辑应该是用上一个阶段的7000减去3000得到4000。

修正后的代码

public static List<Long> getLockedUpShares(HashMap<String, String> testcase, String token,
            List<IPOGridData> ipoGridList) {
        // 计算所有解锁股的总和
        Long totalUnlockShares = 0L;
        for (IPOGridData data : ipoGridList) {
            totalUnlockShares += data.getUnlockShares();
        }
        
        List<Long> lockedUpSharesList = new ArrayList<>();
        // 第一个阶段的限售股就是总和
        Long currentLockedUp = totalUnlockShares;
        lockedUpSharesList.add(currentLockedUp);
        
        // 遍历每个解锁股,依次递减计算后续阶段的限售股
        for (IPOGridData data : ipoGridList) {
            currentLockedUp -= data.getUnlockShares();
            lockedUpSharesList.add(currentLockedUp);
        }
        
        // 移除最后一个多余的元素(遍历完所有解锁股后的递减结果无需保留)
        lockedUpSharesList.remove(lockedUpSharesList.size() - 1);
        return lockedUpSharesList;
    }

逻辑说明

  1. 先计算所有解锁股的总和totalUnlockShares,作为第一个阶段的限售股。
  2. 初始化currentLockedUp为总和,加入结果列表。
  3. 遍历每个时间段的解锁股,每次用currentLockedUp减去当前的解锁股,得到下一个阶段的限售股并加入列表。
  4. 最后移除最后一个元素(遍历完所有n个解锁股后,会多生成一个无意义的0值,需要删除)。

用你的示例数据测试:

  • 初始currentLockedUp=9000,加入列表 → [9000]
  • 减去第一个解锁股2000 → 7000,加入列表 → [9000,7000]
  • 减去第二个解锁股3000 → 4000,加入列表 → [9000,7000,4000]
  • 减去第三个解锁股4000 → 0,加入列表后删除,最终结果就是[9000,7000,4000],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:05:22