배열(Array) 구현해보기
배열에서의 연산 중 요소들을 한 칸씩 뒤로 미루고 원하는 위치에 요소를 삽입하는 insertElement() 메서드와 원하는 위치의 요소를 삭제하여 나머지 요소를 한칸씩 앞으로 당겨오는 removeElement() 메서드를 구현해본다.
기본 변수
- 정수 배열을 나타내는 intArr와 배열의 개수를 나타내는 count를 선언한다.
- ARRAY_SIZE는 배열이 생성될 때 할당되는 크기이다.
- 이때 요소의 개수가 배열의 크기만큼 다 들어있지 않을 수 있으므로 ARRAY_SIZE >= count이다.
- ERROR_NUM은 연산 오류 시 출력되는 값이다.
int[] intArr; // int array
int count; // element 개수
public int ARRAY_SIZE;
public static final int ERROR_NUM = -999999999;
생성자
- 생성자는 default 생성자와 배열의 크기를 매개변수로 받는 생성자가 존재한다.
- default 생성자로 MyArray를 인스턴스를 생성하면 배열의 기본 크기는 10으로 잡힌다.
public MyArray() // default constructor
{
count = 0;
ARRAY_SIZE = 10;
intArr = new int[ARRAY_SIZE];
}
public MyArray(int size) // size를 매개변수로 받는 constructor
{
count = 0;
ARRAY_SIZE = size;
intArr = new int[size];
}
insertElement() 메서드
- 매개변수 position은 배열의 넣으려는 위치(인덱스 값)이고 num은 넣으려는 값을 의미한다.
- 마지막 요소의 인덱스는 count-1이다.
- 첫번째 조건문에서 position의 값이 0보다 작거나 마지막 원소 다다음에 넣을 경우 오류를 출력한다.
- 두번째 조건문에서 배열의 크기와 요소의 개수가 일치할 경우 (꽉 찰 경우) 오류를 출력한다.
- for문에서는 값을 삽입하기 위해 요소들을 한칸씩 뒤로 이동시키는 연산을 시행한다.
- 값을 이동시키고 나서 원하는 위치에 넣으려는 값을 대입해준다.
- 요소의 개수가 증가했다는 의미로 count 변수를 증가시켜준다.
public void insertElement(int position, int num)
{
int i;
if ( position < 0 || position > count ) { // 배열의 index 값이 0보다 작거나 한 칸 떨어뜨려 넣을 경우
System.out.println("insert Error");
return;
}
else if ( count >= ARRAY_SIZE ) { // 배열이 꽉 찬 경우
System.out.println("not enough memory");
return;
}
for( i = count - 1 ; i >= position ; i--) { // 요소의 이동
intArr[i+1] = intArr[i];
}
intArr[position] = num;
count++;
}
MyArrayTest.java
public class MyArrayTest {
public static void main(String[] args) {
MyArray myarray = new MyArray(5);
myarray.addElement(10);
myarray.addElement(20);
myarray.addElement(30);
myarray.addElement(40);
myarray.insertElement(1, 50);
myarray.printAll();
}
}
수행 결과
10
50
20
30
40
removeElement() 메서드
- 반환해줄 ret 변수를 ERROR_NUM으로 설정한다.
- 첫번째 조건문에서 배열이 비었을 경우 오류를 출력한다.
- 두번째 조건문에서 배열의 index 값이 0보다 작거나 마지막 요소보다 뒤에 있는 요소를 꺼내려는 경우 오류를 출력한다.
- 오류가 나지 않았을 때 ret를 꺼내려는 값으로 설정해준다.
- for문에서 제거 후 요소를 한 칸씩 앞으로 당겨오는 연산을 시행한다.
- 요소를 이동해준 후 요소의 개수를 나타내는 count 변수를 감소시키고 ret값을 반환한다.
public int removeElement(int position)
{
int ret = ERROR_NUM; // 기본 return 값을 ERROR_NUM으로 설정
if (isEmpty()) { // 배열이 비었을 경우
System.out.println("Array is empty");
return ret;
}
else if (position < 0 || position > count-1) { // 배열의 index 값이 0보다 작거나 마지막 요소의 인덱스 보다 큰 값을 꺼내려는 경우
return ret;
}
ret = intArr[position];
for( int i = position ; i < count-1 ; i++ ) { // 요소의 이동
intArr[i] = intArr[i+1];
}
count--;
return ret;
}
MyArrayTest.java
package ch02;
public class MyArrayTest {
public static void main(String[] args) {
MyArray myarray = new MyArray(5);
myarray.addElement(10);
myarray.addElement(20);
myarray.addElement(30);
myarray.addElement(40);
System.out.println(myarray.removeElement(0));
System.out.println(myarray.removeElement(0));
System.out.println(myarray.removeElement(0));
System.out.println(myarray.removeElement(0));
System.out.println(myarray.removeElement(0)); // 배열이 비었을 경우 출력
}
}
수행 결과
10
20
30
40
Array is empty
-999999999
'Java & Kotlin' 카테고리의 다른 글
[Java 자료구조] 연결 리스트 구현해보기 (0) | 2022.02.07 |
---|---|
[Java 자료구조] 여러가지 자료 구조 (2) (2) | 2022.02.06 |
[Java 자료구조] 여러가지 자료구조 (1) (0) | 2022.02.05 |