(JAVA) 1차원 배열, 배열 복사

InAnarchy·2022년 10월 20일
0

JAVA

목록 보기
5/18
post-thumbnail

Table of Contents

  • 배열의 선언과 생성
  • 배열의 초기화
  • 배열의 인덱스와 접근
  • 배열의 출력
  • 1차원 배열의 출력 예제
  • 배열 복사

배열의 선언과 생성


배열의 선언: 배열을 다루기 위한 참조변수의 선언

배열의 선언만으로 배열 공간이 할당되지 않는다. 배열 공간에 대한 주소값을 가질 뿐 그 자체가 배열은 아니다.
또 배열 선언 시 []에 크기를 지정하면 안된다.
즉 int Array[10];과 같은 문장은 컴파일 오류이다.


배열의 생성은 저장할 배열 공간을 할당받는 과정이다.
이 때 배열의 길이만큼의 공간을 할당받고, 배열에 대한 주소값을 저장한다.

배열의 선언: 타입[] 변수이름;
배열의 생성: 변수이름 = new 타입[길이];

배열의 선언과 생성을 동시에: 타입[] 변수이름 = new 타입[길이];
ex) int[] score = new int[5];

이 때 이 변수는 참조변수이고, 참조변수를 통해서 배열을 다룰 수 있다.

배열의 초기화

배열은 생성과 동시에 자동적으로 기본값 0으로 초기화된다.
배열에 원하는 값을 저장하려면 각 요소에 값을 지정하여 초기화할 수 있다.

int[] score = new int[]{50,60,70,80,90};
int[] score = {50,60,70,80,90};

이 때 괄호 { } 안의 개수에 의해 배열의 길이가 자동으로 결정된다.

배열의 인덱스와 접근

위의 경우 괄호 안에 값을 저장하여 초기화했으나
배열이름[인덱스]의 형식으로 배열의 요소에 접근할 수도 있다.
이 때, 이 인덱스에 음수는 사용이 불가능하다.

int[] score = new int[5];
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;

배열의 출력

  1. for문을 사용한다.
public class ArrayPrint {
    public static void main(String[] args) {
        int[] Arr = {100,95,80,70,60};
        for(int i = 0; i<Arr.length; i++){
            System.out.println(Arr[i]);
        }
    }
}
//for-each문
public class ArrayPrint {
    public static void main(String[] args) {
        int[] Arr = {100,95,80,70,60};
        for(int x : Arr){
            System.out.print(x + " ");
        }
    }
}
  1. Arrays.toString()을 사용한다.
import java.util.Arrays;

public class ArrayPrint {
    public static void main(String[] args) {
        int[] Arr = {100, 95, 80, 70, 60};
        System.out.println(Arrays.toString(Arr)); //[100, 95, 80, 70, 60]
    }
}

1차원 배열의 출력 예제

import java.util.Arrays;

public class ArrayPrint {
    public static void main(String[] args) {
        int[] arr1 = new int[10];
        int[] arr2 = new int[10];
        int[] arr3 = new int[]{100, 95, 80, 70, 60};
        char[] charr = {'a', 'b', 'c', 'd'};

        for (int i = 0; i < arr1.length; i++) {
            arr1[i] = i + 1;
        }

        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = (int) (Math.random() * 10) + 1;
        }

        for (int i = 0; i < arr1.length; i++) {
            System.out.printf(arr1[i] + ",");
        }
        System.out.println();
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));
        System.out.println(Arrays.toString(charr));
        System.out.println(arr3); //주소만 나옴
        System.out.println(charr); //char배열은 예외적으로 저장된 배열 출력
    }
}
output
1,2,3,4,5,6,7,8,9,10,
[1, 8, 7, 8, 5, 3, 6, 8, 2, 4]
[100, 95, 80, 70, 60]
[a, b, c, d]
[I@51efea79
abcd
public class ArrayPrint {
    public static void main(String[] args) {
        int sum = 0;
        float avg = 0f;

        int[] score = {100, 88, 100, 100, 90};

        for (int i = 0; i < score.length; i++) {
            sum += score[i];
        }
        avg = sum / (float) score.length;

        System.out.println("sum : " + sum);
        System.out.println("avg : " + avg);
    }
}
output
sum : 478
avg : 95.6
public class ArrayPrint {
    public static void main(String[] args) {
        int[] score = {23, 99, 55, 28, 76, 49, 83};

        int max = score[0];
        int min = score[0];
        //배열의 첫번째 값으로 최대/최소값 초기화

        for (int i = 1; i < score.length; i++) {
            if (score[i] > max) {
                max = score[i];
            } else if (score[i] < min) {
                min = score[i];
            }
        }
        System.out.println("max : " + max);
        System.out.println("min : " + min);
    }
}
output
max : 99
min : 23
import java.util.Arrays;

public class ArrayPrint {
    public static void main(String[] args) {
       int[] arr = {0,1,2,3,4,5,6,7,8,9};
        System.out.println(Arrays.toString(arr));

        for(int i = 0; i<100; i++) {
            int n = (int) (Math.random() * 10); //0~9 임의
            int tmp = arr[0];
            arr[0] = arr[n];
            arr[n] = tmp;
        }
        System.out.println(Arrays.toString(arr));
    }
}
output
null
null
null

배열 복사

배열은 한번 생성하면 크기를 변경할 수 없기 때문에
더 큰 배열을 새로 만들고 이전 배열의 값들을 복사할 수도 있다.

더 디테일한 설명은 얕은 복사/깊은 복사

  1. for문으로 배열 복사
public class ArrayCopy {
    public static void main(String[] args) {
        int[] oldArray = {1,2,3};
        int[] newArray = new int[5];

        for(int i = 0; i<oldArray.length; i++) {
            newArray[i] = oldArray[i];
        }

        for(int i = 0; i<newArray.length; i++){
            System.out.print(newArray[i] + ", ");
        }
    }
}
output
1, 2, 3, 0, 0, 
  1. System.arraycopy()메소드
System.arraycopy(object src, int srcPos, object dest, int destPos, int length);

이 때 src는 원본 배열, srcPos는 원본 배열에서 복사할 항목의 시작 인덱스, dest는 새 배열, destPos는 새 배열에서 붙여넣을 시작 인덱스, length는 복사할 개수이다.

public class ArrayCopy {
    public static void main(String[] args) {
        int[] oldArray = {1, 2, 3};
        int[] newArray = new int[5];

        System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);

        for (int i = 0; i < newArray.length; i++) {
            System.out.print(newArray[i] + ", ");
        }
    }
}
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글