You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现FCFS调度算法时出现数组越界异常,求排查解决

问题根源与修复方案

核心错误:数组初始化时机错误

你代码里的ProcessID、ArrivalTime等数组是在类实例化时就创建的,此时numberOfProcess的初始值是0,所以这些数组的长度都是0。后续在takeInput方法中修改numberOfProcess的数值,并不会改变已经创建的数组长度——数组一旦创建,长度就固定了。当你在inputArrivalAndBurstTime循环里访问ArrivalTime[i]时,自然会触发数组索引越界异常。

修复步骤

  1. 调整数组声明与初始化时机
    把数组的声明和初始化分开,先在类里声明数组,等获取到numberOfProcess的值后再创建对应长度的数组:

    修改后的类成员变量部分:

    public static Scanner scanner = new Scanner(System.in);
    static int numberOfProcess = 0;
    // 只声明数组,不初始化
    int[] ProcessID;
    int[] ArrivalTime;
    int[] BurstTime;
    int[] CompletionTime;
    int[] TurnAroundTime;
    int[] WaitingTime;
    float avgWaitingTime = 0, avgTurnAroundTime = 0;
    

    然后在takeInput方法中添加数组初始化逻辑:

    public void takeInput(){
        System.out.println("Enter the number of process: ");
        numberOfProcess = scanner.nextInt();
        // 获取进程数后,初始化对应长度的数组
        ProcessID = new int[numberOfProcess];
        ArrivalTime = new int[numberOfProcess];
        BurstTime = new int[numberOfProcess];
        CompletionTime = new int[numberOfProcess];
        TurnAroundTime = new int[numberOfProcess];
        WaitingTime = new int[numberOfProcess];
    }
    
  2. 修正周转时间计算逻辑
    你代码里calculateTurnAroundAndWaitingTime方法的周转时间计算有误,正确的公式是:

    周转时间(TurnAroundTime)= 完成时间(CompletionTime)- 到达时间(ArrivalTime)

    修改后的方法:

    public void calculateTurnAroundAndWaitingTime(){
        for(int i = 0 ; i < numberOfProcess ; i++){
            TurnAroundTime[i] = CompletionTime[i] - ArrivalTime[i];
            WaitingTime[i] = TurnAroundTime[i] - BurstTime[i];
        }
    }
    

额外提示

Java变量名规范一般采用小驼峰命名(比如processID而非ProcessID),虽然不影响运行,但养成规范的命名习惯能提升代码可读性。

内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:50:24