Dus de foutmelding is deze:
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)
met mijn code als
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;
}
}
}
De fout is bij
if(r.get(pointer).getArrivalTime()<r.get(pointer+1).getArrivalTime())
maar ik denk dat de array-index goed is gecontroleerd met de code na de verhoging van de aanwijzer. Is het een array-out-of-bounds-uitzondering of iets anders? Normaal gesproken is de fout ArrayIndexOutOfBoundsException
wanneer het de array is. Wat lijkt hier het probleem te zijn?
Antwoord 1, autoriteit 100%
java.lang.IndexOutOfBoundsException: Index: 0, Grootte: 0
ArrayList is leeg. Het bevat geen enkel element.
Index: 0, Size: 0.
Je probeert er toegang toe te krijgen. Dus je krijgt IndexOutOfBoundsException
.
if(r.size() == 0) && r.size() < pointer + 1) //If ArrayList size is zero then simply return from method.
return;
Antwoord 2, autoriteit 83%
Je geeft een lege array door. Je zou wat validatie moeten doen op de invoer
if (r == null || r.size()==0){
throw new RuntimeException("Invalid ArrayList");
}
Antwoord 3
Uw arraygrootte is 0, u moet deze correct initialiseren om deze te herhalen.