array(배열)

JK·2022년 12월 17일
0

JAVA

목록 보기
6/28
post-thumbnail

배열

데이터을 관리해 주는 중요한 요소

1. 배열이란

  • 동일 자료형의 집합. 하나의 이름으로 여러개의 데이터를 사용할 수 있다.
  • 하나의 데이터만 있던 변수와 달리 여러 개의 데이터를 저장한 곳의 주소를 가르킨다.
  • 즉 여러 개의 변수를 모아놓은 또 하나의 변수라고 생각하면 된다.
    ex) int s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
    = int[] s = new int[10];

2. 배열의 문법(배열 선언과 생성)

  • 여래 개의 데이터가 모여 ‘{ }’를 이용하여 초기화
  • 배열의 크기는 최초에 한번 설정되면 변경 불가
  • 배열을 객체로 취급
  • 배열선언 → 배열의 메모리 할당(배열 생성) → 배열이용
  • 배열선언
  1. int[] iArr = {10, 20, 30, 40, 50}; // 선언과 초기화
    배열 iArr의 크기는 5
  2. int[] iArr = new int[5]; // 배열선언과 배열 생성(메모리 할당)
    iArr[0] = 10; // 각 배열방에 값 할당
    iArr[1] = 20;
    iArr[2] = 30;
    iArr[3] = 40;
    iArr[4] = 50;

ex)

int i = 10;     //변수 선언, 초기화
		//1. 배열 변수 선언, 초기화 하기
		int[] iArr = {10, 20, 30, 40, 50};    //[] 는 배열을 의미, 배열이므로 여러가지 값 선언, 초기화
		iArr[2] = 300;  //배열은 index로 접근(0부터 시작)
  • 결과 2번 공간에 300을 넣었기에 위에서 선언한 30이 아닌 300으로 출력
10
20
300
40
50

3. 배열의 배모리 구조의 이해

  • int i=10; 메모리에 i주머니가 만들어 지고, i 주머니 안에 10이라는 데이터가 들어있다.
  • int[] iArr = {10,20,30}; 메모리에 iArr 주머니가 만들어지고 iArr주머니안에는 배열을 구성하고 있는 데이터의 주소값이 들어있다.

4. 레퍼런스의 이해

  • 배열은 배열을 구성하고 있는 데이터들의 주소값을 가지고 있다고 하였다.
  • 이때 주소값을 '레퍼런스'라고 한다.
  • 만약 동일한 주소값을 가지고 있다면, 같은 데이터를 가리키고 있다고 볼 수 있다.

5. 배열의 복사

1. System.arraycopy(score, 0, s, 0, score.length); 이용한 배열 복사

s[0] = 999; 값을 넣어도 score 배열의 0번째 값은 변하지 않는다

public static void main(String[] args) {
		int [] score = {10, 20, 30, 40, 50};
		int [] s = new int[score.length];         //s에 score를 복제
//		for(int idx=0 ; idx<s.length ; idx++) {
//			s[idx] = score[idx];
//		}
		System.arraycopy(score, 0, s, 0, score.length);
		//(원본배열객체, int 원본시작위치, 복사본배열객체, int 복사본시작위치, int 복사길이)
		s[0] = 999;
		for(int idx=0 ; idx<s.length ; idx++) {
			System.out.printf("score[%d] = %d\t s[%d] = %d\n", idx, score[idx], idx, s[idx]);
		}
	}

6. 다차원 배열

  • 배열이 가리키는 데이터에 또 다른 배열이 들어있는 구조 (배열 안에 배열이 들어있다고 봄)

2차원 배열에 저장된 값의 합계 구하기

public static void main(String[] args) {
		int[][] arr = { {5, 5, 5, 5, 5}, 
				{10, 10, 10, 10, 10}, 
				{20, 20, 20, 20, 20},
				{30, 30, 30, 30, 30}};
		int tot = 0;
		for(int i=0 ; i<arr.length ; i++) {
			for(int j=0 ; j<arr[i].length ; j++) {
				tot+=arr[i][j];
			}
		}
		System.out.println("tot="+tot);
	}
  • 결과 : tot=325

Quiz

1. 거스름돈 동전 개수 구하기

  • 거스름돈 2680을 500, 100, 50, 10원 짜리 동전을 몇 개씩 주어야 하는지
public static void main(String[] args) {
		int money = 2680;
		int [] coinUnit = {500, 100, 50, 10};  각 동전 배열
		System.out.println(money+"원은");
		for(int i=0 ; i<coinUnit.length ; i++) {
			System.out.println(coinUnit[i] + "원 = " + money/coinUnit[i] + "개"); 
            //i 짜리 동전이 몇 개인지 거스름돈에서 i원을 나눠서 개수 구하기
			money %= coinUnit[i];      //i번째를 주고 남은 돈 
		}
	}

2. 8개의 값을 1차원 배열로 초기화 하고 이들 값들을 크기 순으로 나타내는 프로그램

public static void main(String[] args) {
		int [] num = {76, 45, 34, 89, 100, 50, 90, 93};
		int i, j;
		int temp;
		for(i=0 ; i<num.length ; i++) {
			for(j=i+1 ; j<num.length ; j++) {
				if(num[i] > num[j]) {
				temp = num[i];
				num[i] = num[j];
				num[j] = temp;
				}
			}//for-j
		}//for-i
		for (int k : num) {
			System.out.print(k + " ");
		}//확장for
	}//main
profile
씨앗 개발자

0개의 댓글