2012-10-04 21 views
2

我已經做了一個名爲OutlierInfo類如下拆分一個ArrayList和合並他們回來

public class OutlierInfo 
{ 
    public String month; 
    public int year; 
    public String id; 
    public int serialId; 

    public void setSerialId(int serialid) 
    { 
     serialId=serialid; 
    } 

    public void setMonth(String monthh) 
    { 
     month=monthh; 
    } 

    public void setYear(int yearr) 
    {  
     year=yearr; 
    } 

    public void setId(String idd) 
    {   
     id=idd; 
    } 
} 

廣告我Outlierinfo.I添加OutlierInfo的一些對象到ArrayList類型的ArrayList。現在我要做的是按照它們的SerialId對對象進行分組,然後將每個組的數組列表合併,然後合併組中的所有數組列表 這是我編寫的代碼,但它只是拋出錯誤,我不知道爲什麼。我需要一些幫助來找出爲什麼下面的代碼給出錯誤?

public class ArraylistSort 
{ 
    ArrayList<OutlierInfo> result = new ArrayList(); 
    static ArrayList<ArrayList<OutlierInfo>> groupResult = new ArrayList<ArrayList<OutlierInfo>>(); 
    String[] months = { "JAN", "FEB", "MAR", "APR" , 
         "MAY", "JUN", "JUL", "AUG" , 
         "SEP", "OCT", "NOV", "DECM" 
         }; 
    int counter=0; 
    int count=0; 

    public ArraylistSort(){ 

     for(int i=0;i<2;i++) 
     { 
      for(int j=0;j<4;j++) 
      {  
       int year=2000+j; 
       OutlierInfo o=setValues(i,months[j],year); 
       result.add(o); 
       System.out.println("result size"+result.size()); 
      } 
     } 

     while(result.size()!=0) 
     {  
      OutlierInfo info1=new OutlierInfo(); 
      info1=result.get(counter); 
      ArrayList<OutlierInfo> partialInfo=new ArrayList(); 

      for(int j=1;j<count;j++) 
      {  
       OutlierInfo info2=new OutlierInfo(); 
       info2=result.get(j); 
       if(info1.serialId==info2.serialId) 
       { 
        partialInfo.add(info2); 
        result.remove(info2); 
       }             
      } 

      partialInfo.add(info1); 
      System.out.println("partiainfosize"+partialInfo.size()); 
      groupResult.add(partialInfo); 
      result.remove(info1); 
      System.out.println("r size "+result.size()); 
     } 

     count=result.size(); 
    } 

    private OutlierInfo setValues(int id,String month,int year) 
    { 
     OutlierInfo a = new OutlierInfo(); 
     a.setSerialId(id); 
     a.setMonth(month); 
     a.setYear(year); 

     return a; 
    } 

    public static void main(String[] args) 
    { 
     ArraylistSort as=new ArraylistSort(); 
    } 
} 

我得到以下錯誤:有人可以幫助我理解的錯誤沒有得到任何邏輯錯誤?

initial size 0 
result size1 
result size2 
result size3 
result size4 
result size5 
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 
result size6 
result size7 
result size8 
    at java.util.ArrayList.RangeCheck(ArrayList.java:547) 
    at java.util.ArrayList.get(ArrayList.java:322) 
    at STAnalysis.ArraylistSort.<init>(ArraylistSort.java:56) 
    at STAnalysis.ArraylistSort.main(ArraylistSort.java:98) 
Java Result: 1 

UPDATE

是我目前所面臨的是,當我實際上將對象添加到ArrayList中的錯誤「索引越界」所引發的最大的困惑!

UPDATE

我固定it.Turns我發現我搞砸了與curleybraces.My最終代碼

public class StAnamoliesSequencer 
{ 
    ArrayList<OutlierInfo> stAnomalies =new ArrayList();//arraylist of spatio-temporal outliers 
    ArrayList<ArrayList<OutlierInfo>> sequencedStAnomalies=new ArrayList<ArrayList<OutlierInfo>>(); 
    int firstElement; 

    public StAnamoliesSequencer() 
    { 
     firstElement=0;  
    } 


