2013-03-17 89 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,你應該正確初始化它,以便迭代它。