wusuoweiieq
无奈ieq
2020-09-21 22:16
采纳率: 84.2%
浏览 128
已采纳

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

package model;
//价格最低时买入,价格最高时卖出,允许,当天卖出,以便于止损
import java.util.Arrays;
public class Horse {
  public static void main(String[] args) {
    int[] prices = {5, 3, 7, 10, 13, 4};
    profit(prices); //输出
  }
  public static void profit(int[] prices) {
    //不分组,直接算差值
    //后面的减去前面的
    //排序
    int right = prices.length; //总共的天数 
    int num = (right - 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] = prices[j] - prices[i];//利润
        I[n] = i; //买
        J[n] = j;//卖
        n++;
      }
    } 
    //找出最大值
    int newp[] = Arrays.copyOf(p, num);
    Arrays.sort(newp); //排序
    int max = newp[newp.length - 1]; //最大值
    int index = Arrays.binarySearch(p, max); //找到了序号,此处为数组中序号,注意下
    int x = I[index] + 1;
    int y = J[index] + 1;
    System.out.println("第 " + x + " 天买入,第 " + y + " 天卖出,盈利 " + p[index]);
  }
}

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • caozhy
    已采纳

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

    //价格最低时买入,价格最高时卖出,允许,当天卖出,以便于止损
    import java.util.Arrays;
    public class Horse {
      public static void main(String[] args) {
        int[] prices = {5, 3, 7, 10, 13, 4};
        profit(prices); //输出
      }
      public static void profit(int[] prices) {
        //不分组,直接算差值
        //后面的减去前面的
        //排序
        int right = prices.length; //总共的天数 
        int num = (right - 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] = prices[j] - prices[i];//利润
            I[n] = i; //买
            J[n] = j;//卖
            n++;
          }
        } 
        //找出最大值
        int newp[] = Arrays.copyOf(p, num);
        Arrays.sort(newp); //排序
        int max = newp[newp.length - 1]; //最大值
        int index = 0; 
          for (i = 0; i < p.length; i++)
              if (max == p[i]) index = i;
        int x = I[index] + 1;
        int y = J[index] + 1;
        System.out.println("第 " + x + " 天买入,第 " + y + " 天卖出,盈利 " + p[index]);
      }
    }
    

    第 2 天买入,第 5 天卖出,盈利 10

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

    点赞 评论

相关推荐