问题
So the error message is this:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at FcfsScheduler.sortArrival(FcfsScheduler.java:77)
at FcfsScheduler.computeSchedule(FcfsScheduler.java:30)
at ScheduleDisks.main(ScheduleDisks.java:33)
with my code as
public void sortArrival(List<Request> r)
{
int pointer = 0;
int sProof = 0;
while(true)
{
if(r.get(pointer).getArrivalTime()<r.get(pointer+1).getArrivalTime())
{
Request r1 = r.get(pointer);
Request r2 = r.get(pointer+1);
r.set(pointer, r2);
r.set(pointer+1, r1);
}
else
{
sProof++;
}
++pointer;
if(pointer>r.size()-2)
{
pointer=0;
sProof=0;
}
if(sProof>=r.size()-2)
{
break;
}
}
}
The error is at
if(r.get(pointer).getArrivalTime()<r.get(pointer+1).getArrivalTime())
but I think the array index is checked ok with the code after the increment of pointer. Is it an array out of bounds exception or something else? Normally, the error is ArrayIndexOutOfBoundsException
when it is the array. What seems to be the problem here?
回答1:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
ArrayList is empty. It does not contain any element.
Index: 0, Size: 0.
You are trying to access it.So you are getting IndexOutOfBoundsException
.
if(r.size() == 0) && r.size() < pointer + 1) //If ArrayList size is zero then simply return from method.
return;
回答2:
You are passing in an empty array. You should do some validation on the inputs
if (r == null || r.size()==0){
throw new RuntimeException("Invalid ArrayList");
}
回答3:
Your array size is 0, you should initialize it correctly in order to iterate it.
来源:https://stackoverflow.com/questions/15462649/index-out-of-bounds-exception-java