2016-09-06 6 views
-4

누군가이 코드가 IndexOutOfBoundsException을 던지고있는 이유를 설명 할 수 있습니까?arraylist에 대한 IndexOutOfBoundsException

public static Hull merging(Hull HullA, Hull HullB) { 
    Hull finalHull = new Hull(); 
    int i=0; 
    int j=0; 

    if (HullA.list.get(i) >= HullB.list.get(j)) 
    { 
     finalHull.list.add(HullA.list.get(i)); 
     i++; 
    } 
    else 
    { 
     finalHull.list.add(HullB.list.get(j)); 
     j++; 
    } 

    return finalHull; 
} 

어떻게 해결할 수 있습니까?

+3

을 사이드 넘버로 사용하면이 변수 이름을 사용하면 읽기에는 지독한 작은 방법이 있습니다. – SomeJavaGuy

+0

디버거를 사용하여 찾아 냈습니까? – Jens

+0

@Jens 네, 그랬습니다.이 줄은 (HullA.list.get (i)> = HullB.list.get (j)) 입니다.하지만 인터넷 검색 및 설정 후에도이 문제를 해결하는 방법을 잘 모르겠습니다. 리스트가 비어 있다면 값은 작동하지 않는 것 같습니다. – Amy

답변

-2

목록의 값을 직접 비교하고 카운터를 증가시킵니다. 비교하기 전에 두 목록의 크기를 확인해야합니다.

HullA, HullB의 크기는 retieve하려고하는 색인보다 작을 수 있습니다. HullA.size = 4 당신이 (5) 다음은 Araayindexoutofbound 오류를 슬로우 HullA.get를 검색하려는 경우

HullA.list.get (I) .

+0

입니다. j는 값 0 만 가질 수 있습니다. – Raptor

0

이 메서드는 항상 HullA 또는 HullB의 첫 번째 요소 (index = 0)를 finalHull 목록에 추가합니다. 증분 라인 i++j++은 무의미합니다. 그리고 경우에만 HullA 또는 HullB 크기를 0

P.S.이있는 경우

는 또한 그 코드는 IndexOutOfBound Exception를 던질 수 변수 이름은 소문자로 시작하십시오.

P. 코드를 한 번만 처리하고 카운터를 다시 초기화하면 카운터 (i ++, j ++)를 사용하지 마십시오.

P. 개체의 목록을 정적으로 사용하지 마십시오. 다음과 같이 사용하십시오 : finalHull.getList().add()

관련 문제