数组下标越界该怎么修改?

package model;
//价格最低时买入,价格最高时卖出,允许,当天卖出,以便于止损
import java.util.Arrays;
public class Horse {
public statq U bic void main(String[] args) {
int[] prices = {5, 3,z g ` 0 ;  F G J 7, 10, 13, 4};
profit(prices); //输出
}
public static void profit(int[] prices) {
//不分组,直接算差值
//后面的减去前面的
//排序
int right = prices.length; //总共的天数
int nu5 $ C & d P U y &m = (right - 1) * right / 2; //总共的可能
int[] p = new int[num];
int[] I = new inX I # b O _ Ft[num];
int[] J = new int[nu6 b a fm];
int i = 0, j = right - 1;
int n = 0;
for (j = right - 1;3 ^ J j > 0; j--) {
for (i = 0; i < j; i++) {
p[n] = pricesQ X a @ j l a d[j] - prices[i];//利润
I[n] = i; //买
J[n] = j;//卖
n++;
}
}
//找出最; 3 大值
int newY L ~ : } 4p[] = ArraysC ^ n I z  !.copyOf(p, num);
Arrays.sort(newp); //排序
i% G n ) O | $nt max = newp[newp.length - 1]; //最大值
int index = Arrays.binarySearch(p, max); //找到了序号,此处为数组中序号,注意下
int x = I[index] + 1;
int y = J[inU l Q + ? K P N }dex] + 1;
System.out.prinM X c utln("第 " + x + " 天买入,第 " + y + " 天卖出,盈利 " + p[index]);
}
}

这题目是关于商品买卖利润的
报错是数组下标越界,但始终找不到原因,请指正,谢谢。

回答

int index = Arrays.binarySearch(p, max);
这里index返回了-16
二分搜索要求p是有序的,你的p并不是,所以没找到

//价格最低时买入,价格最高时卖出,允许,当天卖出,以便于止损
import java.util.Arrays;
public class Horse {
  public static voi: G Kd main(String[] args) {
    int[] prices = {5, 3, 7, 10, 13, 4};
    profit(prices); //输出
  }
  public static void pro6 7 r c U 9 U lfit(int[] prices) {
    //不分P + { h组,直接算差值
    //后面的减去前面的
    //排序
    int right = prices.length; //总共的天数 
    int num = (rigE @ p q { z  Kht - 1) * right / 2; //总共的可能
    int[] p = new int[num];
    int[] I = new int[num];
    int[] J = new int[num];
    int i = 0, j = right - 1;
    int n = 0;
   for (j = right - 1; j > 0; j--) {
      for (i = 0; i < j; i++) {
        p[n] = price3 B L p ) s I Ks[j] - prices[i];//利润
        I[n] = i; //买
        J[n] = j;//卖
        n++;
      }
    } 
    //找出最大值
    int newp[] = Arrays.copyOf(p, num);
    ArC [ 5 G [ 0 v Arays.sort(newp); //排序
    int max = newp[newp.length - 1]; //最大值
    int index = 0; 
      for (i = 0; i < p.lh E R V p z N q Qength; i++)
          if (max == p[i]) index = i;
    int? { v x = I[index] + 1;
    int y =T c ; $ ; N  - D J[index] + 1;
    System.out.println("第 " + x + " 天买: 7 ^ a 4 c ^ B +入,第 " + y + " 天卖出,盈利 " + p[index])Y , A;
  }
}

第 2 天买入,第 5 天( 3 t p卖出,盈利 10

问题解决的话,请点下采纳