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

Java股票买卖算法运行抛出IndexOutOfBoundsException异常如何解决

错误原因
  • 核心问题是循环内的三个if判断是并行执行没有互斥,触发前一个if修改flag状态后,后续的if仍会判断执行,导致生成了只有买入日期、没有卖出日期的无效交易记录,最终打印时调用get(1)访问第二个元素触发下标越界。
  • 具体到你提供的测试用例执行流程:当i=6(最后一个元素下标)时:
    1. 第一个if判断满足(是最后一天且持有股票),执行添加卖出日期,将flag改为0
    2. 第二个if判断也满足(flag已变为0且当日价格高于前一天),会额外新增一条只有买入日期的交易记录
    3. 这条新记录没有对应的卖出日期,后续打印调用get(1)时就会抛出越界异常
修复方案

将并行的if改为互斥的if-else if结构,确保每轮循环只执行一个分支,同时补充边界逻辑:

import java.util.*;
class stockbuysell{
    //Function to find the days of buying and selling stock for max profit.
    public static void main(String []args){
        int A[] = {100,180,260,310,40,535,695};
        ArrayList<ArrayList<Integer>> al = stockBuySell(A,7);
    }
    static ArrayList<ArrayList<Integer> > stockBuySell(int A[], int n) {
        ArrayList<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>();
        if(n <= 1) return al; // 不足两天没有交易可能
        int flag = 0;
        int idx = 0;
        for(int i=1;i<n;i++){
            if(i==n-1 && flag==1){
                // 最后一天仍持有,直接卖出
                al.get(idx).add(i);
                flag = 0;
                idx++;
            } else if(flag == 0 && A[i]>A[i-1]){
                // 未持有且价格上涨,买入
                al.add(new ArrayList<Integer>());
                al.get(idx).add(i-1);
                flag = 1;
            } else if(flag == 1 && A[i]<A[i-1]){
                // 持有且价格下跌,卖出
                al.get(idx).add(i-1);
                flag = 0;
                idx++;
            }
        }
        for(int i=0;i<al.size();i++){
            System.out.println("买入日:"+al.get(i).get(0)+" 卖出日:"+al.get(i).get(1));
        }
        return al;
    }
}

修复后运行输出为:

买入日:0 卖出日:3
买入日:4 卖出日:6

符合测试用例的最大利润交易逻辑。

内容的提问来源于stack exchange,提问作者Pavan venkata sai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:06:01