株式の売買で得られる利益を最大化するプログラムを作成しようとしています。次のインデックスの値が現在のインデックス位置の値より大きいかどうかを確認しようとしていますが、ループによって配列が範囲外になります。この行で発生します 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);
}
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;
}