2013-03-17 58 views
2

那么错误信息是这样的:索引越界异常的java

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

+7

由于您的'ArrayList'为空,因此显示此错误。 – 2013-03-17 15:41:33

+0

尝试使用调试器来调试您的代码,您可以准确获知发生错误的位置和方式。 – 2013-03-17 15:41:34

+0

你应该在decleration时检查指针+ 1的大小以避免这个错误。另外,检查r是否为空并且不为空可能是一个好主意。 – Oren 2013-03-17 15:45:43

回答

5

java.lang.IndexOutOfBoundsException:指数:0,大小:0

的ArrayList是空的。它不包含任何元素。

Index: 0, Size: 0. 

您试图访问it.So你得到IndexOutOfBoundsException

if(r.size() == 0) && r.size() < pointer + 1) //If ArrayList size is zero then simply return from method. 
    return; 
3

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

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

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