JAVA/java 이론

[자바 JAVA] 이차원 배열,int 2차원 배열, 향상된 for문

자바칩 프라푸치노 2020. 10. 5. 21:47

안녕하세요 자바칩프라푸치노입니다.

오늘은 자바에서 다차원배열에 대해 알아보겠습니다.

2020/09/26 - [§개발자 되기 프로젝트§/java 이론] - [자바JAVA]일차원 배열 , 배열의 길이, 배열의 선언방법, 배열 초기화, 배열 출력

 

[자바JAVA]일차원 배열 , 배열의 길이, 배열의 선언방법, 배열 초기화, 배열 출력

안녕하세요 자바칩 프라푸치노입니다. 이번에는 일차원 배열에 대해서 알아보겠습니다. 1. 배열  배열이란 같은 데이터 타입의 여러 변수를 하나의 묶음으로 다루는 것입니다. 많은 양의 값을 �

sso-feeling.tistory.com

일차원 배열 포스팅도 있습니다.

 

이어서 이차원 배열은

타입 [][] 변수이름; 

으로 선언하는것이 정석입니다.

(타입 변수이름[][];

타입[] 변수이름[] 이렇게도 됩니다.)

 

표를 생각하시면서 행과 열이라고 생각하시면 됩니다.

 

예제를 통해서 알아보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public class Array_Ex1 {
 
    public static void main(String[] args) {
        //2차원 배열 선언과 동시에 초기화를 하고 있다(4행 3열)
                int[][] score = new int[][] {
                                                {100,100,100},
                                                {20,20,20},
                                                {30,30,30},
                                                {40,40,40}
                                            };
                                            
                                            
            
    }
 
}
 
cs

int타입 2차원 배열입니다.

선언과 동시에 초기화하고있습니다.

그러면 int[4][3] 크기입니다.

표로 따지면

100 100 100
20 20 20
30 30 30
40 40 40

이렇게 들어가있는 것이구요

인덱스는

[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
[2][0] [2][1] [2][2]
[3][0] [3][1] [3][2]

이렇게 됩니다.

앞 부분이 행부분

뒷 부분이 열입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Array_Ex1 {
 
    public static void main(String[] args) {
        //2차원 배열 선언과 동시에 초기화를 하고 있다(4행 3열)
        int[][] score = new int[][] {
                                        {100,100,100},
                                        {20,20,20},
                                        {30,30,30},
                                        {40,40,40}
                                    };
                                    
                                    
                                    
        int sum = 0;
        score[0][2= 80;//score[i][j]는 변수와 동일함
        //0행의 데이터를 가지고 있는 주소가 사라지므로 연결이 끊기게 된다.
        //length값 자체를 참조를 할 수가 없다. 왜? null이므로 참조할 값이 없게 된다.
        //score[0] = null;
        //주소값 출력
        System.out.println("2차원 배열의 주소값: " + score);
        System.out.println("2차원 배열의 0행의 주소값: " + score[0]);
        System.out.println("2차원 배열의 1행의 주소값: " + score[1]);
        System.out.println("2차원 배열의 2행의 주소값: " + score[2]);
        System.out.println("2차원 배열의 3행의 주소값: " + score[3]);
        //배열의 길이
        System.out.println("2차원 배열의 길이: " + score.length);
        System.out.println("2차원 배열의 0행의 길이: " + score[0].length);
        System.out.println("2차원 배열의 1행의 길이: " + score[1].length);
        System.out.println("2차원 배열의 2행의 길이: " + score[2].length);
        System.out.println("2차원 배열의 3행의 길이: " + score[3].length);
}
}
cs

다음 코드를 보시면

score [0][2] 에 80을 대입하고 있습니다.

그렇다면 원래 그 위치에 100이있었는데 80이 되겠습니다.

일차원 배열에서는 

score[i] 가 변수와 같은 역할을 했는데

이차원 배열에서는 score[i][j]가 변수와 같은 역할을 합니다.

 

다음 코드를 보시면

결론적으로

이렇게 출력이 됩니다.

메모리상에서

이렇게 만들어집니다.

그래서 score의 길이는 4이고

그 score에 0번째행의 길이는 3이라는 뜻입니다.

 

int [][] score = new int[4][3];

이라면 앞의 [4]가 score의 길이

[3]이 score[i]의 길이가 됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Array_Ex1 {
 
    public static void main(String[] args) {
        //2차원 배열 선언과 동시에 초기화를 하고 있다(4행 3열)
        int[][] score = new int[][] {
                                        {100,100,100},
                                        {20,20,20},
                                        {30,30,30},
                                        {40,40,40}
                                    };
                                    
                                    
                                    
        int sum = 0;
        score[0][2= 80;//score[i][j]는 변수와 동일함
 
       for (int i = 0; i < score.length; i++) {    
        for (int j = 0; j < score[i].length; j++) {
                System.out.println("score[" + i + "][" + j + "]" + score[i][j]);
            }
        
}
}
}
cs

값들을 모두 출력하기위해서는 

이중 for문을 사용해주어야합니다.

그 이유는 

행으로도 돌고, 열로도 돌아야하기 때문입니다.

첫번째 for문은 score의 길이만큼(4) 돌고

두번째 for문은 score[i]의 길이만큼(3) 돕니다.

 

이렇게 출력이되었습니다.

 

 

1
2
3
4
5
6
for(int[] temp : score) {
            for(int i : temp) {
                sum +=i;
            }
        }
        System.out.println("2차원 배열의 총 합 : " + sum);
cs

마지막으로 향상된 for문을 사용해서 값들을 모두 더해보겠습니다.

향상된 for문도 마찬가지로 이중 for문을 돌려주는데요

for( 가져올 타입  변수명 : 가져올 주소){} 

이렇게 사용합니다.

저 for문을 해석하자면

score(int이차원배열)에서 int 1차원 배열로 행을 하나씩 가져오고

그 안에서 (temp)에서 열의 값들을 순서대로 하나씩 가져오겠다는 말입니다.

 

총합이 잘 나오고 있습니다.

 

728x90