甘雨降临 2023-02-24 19:23 采纳率: 0%
浏览 15

eption: Index -1 out of bounds for length 100010 at Main.main(Main.java:16)

import java.util.*;
import java.io.*;

public class Main{
    static int N = 100010;
    static int n,m;
    static int skill[] = new int[N];
    static int minus[] = new int[N];
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        long cnt = 0;                             //long型
        for(int i = 0; i < n; i--){
            skill[i] = sc.nextInt();
            minus[i] = sc.nextInt();
            cnt += (skill[i] - 1)/ minus[i] + 1;     //向上取整
        }
        
        m = (int)Math.min((long)m,cnt);          //类型转换
        int l = 0, r = (int)1e6, mid = 0;
        while(l < r){
            mid = l + r + 1 >> 1;                //二分模板
            if(check(mid)) l = mid;
            else r = mid - 1;
        }

原因for循环最后面的i++,写成了i--

  • 写回答

3条回答 默认 最新

  • CodeBytes 2023-02-24 19:37
    关注

    该回答引用ChatGPT

    根据错误提示 Index -1 out of bounds for length 100010,很可能是因为数组下标出现了负数,导致访问了数组越界。根据代码中的 for 循环,我们可以发现循环的下标变量 i 是在递减,而不是递增。这意味着在循环中,i 的值会不断减小,直到小于 0,从而导致数组下标出现负数,从而触发了数组越界错误。

    因此,要修复这个错误,只需将 for 循环中的递减操作修改为递增操作即可。具体来说,将代码中的 for(int i = 0; i < n; i--){ 改为 for(int i = 0; i < n; i++){ 即可。

    以下是修正后的代码示例:

    import java.util.*;
    import java.io.*;
    
    public class Main{
        static int N = 100010;
        static int n,m;
        static int skill[] = new int[N];
        static int minus[] = new int[N];
    
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            n = sc.nextInt();
            m = sc.nextInt();
            long cnt = 0;
            for(int i = 0; i < n; i++){
                skill[i] = sc.nextInt();
                minus[i] = sc.nextInt();
                cnt += (skill[i] - 1) / minus[i] + 1;
            }
    
            m = (int)Math.min((long)m, cnt);
            int l = 0, r = (int)1e6, mid = 0;
            while(l < r){
                mid = l + r + 1 >> 1;
                if(check(mid)) l = mid;
                else r = mid - 1;
            }
        }
        
        // 根据题目描述写出 check 函数的代码
        public static boolean check(int mid){
            // TODO: 实现 check 函数
            return true;
        }
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月24日