1차원 배열에 대이터를 추가, 출력, 조회, 삭제, 삽입 하는 메서드를 작성한다.
배열 생성은
int[] intArr = new int[100];
배열을 다루기 위해 배열을 만들면
가장 먼저 !!
int index = -1;
int count = 0;
을 입력해준다.
index는 현재 참조하는 인덱스를 count는 실제 저장되어 있는 데이터의 개수를 의미
추가, 수정, 조회는 간단하다 !
public void add(int data) {
intArr[count] = data; // count 위치에 새로운 데이터 저장
count++; // 8번줄 intArr[count++] = data; 로 써도됨
}
public void update(int index, int data) {
intArr[index] = data;
}
// 처음 같은 data의 index만 반환
public int indexOf(int data) {
for(int i=0; i<count; i++) {
if(intArr[i]==data) return i; // 찾는 데이터가 일치하면 인덱스 반환
}
return -1; // 반복문을 모두 실행하면 찾는 데이터가 없음
}
public void printAll() {
for(int i=0; i<count; i++) {
System.out.print(intArr[i] + "\t");
}
System.out.println();
}
삭제, 삽입은 인덱스와 카운트 개념을 이해하고 작성해야한다.
public int delete(int index) {
int deletedData = intArr[index];
for(int i=index; i<count-1; i++) { //count 하면 배열이 꽉차있는 경우 바운더리 오류
intArr[i] = intArr[i+1];
}
count--;
return deletedData;
}
처음엔 for문이 i<count; 까지 가야 마지막 데이터를 앞으로 이동 시키고 그 뒤의 초기값인 0을 복사해서 배열안의 데이터가 확실하게 지워진다고 생각했는데,
이렇게 생각하면 안되는 거였다 !!
배열이 꽉차있는 경우엔 바운더리 오류가 발생할 수 있으니 데이터셋 자체가 깨끗해지지 않더라도 i<count-1; 로 해야하는 것...!
for(int i=index; i<count-1; i++)
범위를 조심 !!
public void insert(int index, int data) {
for(int i=count; i>index; i--) {
intArr[i] = intArr[i-1];
}
intArr[index] = data;
count++;
}
삽입은 데이터를 넣고자하는 인덱스부터 한자리씩 뒤로 미는 게 먼저, 그리고 그 인덱스에 삽입하고자 하는 데이터를 넣는다.
배열을 잘 쓰고 있다고 생각했는데, 기본적인 걸 하면서도 약간 버벅이게 되는게... 기초부터 다시 천천히 보는 것도 좋은 방법인 것 같다 !!
[전체 코드]
public class ArrayManagerExample {
int[] intArr = new int[100];
int index = -1;
int count = 0; // ArrayList 사용하면 편함
public void add(int data) {
intArr[count] = data; // count 위치에 새로운 데이터 저장
count++; // 8번줄 intArr[count++] = data; 로 써도됨
}
public void printAll() {
for(int i=0; i<count; i++) {
System.out.print(intArr[i] + "\t");
}
System.out.println();
}
// 처음 같은 data의 index만 반환
public int indexOf(int data) {
for(int i=0; i<count; i++) {
if(intArr[i]==data) return i; // 찾는 데이터가 일치하면 인덱스 반환
}
return -1; // 반복문을 모두 실행하면 찾는 데이터가 없음
}
public void update(int index, int data) {
intArr[index] = data;
}
public int delete(int index) {
int deletedData = intArr[index];
for(int i=index; i<count-1; i++) { //count 하면 배열이 꽉차있는 경우 바운더리 오류
intArr[i] = intArr[i+1];
}
count--;
return deletedData;
}
public void insert(int index, int data) {
for(int i=count; i>index; i--) {
intArr[i] = intArr[i-1];
}
intArr[index] = data;
count++;
}
public static void main(String[] args) {
ArrayManagerExample_p70 ex = new ArrayManagerExample_p70(); // 객체를 생성
ex.add(10);
ex.add(20);
ex.add(30);
ex.printAll();
System.out.println("데이터 20의 인덱스는 " + ex.indexOf(20));
ex.update(2, 40);
ex.printAll();
System.out.println(ex.delete(1) + "데이터를 삭제합니다.");
ex.printAll();
ex.insert(1, 50);
ex.printAll();
ex.insert(2, 60);
ex.printAll();
}
}