[JAVA] 배열 관리 함수

jii0_0·2021년 7월 9일
0

JAVA

목록 보기
1/2

변수 선언

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();

	}

}
profile
느려도 꾸준히

0개의 댓글