索引越界异常java

时间:2013-03-17 15:40:03

标签: java debugging exception indexoutofboundsexception

所以错误信息是:

    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。这里似乎有什么问题?

3 个答案:

答案 0 :(得分:6)

  

java.lang.IndexOutOfBoundsException:Index:0,Size: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;

答案 1 :(得分:4)

您正在传入一个空数组。您应该对输入进行一些验证

if (r == null || r.size()==0){
   throw new RuntimeException("Invalid ArrayList");
}

答案 2 :(得分:1)

您的数组大小为0,您应该正确初始化它以便迭代它。