我正在尝试编写一个程序来最大化买卖股票的利润。我正在尝试检查下一个索引中的值是否大于当前索引位置中的值,但是我的循环导致数组超出范围。它发生在这一行 if((shares[i]) < (shares[i+1]).)防止这种情况的最佳方法是什么。
编辑:我得到了一份股价清单。每天我可以买或卖买或卖。我的方法是找到股价的平均值。如果价格低于平均水平,则“买入”,如果接下来的几天价格仍然较低,则持有“买入”。反之亦然。如果数量大于平均值,则卖出,如果之后的一天仍然更大,则持有卖出。理想情况下,在股票 [9] 我将以 4 欧元买入,在股票 [11] 我将以 19 欧元卖出。但是,在检查是否出售时,数组越界,因为它尝试检查 share[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);
}
感谢 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;
}