항해99 온보딩 스터디[Java 언어 기초] 4일차

Hohomi·2023년 3월 9일
0
post-thumbnail

스터디 4일차 : 배열(Array)

📍 배열이란?

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 많은 양의 데이터를 하나의 참조 변수로 묶음으로써 손쉽게 다룰 수 있게 된다.
  • ⚠️ 주의점 : '같은 타입'이어야 한다!
  • 쓰임 예시 : 한 학급의 시험점수를 저장하고자 할 때
  • 변수와 달리 배열은 각 저장공간이 연속적으로 배치되어있다.

📍 배열의 선언과 생성

  • 배열을 생성하기 위해서는 연산자 'new'와 함께 배열의 타입과 길이를 꼭 ! 지정해주어야 한다.
int[] score; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성

📍 배열의 인덱스(index)

  • 생성된 배열의 각 저장공간을 '배열의 요소'라고 하며, '배열이름[인덱스]' 식으로 배열의 요소에 접근한다.
  • 인덱스는 배열의 요소마다 붙여진 일련번호다! 각 요소를 구별하는 데 사용된다.
  • 인덱스의 범위는 0부터 '배열길이 -1'까지 !!
int[] score = new int[5];
// 길이(length)가 5인 int 배열. 인덱스의 범위는 0~4까지.(0,1,2,3,4)

배열의 또 다른 장점 :
index로 상수 대신 변수 or 수식도 사용할 수 있다.

for (int i=0; i <= 3; i++) {
score[i] = i * 10;
}
// index로 상수 대신 변수 i를 사용하고, for문으로 변수 i의 값을 0~3까지 증가시킨다.

📍 배열의 길이(배열이름.length)

  • 배열은 한번 생성하면 길이를 변경할 수 없다. 따라서 '배열이름.length'는 상수다.
int[] arr = new int[5]; // 길이가 5인 int 배열
int tmp = arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.
  • for문에서 '배열이름.length'를 사용하는 법
int[] score = new int[5];
for (int i=0; i < score.length; i++) {
System.out.println(score[i]);

📍배열의 초기화

  • 배열을 간단히 초기화할 수 있는 방법
int[] score = new int[]{ 50, 60, 70, 80, 90}; //배열의 생성과 초기화를 동시에!

int[] score = { 50, 60, 70, 80, 90)}; // new int[] 생략 가능

⭐️ 주의할 점 ⭐️
배열의 선언과 생성을 따로 하는 경우에는 new int[] 생략 불가!
int[] score;
score = { 50, 60, 70, 80, 90}; // 에러. new int[] 생략 불가
score = new int[]{ 50, 60, 70, 80, 90} // OK.

📍 배열의 출력

  • 배열을 같은 줄에 출력하는 간단한 방법. Arrays.toString(배열이름) 메소드
  • 참조변수를 프린트하면 배열값이 출력되는 게 아니라 '타입@주소'가 출력되니 주의!
int[] iArr = { 100, 95, 89, 70, 60 };
System.out.println(Arrays.toString(iArr));
// [100, 95, 80,70, 60]이 출력된다.

📍 배열의 활용

  • 총합과 평균, 최대값과 최소값, 섞기(shuffle), 로또 번호 만들기 등이 가능하다.

📍 String배열의 선언과 생성

String[] name = new String[3];
// 3개의 문자열을 담을 수 있는 배열을 생성한다.

📍 2차원 배열의 선언

  • 주로 테이블 형태의 데이터를 담는 데 사용된다.
int[][] score = new int[4][3]; // '배열이름[행index][열index]'
  • 2차원 배열은 행(row)과 열(column)로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재한다.
    - 행index의 범위는 '0~행의 길이~-1'이고, 열index의 범위는 '0~열의 길이~-1'이다.
// 2차원 배열의 초기화 예제
public class Ex5_8 {
    public static void main(String[] args) {
        int[][] score = {
                { 100, 100, 100 },
                { 20, 20, 20 },
                { 30, 30, 30 },
                { 40, 40, 40 }
        };
        int sum = 0;

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

                sum += score[i][j];
            }
        }
        System.out.println("sum = " + sum);

    }
}


📖 『JAVA의 정석 기초편』 연습문제 풀이!

Chater 5

5-1.

배열을 선언하거나 초기화한 것 중 잘못된 것과 그 이유는?

public class Quiz5_1 {
    public static void main(String[] args) {
        // 잘못된 것
        // int[] arr[]; // 참조변수 이름이 없음.
        // int[] arr = new int[5]{1,2,3,4,5}; // 괄호 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되므로 배열 길이는 안 적어도 된다.
        // int arr[5]; // 배열 선언과 동시에 생성하려면 연산자와 함께 배열의 타입과 길이를 지정해주어야 한다.

        // 잘된 것
        // int[] arr = {1, 2, 3};
        // int[] arr = new int[5];
        // int[] arr[] = new int[3][];
    }
}

5-2.

다음과 같은 배열이 있을 때, arr[3].length의 값은?

public class Quiz5_2 {
    public static void main(String[] args) {
        int[][] arr = {
                { 5, 5, 5, 5, 5},
                { 10, 10, 10},
                { 20, 20, 20, 20},
                { 30, 30}
        };

        // 4 ?
    }
}

5-3.

배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오.

public class Quiz5_3 {
    public static void main(String[] args) {
        int[] arr = { 10, 20, 30, 40, 50};
        int sum = 0;

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

5-4.

2차원 배열 arr에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오.

public class Quiz5_4 {
    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 total = 0;
        float average = 0;

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                total += arr[i][j];
            }
        }
        average = (float) total / (arr.length * arr[0].length);

        System.out.println("total = " + total);
        System.out.println("average = " + average);
    }
}

📍 참고 자료

참고 도서 : 『JAVA의 정석 기초편』, 남궁 성, 도우출판

profile
게발로 개발하기

0개의 댓글