나는 간격 나무를 만들려고합니다. 이 부분에서는 모든 왼쪽 끝점을 오름차순으로, 모든 오른쪽 끝점을 오름차순으로 가져와 단일 지점 목록에 배치해야합니다 (중복되지 않음). 그러나 오른쪽 끝점을 지점 목록에 병합하려고하면 indexOutOfBounds 예외가 계속 발생합니다. 나는 이것이 일어날 수 없도록 능력을 확보했지만 어쨌든 그것은 일어난다. 나는 여기서 무엇을 이해하지 못 하겠는가?Arraylist 던지고 계속 IndexOutOfBounds
public static ArrayList<Integer> getSortedEndPoints(ArrayList<Interval> leftSortedIntervals, ArrayList<Interval> rightSortedIntervals) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 0 ; i < leftSortedIntervals.size() ; i++) {
if (i >= 1 && leftSortedIntervals.get(i-1).leftEndPoint != leftSortedIntervals.get(i).leftEndPoint) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
else if (i == 0) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
}
result.ensureCapacity(rightSortedIntervals.size()*2);
for (int j = 0 ; j < rightSortedIntervals.size(); j++) {
boolean duplicate = false;
int size = result.size()-1;
int temp = rightSortedIntervals.get(j).rightEndPoint;
while (size >= 0 && result.get(size) >= rightSortedIntervals.get(j).rightEndPoint) {
if (result.get(size) == rightSortedIntervals.get(j).rightEndPoint) {
duplicate = true;
break;
}
else {
result.set(size+1, result.get(size));
size--;
}
}
if (duplicate = true) {
continue;
}
else {
result.add(size, temp);
}
}
return result;
}
오류는이 라인에서 발생
else {
result.set(size+1, result.get(size));
size--;
}
정말인가요? 크기는 단지 정수 값입니다 (내가 아는 가난한 명명법). 여기에서 나는 삽입 할 끝점을위한 공간을 만들기 위해 모든 것을 실제로 오른쪽으로 옮기고 있습니다. – biohax2015
예 확신합니다 : http://docs.oracle.com/javase/6/docs/api/java/util/List.html#set(int,E) : IndexOutOfBoundsException - 인덱스가 범위를 벗어난 경우 (index <0 || 인덱스> = size()) –