본문 바로가기
내일배움캠프(Sparta)/Java Handbook

[Java Handbook] Part 4-1

by mmm- 2023. 9. 12.

1. 배열

배열

: 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

 

배열의 선언

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

 

선언 방법

// 방법1
int[] age;

// 방법2
String name[];

 

배열의 생성

: 실제 저장공간을 생성

 

생성 방법

int[] age; // int 타입의 배열을 다루기 위한 참조변수 age 선언
age = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열을 생성(new)

  • 배열의 시작 주소(메모리 주소)가 참조변수 age에 저장되었고 age는 저장된 주소를 통해 해당 배열을 가리킨다.
    (참조변수와 배열이 연결되어 참조변수를 이용해 배열을 다룰 수 있음)

 

배열의 인덱스

: 각 요소(저장공간)에 자동으로 붙는 일련 번호

  • index 의 범위: 0 ~ 배열의 길이-1

 

class Arrays1_1 {
    public static void main(String[] args) {
        int[] age = new int[5]; // 선언과 생성 동시에
        age[3] = 28;
        System.out.println("age[3] = " + age[3]);

        int beatitudoAge = age[3];
        System.out.println("beatitudoAge = " + beatitudoAge);

        System.out.println("age 배열의 전체값 확인");
        System.out.println("age[0] = " + age[0]);
        System.out.println("age[1] = " + age[1]);
        System.out.println("age[2] = " + age[2]);
        System.out.println("age[3] = " + age[3]);
        System.out.println("age[4] = " + age[4]);
    }
}

2. 배열의 길이

배열의 길이

: int 타입의 상수이고, '배열이름.length' 이와 같이 적어 배열의 길이를 구함


3. 배열의 한계점

한 번 생성된 배열은 컴파일 후 실행되는 동안은 그 길이(크기)를 바꿀 수 없다.

→ 배열을 생성하면 연속적인 메모리 공간을 찾아서 주소를 배정하는데
    뒤에 연속적인 메모리 공간이 존재한다는 보장이 없어 크기를 바꾸는 것이 불가능.

 

배열의 크기가 부족하다면?

  1. 필요한 만큼의 크기를 가진 배열을 새로 생성
  2. 새로 만든 배열에 기존 배열의 값을 복사해서 저장
public class Arrays2_1 {
    public static void main(String[] args) {
        int[] arr = new int[10];
        System.out.println("배열의 길이 = " + arr.length);

        for(int i=0; i<arr.length; i++) {
            System.out.println("arr[" + i + "] = " + arr[i]);
        }
        System.out.println();

        // index 범위를 벗어나는 경우 Error
        for(int i=0; i< arr.length+1; i++){
            System.out.println("arr[" + i +"] = " + arr[i]);
        }
    }
}

4. 배열의 초기화

배열의 초기화

: 배열의 각 요소에 처음으로 값을 저장하는 것

 

자동초기화

  • 배열은 기본적으로 저장하려는 값의 타입의 기본값으로 자동 초기화를 해줌
자료형(변수타입) 기본값
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\n0000'
boolean false
참조형 변수(String or any Object)  

 

초기화 방법

방법 1)

int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};

방법 2)

int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};

→ new int[] 생략 가능

 

class Arrays2_2 {
    public static void main(String[] args) {
        int[] num1 = new int[]{1,2,3,4,5,6,7,8,9};
        int[] num2 = {1,2,3,4,5,6,7,8,9};

        for (int i = 0; i < num1.length; i++) {
            System.out.println("num1[" +i + "] = " + num1[i]);
        }
        System.out.println();
        for (int i = 0; i < num2.length; i++) {
            System.out.println("num2[" +i + "] = " + num2[i]);
        }

        System.out.println();

        int[] num3;
        // num3 = {1,2,3,4,5,6,7,8,9}; // Error

        // 위처럼 나눠서 표현을 하려면 아래처럼 초기화 해야함
        int[] num4;
        num4 = new int[]{1,2,3,4,5,6,7,8,9};

        for (int i = 0; i < num4.length; i++) {
            System.out.println("num4[" +i + "] = " + num4[i]);
        }
    }
}

배열 이용해 총합과 평균 구하기

public class Arrays3_2 {
    public static void main(String[] args) {
        int sum = 0;
        float avg = 0f;

        int[] score = {100, 40, 33, 50, 77 ,29};

        for(int i=0; i<score.length; i++) {
            sum += score[i];
        }
        avg = sum / (float)(score.length); // float 타입 얻기 위해 형변환

        System.out.println("총합 = " + sum);
        System.out.println("평균 = " + avg);
    }
}

 

배열 이용해 최대값과 최소값 구하기

public class Arrays3_3 {
    public static void main(String[] args) {
        int[] score = {65, 97, 88, 43, 33, 91, 28};

        int max = score[0];
        int min = score[0];

        for(int i=1; i<score.length; i++) {
            if(max < score[i]) {
                max = score[i];
            } else if(min > score[i]) {
                min = score[i];
            }
        }

        System.out.println("최소값은 " + min + ", 최대값은 " + max);
    }
}

 

배열 이용해 랜덤으로 숫자 섞기

import java.util.Arrays;

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

        for(int i=0; i<numArr.length; i++) {
            int num = (int)(Math.random() * 10);

            int tmp = numArr[0];

            // 랜덤한 위치의 값과 배열의 첫 번째 수를 서로 바꿔줌
            numArr[0] = numArr[num];
            numArr[num] = tmp;

            System.out.println(i + 1 + " 번째 변경 : " + Arrays.toString(numArr));
        }
        System.out.println("결과 = " + Arrays.toString(numArr));
    }
}

'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글

[Java Handbook] Part 5-1  (0) 2023.09.12
[Java Handbook] Part 4-2  (0) 2023.09.12
[Java Handbook] Part 3-2  (0) 2023.09.12
[Java Handbook] Part 3-1  (0) 2023.09.12
[Java Handbook] Part 2-2  (0) 2023.09.12