如何防止数组越界

Cal*_*r99 1 java arrays

我正在努力编写一个程序,以最大化买卖股票的利润.我试图检查下一个索引中的值是否大于当前索引位置中的值,但是我的循环导致数组超出范围.它出现在这一行 if((shares [i])<(shares [i + 1]).)防止这种情况的最佳方法是什么.

编辑:我已经获得了股票价格清单.我每天都可以购买或出售买入或卖出.我的方法是找出股价的平均值.如果价格低于平均价格那么"买入"如果接下来的几天价格仍然低于"买入".反之亦然.如果数字大于平均值然后卖出,如果之后的日子仍然更大,那么持有销售.理想情况下,股票[9]我将以4欧元和股票[11]购买,我将以19欧元的价格出售.然而,当它试图检查股票之后的下一个指数时,检查是否出售或结束数组越界[11].

public static void main(String[] args)
{
    int [] shares ={3,7,4,2,10,11,8,5,4,8,19};
    int average= 0;
    int  buyOrSell = 0;
    int profit = 0;

    for(int i = 0; i< shares.length; i++)
    {
        average += shares[i];
    }

    average  /= shares.length;
    System.out.println(average);

    for(int i = 0; i < shares.length; i++)
    {
            if((shares[i] <= average) && (buyOrSell == 0))
            {
                if((shares[i]) < (shares[i+1]))
                {
                System.out.println("Buy" + shares[i]);
                buyOrSell++;
                System.out.println("Profit: " + (profit -= shares[i]));
                }
                else System.out.println("Hold Buy" + shares[i]);

            }

            if(shares[i] >= average && buyOrSell == 1)
            {
                if((shares[i]) > (shares[i+1]))
                {
                System.out.println("Sell" + shares[i]);
                buyOrSell--;
                System.out.println("Profit: " + (profit += shares[i]));
                }

                else System.out.println("Hold Sell" + shares[i]);
            }


    }

    System.out.println("Profit: "+ profit);

}
Run Code Online (Sandbox Code Playgroud)

感谢Gambs解决方案,我添加了这个if语句来解决我的问题.

if((i == shares.length -1)  && buyOrSell == 1 && (shares[i] >= average)) 
        {
            System.out.println("Sell" + shares[i]);
            buyOrSell--;
            System.out.println("Profit: " + (profit += shares[i]));
            break;

        }
Run Code Online (Sandbox Code Playgroud)

use*_*ser 6

当你到达数组的末尾时,shares[i+1]将抛出异常.您应该将循环中的限制减少一个:for(int i = 0; i < shares.length - 1; i++)