此问题在此处已有答案:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?(26个答案)
昨天关门了。
我对编程和stackoverflow都很陌生。我正在实现先到先得(FCFS)。但是我在输入[]ArrivalTime时,遇到了数组索引越界异常。我可能犯了一个愚蠢的错误,但我不知道为什么,请帮助我
import java.util.Scanner;
public class FCFS_Practice {
public static Scanner scanner = new Scanner(System.in);
static int numberOfProcess = 0;
int[]ProcessID = new int[numberOfProcess];
int[]ArrivalTime = new int[numberOfProcess];
int[]BurstTime = new int[numberOfProcess];
int[]CompletionTime = new int[numberOfProcess];
int[]TurnAroundTime = new int[numberOfProcess];
int[]WaitingTime = new int[numberOfProcess];
float avgWaitingTime = 0,avgTurnAroundTime = 0;
public void takeInput(){
System.out.println("Enter the number of process: ");
numberOfProcess = scanner.nextInt();
}
public void inputArrivalAndBurstTime(){
for(int i = 0;i < numberOfProcess;i++){
System.out.printf("Enter Arrival Time for Process %d: ",i+1);
ArrivalTime[i] = scanner.nextInt();
scanner.nextLine(); // Buffer Flush
System.out.printf("Enter Burst Time for Process %d: ",i+1);
BurstTime[i] = scanner.nextInt();
scanner.nextLine(); // Buffer flush
ProcessID[i] = i+1;
}
}
public void calculateCompletionTime(){
for(int i = 0 ; i < numberOfProcess ; i++){
if(i==0){
CompletionTime[0]=BurstTime[0];
} else if (ArrivalTime[i]<CompletionTime[i-1]) {
CompletionTime[i]=CompletionTime[i-1]+BurstTime[i];
} else {
CompletionTime[i]=ArrivalTime[i]+BurstTime[i];
}
}
}
public void calculateTurnAroundAndWaitingTime(){
for(int i = 0 ; i < numberOfProcess ; i++){
TurnAroundTime[i]=CompletionTime[i]+ArrivalTime[i];
WaitingTime[i]=TurnAroundTime[i]-BurstTime[i];
}
}
public void getAvgWaitingTimeAndAvgTurnAroundTime(){
for(int i = 0 ; i<numberOfProcess;i++){
avgTurnAroundTime+=TurnAroundTime[i];
avgWaitingTime+=WaitingTime[i];
}
avgWaitingTime = avgWaitingTime/numberOfProcess;
avgTurnAroundTime = avgTurnAroundTime/numberOfProcess;
}
public void getTable(){
System.out.println("ProcessNo. ArrivalTime BurstTime CompletionTime TurnAroundTime WaitingTime");
for(int i = 0 ; i < numberOfProcess ; i++){
System.out.println(ProcessID[i]+"\t\t"+ArrivalTime[i]+"\t\t"+BurstTime[i]+"\t\t"+CompletionTime[i]+"\t\t\t"+TurnAroundTime[i]+"\t\t\t"+WaitingTime[i]);
}
scanner.close();
}
}
[Output](https://i.stack.imgur.com/z1CEd.png)
2条答案
按热度按时间rslzwgfq1#
你问的
为什么在共享代码段中使用获取IndexOutOfBoundsException。
您声明了
static int numberOfProcess = 0;
并创建了许多长度为0的数组,因此每次尝试访问这些数组时都会得到IndexOutOfBoundsException
,它被抛出以指示某种类型的索引(如数组、字符串或向量)超出范围。解决方法?
numberOfProcess
后声明数组实现大小,并使它们的指针为静态。加分
nbysray52#
普通数组一旦声明就不能调整大小。因此请改用ArrayList
您已经使用大写字母开始变量名.. java编码约定
我已经相应地更改了变量名称
ArrayList explained