2013-09-26 3 views
0

저는 1 차원 데이터 구조에 대해 좀 더 배우기 위해 Vector analog를 만들고 있습니다.두 번째 코드를 첫 번째 코드에 추가하고 예외를 얻음으로써 두 개의 벡터 아날로그를 병합합니다. 왜?

문제는 다음과 같습니다. my merge() 메서드 (기본적으로 append() 메서드의 확장)는 ArrayOutOfBoundsException을 던지고 있습니다.

MyVector 클래스 자체가 길기 때문에 관련 부분을 게시 할 것입니다.

클래스/객체 필드 : 추가]() 메소드와 함께

public class MyVector implements Cloneable 
{ 
    private Object[] data; 
    private static final int INITIAL_CAPACITY = 100; 
    private int size; 

기본 (하나 현재) 생성자 :

public MyVector() 
{ 
    data = new Object[INITIAL_CAPACITY]; 
    size = 0; 
} 
public void append(Object element) 
{ 
    if (size == data.length) 
     expand(); 
    data[size++] = element; 
} 

병합() 메소드 :

public void merge(MyVector vector2) 
{ 
    for(int i = this.size; i < (this.size + vector2.size()); ++i) 
     this.append(vector2.data[i]); 
    this.size += vector2.size(); 
} 

부르는 곳 :

vec.merge(vecCopy); 

vec는 클래스의 앞부분에서 MyVector 객체로 생성되는 반면, vecCopy는 vec의 데이터에 대한 참조 사본입니다.

그게 관련 코드의 전부입니다. 나는 그 대답이 명백하다고 생각하지만, 어떤 이유에서인지 나는 그것을 볼 수 없다.

+0

this.append (vector2.data [i]); - this.size가 아닌 0의 배열이어야합니다. –

답변

0

for(int i = this.size; i < (this.size + vector2.size()); ++i)

인덱스 i는 아웃 오브 바운드, 즉, vector2.size()을 통해 인덱스를 얻을 수 있습니다.

관련 문제