したがって、エラーメッセージは次のとおりです。
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)
私のコードを
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;
}
}
}
エラーはにあります
if(r.get(pointer).getArrivalTime()<r.get(pointer+1).getArrivalTime())
しかし、配列インデックスは、ポインタのインクリメント後のコードで問題なくチェックされていると思います。配列の範囲外の例外か何か他のものですか?通常、配列の場合、エラーはArrayIndexOutOfBoundsException
です。ここで何が問題になっているようですか?
Java.lang.IndexOutOfBoundsException:インデックス:0、サイズ:0
ArrayListは空です。要素は含まれていません。
Index: 0, Size: 0.
アクセスしようとしています。つまり、IndexOutOfBoundsException
を取得しています。
if(r.size() == 0) && r.size() < pointer + 1) //If ArrayList size is zero then simply return from method.
return;
空の配列を渡しています。入力に対していくつかの検証を行う必要があります
if (r == null || r.size()==0){
throw new RuntimeException("Invalid ArrayList");
}
配列サイズは0です。反復するには、正しく初期化する必要があります。