안녕하세요 자바칩프라푸치노입니다.
오늘은 자바에서 다차원배열에 대해 알아보겠습니다.
2020/09/26 - [§개발자 되기 프로젝트§/java 이론] - [자바JAVA]일차원 배열 , 배열의 길이, 배열의 선언방법, 배열 초기화, 배열 출력
일차원 배열 포스팅도 있습니다.
이어서 이차원 배열은
타입 [][] 변수이름;
으로 선언하는것이 정석입니다.
(타입 변수이름[][];
타입[] 변수이름[] 이렇게도 됩니다.)
표를 생각하시면서 행과 열이라고 생각하시면 됩니다.
예제를 통해서 알아보겠습니다.
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)에서 열의 값들을 순서대로 하나씩 가져오겠다는 말입니다.
총합이 잘 나오고 있습니다.
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA] 객체지향개념2 - 변수와 메서드. 클래스변수. 인스턴스 변수. 지역변수. static메서드. 인스턴스 메서드 (0) | 2020.10.08 |
---|---|
[자바JAVA] 객체지향개념1 - 클래스와 객체, 클래스 접근 제어자, 메서드 구성 (0) | 2020.10.07 |
[자바JAVA]일차원 배열 , 배열의 길이, 배열의 선언방법, 배열 초기화, 배열 출력 (0) | 2020.09.26 |
[자바JAVA] 반복문 for문, while문 , do while, continue, break (0) | 2020.09.22 |
[자바JAVA] 조건문과 난수 발생 Math.random() (0) | 2020.09.21 |