Study

[JAVA/자바] 배열 리펙토링

_유니 2023. 5. 26. 12:58

 

변수 값 사용

package array;

public class Array1Ref2 {

    public static void main(String[] args) {
        int[] students; // 배열 변수 선언
        students = new int[5]; // 배열 생성

        // 변수 값 대입
        students[0] = 90;
        students[1] = 80;
        students[2] = 70;
        students[3] = 60;
        students[4] = 50;

        // 변수 값 사용
        for (int i = 0; i < students.length; i++) {
            System.out.println("학생" + (i + 1) + " 점수: " + students[i]);
        }
    }
}

 

- 반복문을 사용해서 배열을 통해 값을 사용하는 부분을 효과적으로 변경했다.

- 배열의 인덱스는 0부터 시작하기 때문에 반복문에서 i = 0을 초기값으로 사용했다.

- students.length

* 배열의 길이를 제공하는 특별한 기능이다.

* 참고로 이 값은 조회만 할 수 있다. 대입은 할 수는 없다.

* 현재 배열의 크기가 5이기 때문에 여기서는 5가 출력된다.

- for문의 조건이 i < students.length이기 때문에 i는 0, 1, 2, 3, 4까지만 반복한다.

* i가 5가 되면 5 < 5가 되면서 조건이 거짓이 되고, 반복을 종료한다.

 

 

초기화

package array;

public class Array1Ref4 {

    public static void main(String[] args) {
        // 배열 생성 간략 버전, 배열 선언과 함께 사용시 new int[] 생략 가능
        int[] students = {90, 80, 70, 60, 50}; // 배열 생성과 초기화

        // 변수 값 사용
        for (int i = 0; i < students.length; i++) {
            System.out.println("학생" + (i + 1) + " 점수: " + students[i]);
        }
    }
}

- 배열은 { }를 사용해서 생성과 동시에 편리하게 초기화하는 기능을 제공한다.

단 이때는 배열 변수의 선언을 한 줄에 함께 사용할 때만 가능하다.

- 이제 학생의 점수를 추가해도 {90, 80, 70, 60, 50}의 내용만 변경하면 된다.

그러면 나머지 코드는 변경하지 않아도 된다.

 

 

2차원 배열

행 출력 반복

package array;

public class ArrayDi1 {

    public static void main(String[] args) {
        // 2x3 2차원 배열을 만든다.
        int[][] arr = new int[2][3]; // 행 2, 열 3

        arr[0][0] =1; // 0행, 0열
        arr[0][1] =2; // 0행, 1열
        arr[0][2] =3; // 0행, 2열
        arr[1][0] =4; // 1행, 0열
        arr[1][1] =5; // 1행, 1열
        arr[1][2] =6; // 1행, 2열

        for (int row = 0; row < 2; row++) {
            System.out.print(arr[row][0] + " "); // 0열 출력
            System.out.print(arr[row][1] + " "); // 1열 출력
            System.out.print(arr[row][2] + " "); // 2열 출력
            System.out.println(); // 한 행이 끝나면 라인을 변경한다.
        }
    }
}

- for문을 통해서 행(row)을 반복해서 접근한다. 각 행 안에서 열(column)이 3개이므로 

arr[row][0], arr[row][1], arr[row][2] 3번 출력한다. 이렇게 하면 for문을 한번 도는 동안 3개의 열을 출력할 수 있다.

 

열 출력 반복

package array;

public class ArrayDi2 {

    public static void main(String[] args) {
        // 2x3 2차원 배열을 만든다.
        int[][] arr = new int[2][3]; // 행 2, 열 3

        arr[0][0] =1; // 0행, 0열
        arr[0][1] =2; // 0행, 1열
        arr[0][2] =3; // 0행, 2열
        arr[1][0] =4; // 1행, 0열
        arr[1][1] =5; // 1행, 1열
        arr[1][2] =6; // 1행, 2열

        for (int row = 0; row < 2; row++) {
            for (int column = 0; column < 3; column++) {
                System.out.print(arr[row][column] + " "); 
            }
            System.out.println(); // 한 행이 끝나면 라인을 변경한다.
        }
    }
}

- for문을 2번 중첩해서 사용하는데, 첫 번째 for문은 행을 탐색하고, 내부에 있는 두 번째 for문은 열을 탐색한다.

 

초기화, 배열의 길이

package array;

public class ArrayDi4 {

    public static void main(String[] args) {
        // 2x3 2차원 배열, 초기화
        int[][] arr = {
                {1, 2, 3},
                {4, 5, 6}
        };

        // 2차원 배열의 길이를 활용
        for (int row = 0; row < arr.length; row++) {
            for (int column = 0; column < arr[row].length; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println(); // 한 행이 끝나면 라인을 변경한다.
        }
    }
}

- 기존 배열처럼 2차원 배열도 편리하게 초기화할 수 있다.

- for문에서 2차원 배열의 길이를 활용했다.

* arr.length는 행의 길이는 뜻한다. 

* arr[row].length는 열의 길이를 뜻한다.

 

값 입력

package array;

public class ArrayDi4 {

    public static void main(String[] args) {
        // 2x3 2차원 배열, 초기화
        int[][] arr = new int[2][3];

        int i = 1;
        // 순서대로 1씩 증가하는 값을 입력한다.
        for (int row = 0; row < arr.length; row++) {
            for (int column = 0; column < arr[row].length; column++) {
                arr[row][column] = i++;
            }
        }

        // 2차원 배열의 길이를 활용
        for (int row = 0; row < arr.length; row++) {
            for (int column = 0; column < arr[row].length; column++) {
                System.out.print(arr[row][column] + " ");
            }
            System.out.println(); // 한 행이 끝나면 라인을 변경한다.
        }
    }
}

- 중첩된 for문을 사용해서 값을 순서대로 입력한다.

- arr[row][column] = i++ 후의 증감 연산자(++)를 사용해서 값을 먼저 대입한 다음에 증가한다.

* 코드에서 int i = 1으로 i가 1부터 시작한다.