    public ArrayList<ArrayList<OutlierInfo>> sequenceStAnomalies(ArrayList<OutlierInfo> sTanomalies) 
    {  

     int loopSizeDeterminer;//determines teh size of the inner loop and is dynamic. 

     for(int index=0;index<sTanomalies.size();index++) 
     { 
      OutlierInfo stOutlier=new OutlierInfo(); 
      stOutlier=sTanomalies.get(index); 
      stAnomalies.add(index, stOutlier); 
     } 

      loopSizeDeterminer=stAnomalies.size(); 

      while(stAnomalies.size()!=0) 
      {  
        OutlierInfo stOutlier1=new OutlierInfo(); 
        ArrayList<OutlierInfo> tracker=new ArrayList();//arraylist that stores the grouped Outliers to be deleted later 
        stOutlier1=stAnomalies.get(firstElement); 
        ArrayList<OutlierInfo> similarOutlier=new ArrayList();//similaroutliers are kept in an arraylist 
        similarOutlier.add(stOutlier1); 
        tracker.add(stOutlier1); 

       for(int index=1;index<loopSizeDeterminer;index++) 
       {  
        OutlierInfo stOutlier2=new OutlierInfo(); 
        stOutlier2=stAnomalies.get(index); 

           if(stOutlier1.serialId==stOutlier2.serialId) 
           { 
            similarOutlier.add(stOutlier2); 
            tracker.add(stOutlier2); 
           } 

       } 


       System.out.println("partiainfosize \t"+similarOutlier.size()); 

       sequencedStAnomalies.add(similarOutlier);//adding arraylist of similar outliers to the arraylist of arraylist 

       for(int index=0;index<tracker.size();index++) 
       { 
        OutlierInfo groupedOutlier=new OutlierInfo(); 
        groupedOutlier=tracker.get(index); 
        stAnomalies.remove(groupedOutlier);//grouped outliers are removed from original arraylist containing spatio-temporal outliers to reduce redundancy 
       } 

       System.out.println(" size "+stAnomalies.size()); 
       loopSizeDeterminer=stAnomalies.size(); 




    } 
     return sequencedStAnomalies; 
    } 
} 

回答

1

請仔細閱讀:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6

在Java數組索引和自1970年以來的大多數現代編程語言:)從0開始。如果數組的長度爲6個元素,則其索引必須在0到5的範圍內。

我希望現在您有足夠的信息來調試您的代碼並找到錯誤。

+0

我知道that.I我基本對象添加到動態此ArrayList因此陣列列表的大小正在增加,並且因爲我在這裏爲這個arralist添加了8個對象,所以它的大小必須是8,那麼爲什麼當程序嘗試訪問第6個對象時出現異常?酷我並不知道這樣的索引從1970 :) – user1720616

0
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 

說,你有大小6的ArrayList和你想在6索引訪問的元素。 這是錯誤的

請記住arraylist索引是零索引。所以,如果你的ArrayList是大小6,訪問你應該做第六元素

al.get(5). 

我的猜測是,你的數是6,所以你的循環應該是

for(int j=0;j<count-1;j++) 
       {  
        OutlierInfo info2=new OutlierInfo(); 
        info2=result.get(j); 

     /// continue your code 
+0

謝謝:)但我這裏的問題很難說(至少我是這麼認爲的),或者可能是我誤解了不知道。 – user1720616

0

您得到的索引越界異常,這幾乎總是程序員的錯誤。然而,我把你的確切發佈的代碼,它沒有任何例外的正常工作。我意識到你的錯誤在ArrayListSort.java:98中說錯誤,所以第98行你發佈的類只有59行!所以你正在運行你自己班級的錯誤版本,確保你正在運行你發佈的那個版本。這是問題所在。

我從運行您發佈的未修改結果

結果尺寸1 結果size2個 結果size3 結果尺寸4 結果size5 結果尺寸6 結果size7 結果尺寸8 partiainfosize1 [R尺寸7 partiainfosize1 [R尺寸6 partiainfosize1 r大小5 partiainfosize1 大小4 partiainfosize1 [R尺寸爲3 partiainfosize1 [R尺寸2 partiainfosize1 [R尺寸1 partiainfosize1 [R尺寸0

+1

嘿,我刪除了一些評論,同時張貼清晰:)而且我刪除了一些基本上印刷的東西線。我看到沒有邏輯錯誤,但我只是不斷收到那個^數組越界錯誤^謝謝你運行代碼併發布結果。我不知道爲什麼我一直得到那個錯誤 – user1720616

1

嘿,我跑了你的代碼,並檢查它。 這裏是輸出

 
result size1 
result size2 
result size3 
result size4 
result size5 
result size6 
result size7 
result size8 
partiainfosize1 
r size 7 
partiainfosize1 
r size 6 
partiainfosize1 
r size 5 
partiainfosize1 
r size 4 
partiainfosize1 
r size 3 
partiainfosize1 
r size 2 
partiainfosize1 
r size 1 
partiainfosize1 
r size 0

入住在其他一些IDE,如果你使用eclipse(在Netbeans的嘗試),並檢查您是否仍然有錯誤

+0

非常感謝。我有一些其他syntatic錯誤。 – user1720616