2012-08-23 6 views
-2

아래의 코드에서 나는 다음과 같은 오류 받고 있어요 : 아래의 라인을 일으키는지수 아웃 선두로부터

for (int domainData = 0; domainData < copiedppList.size(); domainData++) { 
    if (domainData == 0) { 
     firstValue.setNewValue(firstValue.getFieldValue()); 
     DomainItemFieldHistory oldValue = copiedppList.get(domainData + 1); 
     if (firstValue.getFieldID().equals(oldValue.getFieldID())) { 
      firstValue.setOldValue(oldValue.getFieldValue()); 
     } 
    } 
} 

copiedppList.size()에 대한

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 

크기는 1 언급 된 문제 :

DomainItemFieldHistory oldValue = copiedppList.get(domainData + 1); 

어떻게 피할 수 있습니까?
오류를 방지하기 위해 어떤 조건을 추가 할 수 있습니까?

답변

1

종료 조건을 copiedppList.size() - 1으로 변경하면 범위를 벗어나는 예외가 발생하지 않습니다.

배열 인덱스는 0부터 시작하므로 마지막 유효한 인덱스는 size() - 1입니다. 게시 된 코드는 size() - 1에 반복하지만 다음 호출을 할 수 있습니다

copiedppList.get(domainData + 1); 

예외를 유발.

루프가 모든 요소를 ​​반복해야한다면 + 1 호출을 보호해야합니다. 예 :

if (domainData < copiedppList.size() - 1) 
{ 
    copiedppList.get(domainData + 1); // This is now safe, assuming 
             // nothing reduces the size of 
             // copiedppList since the if check. 
} 
+1

: 크기는() domainData == 0

당신은 당신이 컬렉션에 더 이상의 항목이 있는지 확인해야 할 때

0 그래서이 경우 당신이

copiedppList.get(domainData + 1); 

에 액세스 할 수 있습니다 루프가 작동하지 않습니다 – tom502

+1

복사 된 ListSize() 필요 복사 된 ListSize() -1 – simpy

+0

@ 핌피, l의 의도는 무엇입니까? 너? – hmjd

1

+1을 제거하십시오.

DomainItemFieldHistory oldValue = copiedppList.get(domainData)

+0

+1을 추가해야하므로 어떤 경우 증분 된 데이터가 필요합니다. – simpy

1

당신은 변경해야 :

  • 중 하나 get(domainData + 1); =>get(domainData);
  • 또는 for (int domainData = 0; domainData < copiedppList.size(); domainData++) =>for (int domainData = 0; domainData < copiedppList.size() - 1; domainData++)

이유 : 목록이 0에서 인덱싱 크기 - 1, 루프의 마지막 반복에서로 전화하려고합니다. 그러한 요소가 없기 때문에 실패하는.

1

copiedppList.size() = 1 경우에만 인덱스 0

1

크기는 copiedppList.size()

.get(domainData + 1); 인덱스 위치에 데이터를 요청하는 것이 발생할 1 [1] 그 이상 유효 지정된 크기보다 큽니다.

.get(domainData);

1

copiedppList 때문에하십시오.

if (domainData == 0 && copiedppList.size() > 1) {