본문 바로가기

코딩 공부/Java

[Java] 10_배열

배열

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

상황 제시

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

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

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

    int kor1 = 92;
    int kor2 = 71;
    int kor3 = 80;
    // ...생략...
    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[3] = 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, 50};

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

            // 배열의 모든 원소에 대한 반복문 구성
            for (int i=0; i<data.length; i++) {
                // i번째 원소를 sum에 누적 합산
                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

ArrayConverse.java

    public class ArrayConverse {
    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

정렬

    for(int i=0; i<k.length-1; i++){
        for (int j=i+1; j<k.lengthl k++)
    }

'코딩 공부 > Java' 카테고리의 다른 글

[Java] 12_메서드  (0) 2020.05.08
[Java] 11_2차 배열  (0) 2020.05.08
[Java] 09_형변환  (0) 2020.05.08
[Java] 08_기본문법활용  (0) 2020.05.08
[Java] 07_반복문  (0) 2020.05.08