2012-10-04 2 views
2

나는 OutlierInfo라는 클래스를 만들었습니다. 이제 내가해야 할 일은 SerialId에 따라 개체를 그룹화하고 각 그룹의 arraylist를 만들고 그룹의 모든 arraylists를 병합하는 것입니다. 이 코드는 작성했지만 오류가 발생하고 이유가 없습니다. . 다음 코드가 오류를 일으키는 이유를 찾는 데 도움이 필요합니까? ArrayList에 분할하고 다시 병합 다시

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 개체를 추가하고 때 오류 "범위 밖으로 인덱스가"슬로우됩니다 것을 직면하고있는 가장 큰 혼란을! 자바

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

배열 인덱스 :

UPDATE

은 내가

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

주의 깊게 읽어주십시오 curleybraces.My 최종 코드를 엉망했다 it.Turns을 고정 대부분의 현대 프로그래밍 언어는 1970 년 이후부터 시작합니다. 0부터 시작합니다. 배열의 길이가 6 요소이면 색인의 범위는 0 ... 5가되어야합니다.

이제 코드를 디버그하고 버그를 찾을 수있는 충분한 정보를 얻길 바랍니다.

+0

을 오류가 있는지 확인입니다 따라서 arraylist의 크기가 증가하고 있기 때문에이 arralist에 8 개의 객체를 추가했기 때문에 크기가 8이어야합니다. 따라서 프로그램이 6 번째 객체에 액세스하려고 할 때 예외가되는 이유는 무엇입니까? 1970 :) – user1720616

0

에는 크기가 6 인 arraylist가 있고 6 번째 색인에있는 요소에 액세스하려고한다고 표시되어 있습니다. 이 잘못 되었음

arraylist 색인은 0 색인입니다. 당신의 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

고마워요 :)하지만 내 문제는 여기에 거의 (atleast 내가 그렇게 생각) 또는 내가 잘못 알고있다 모르겠다. – user1720616

0

해야한다 당신이해야 6 요소에 액세스하기 예외는 거의 항상 프로그래머 오류입니다. 그러나 정확한 게시 된 코드를 가져 와서 예외없이 잘 작동했습니다. 귀하의 오류가 ArrayListSort.java:98에 오류가 있다는 것을 알고 있으므로 게시 한 클래스에는 59 행만 있습니다! 따라서 자신의 수업의 틀린 버전을 실행하면 게시 한 스크립트를 실행하고 있는지 확인하십시오. 그것이 문제였습니다.수정되지 않은 게시 된 코드를 실행 한

내 결과

결과 크기 1 결과 SIZE2 결과 SIZE3 결과 size4 결과 결과 size6 결과 size7 결과 partiainfosize1 size8 R 크기 7 partiainfosize1 R 크기 size5 6 partiainfosize1 r 크기 5 partiainfosize1 r 크기 4 partiainfosize1 R 크기 3 partiainfosize1 R 크기 2 partiainfosize1 R 크기 1 partiainfosize1 R 크기 0

+1

안녕하세요 저는 명확성을 위해 글을 게시하는 동안 몇 가지 덧글을 삭제했습니다 :) 또한 기본적으로 인쇄 된 일부 줄은 삭제했습니다. 논리적 인 에러는 보이지 않지만 범위를 벗어나는 배열을^계속 가져 왔습니다. 코드를 실행하고 result.I를 게시 해 주셔서 감사합니다. 왜 계속 오류가 발생하는지 알지 못합니다. – user1720616

1

이봐, 난 당신의 코드를 실행하고 확인. 다음은 출력을 다른 IDE에서

 
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

확인, 당신의 이클립스를 사용하는 경우 (넷빈즈에서 시도) 당신은 아직도 내가 그런거 기본적으로이 ArrayList를 동적으로 개체를 추가하고 알고

+0

고맙습니다. 다른 구문을 사용했습니다. 오류. – user1720616

관련 문제