我正在努力編寫一個程序,以最大化在買賣股票中獲得的利潤。我正在嘗試檢查下一個索引中的值是否大於當前索引位置中的值,但是我的循環導致數組超出範圍。如果((份額[i])<(份額[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);
}
感謝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;
}
您是否在調試器中運行此操作來觀察失敗的行?或者甚至讀你的異常來確定失敗的那一行? – djechlin 2013-03-11 17:32:46