본문 바로가기

JAVA

배열

배열

하나의 변수에 같은 종류의 데이터 여러 개를 그룹화 한 형태.

상황 제시

한 학급의 성적표를 보고 각 학생별로 총점과 평균을 구하라.

국어 영어 수학
철수 92 81 76
영희 72 95 84
민혁 80 86 98

3명씩 3과목이므로 9개의 변수가 필요

int kor1 = 92;
int kor2 = 72;
int kor3 = 80;
// ... 생략 ...
int math1 = 76;
int math2 = 84;
int math3 = 98;

30명의 학생에 대한 20과목에 대한 점수라고 가정한다면 프로그램은 좀 더 복잡해지고 더 많은 변수를 소스코드상에 선언,할당 해야 한다.

#01. 배열

같은 종류의 데이터를 그룹화 한 형태.

배열의 선언

데이터 타입 뒤에 배열임을 의미하는 []를 명시한다.

int[] a;

배열의 할당

값을 대입하는 것이 아니라 배열의 칸을 결정하는 것임에 유의한다.

new 예약어 뒤에 데이터 타입을 다시 한번 명시하고 배열의 칸 수를 []를 사용하여 지정한다.

a = new int[3];

선언과 할당의 통합

int a = new int[3];

2) 배열의 활용

크기가 결정된 배열은 0부터 시작되는 일련번호를 부여받는다. 이를 배열의 인덱스라고 한다.

값을 저장하기 위해서는 배열 변수 이름 뒤에 [0] 형식으로 인덱스 번호를 지정하고 대입한다.

a[0] = 10;   // 인덱스가 0인 칸에 10을 대입
a[1] = 20;   // 인덱스가 1인 칸에 20을 대입
a[2] = 30;   // 인덱스가 2인 칸에 30을 대입

즉, 아래와 같이 구성된다고 생각할 수 있다.

0 1 2
10 20 30

배열에 저장되 값 사용하기.

인덱스 번호를 사용한다는 점을 제외하고는 일반 변수의 사용과 동일하다.

a) 다른 변수에 복사하기
int k = a[0];   // k에 10이 복사됨
b) 출력하기
System.out.println(a[1]);   // 20이 출력됨
c) 연산하기
a[2] = a[0] * a[1];  // 인덱스가 2인 공간의 값이 200이 됨

3) 배열의 크기

배열이름.length는 배열의 칸 수를 반환한다.

int [] a = new int[5];
System.out.println(a.length);   // 5가 출력됨

배열의 인덱스는 항상0부터 크기-1까지 1씩 증가하면서 존재한다.

4) 반복문을 통한 활용

인덱스가 0부터 크기-1까지 증가한다는 특성을 활용하여 for문과 함께 사용하면 배열의 모든 원소에 대한 일괄 처리가 가능하다.

int a = new int[4];

for (int i=0; i<a.length; i++) {
    a[i] = i * 10;
    System.out.println(a[i]);
}

선언+할당+값대입을 한 번에 일괄 처리 하기

배열을 할당할 때 사이즈를 지정하지 않고 중괄호{}를 열어서 배열의 원소값들을 직접 나열한다.

int[] a = new int[] { 10, 20, 30, 40 };

이 때 new int[]는 생략할 수 있다.

int[] a = { 10, 20, 30, 40 };

ArraySum.java

배열의 모든 원소에 대한 합 구하기

public class ArraySum {
    public static void main (String [] args) {
        int[] data = { 10, 20, 30, 40 };

        // 총 합을 구할 때는 항상 누적 합산을 수행할 변수를 0으로 초기화 해 놓고 반복을 수행해야 한다.
        int sum = 0;

        // 배열의 모든 원소에 대한 반복문 구성
        for (int i=0; i<data.length; i++) {
            sum += data[i];
        }
        System.out.println(sum);
    }
}
출력결과

150

ArrayMax.java

배열의 원소 중에서 가장 큰값 출력하기

public class ArrayMax {
    public static void main(String [] args) {
        // 원소값을 무작위로 갖는 배열
        int[] data = { 5, 2, 7, 9, 2 };

        // 비교를 위한 값 준비
        int max = 0;

        // 배열의 원소 수 만큼 반복
        for (int i=0; i < data.length; i++) {
            System.out.printf("max=%d, data[%d]=%d\n", max, i, data[i]);

            // max가 data의 i번째보다 작다면 i번째 원소를 max에 복사
            if (max < data[i]) {
                System.out.printf(">> max에 %d를 복사\n", data[i]);
                max = data[i];
            }
        }
        System.out.println("최대값 = " + max);
    } 
}
결과출력
max=0, data[0]=5
>> max에 5를 복사
max=5, data[1]=2
max=5, data[2]=7
>> max에 7를 복사
max=7, data[3]=9
>> max에 9를 복사
max=9, data[4]=2
최대값 = 9

배열 순서 뒤집기

ArratConverse.java

public class ArratConverse {
    public static void main(String [] args) {
        int[] data = { 1, 5, 2, 4, 3 };

        for (int i=0; i<data.length/2; i++) {
            // 반대쪽 원소의 인덱스 구하기
            int k = data.length - i - 1;

            // i번째 원소와 k번째 원소 교환
            int tmp = data[i];
            data[i] = data[k];
            data[k] = tmp;
        }

        for (int i=0; i<data.length; i++) {
            System.out.println(data[i]);
        }
    }
}
결과출력
3
4
2
5
1

정렬

35214 순서대로 정렬

for (int i=0; i<k.length-1; i++){
    for (int j=i+1; j<k.length; k++){
        // if 문으로 조건 대입
    }
}

ArraySort.java

public class ArraySort{
    public static void main(String[] args){
        int[] data = { 1, 5, 2, 4, 3 };

        // 비교할 기준을 선정하는 반복처리 --> 0번째부터 길이-1 번째까지  (가로)
        for (int i=0; i<data.length-1; i++) {
            // 기준과 비교할 위치를 선정하는 반복 --> i+1번째부터 길이까지.  (세로)
            for (int j=i+1; j<data.length; j++) {
                // i번째와 j번째를 비교하여 교환 여부를 결정
                if (data[i]>data[j]) {
                    int tmp = data[i];  
                    data[i] = data[j];
                    data[j] = tmp;
                }
            }
        }
        for (int i=0; i<data.length; i++) {
            System.out.println(data[i]);
        }
    }
}
결과출력
1
2
3
4
5

'JAVA' 카테고리의 다른 글

메서드  (0) 2020.05.20
2차배열  (0) 2020.05.20
형변환  (0) 2020.05.20
기본문법활용  (0) 2020.05.18
반복문  (0) 2020.05.18