2차원 배열 정의 int[][] m =new int[행][열]; |
2차원 배열의 저장 원리 |
2차원 배열에 for문 사용하기 int[][] m =new int[행][열]; |
for(조건식 <m.length){for(조건식 <m[0].length){}} |
|
|
|
|
|
|
|
------------------------------------------------------------------------------------------------------ |
2차원 배열 |
행렬처럼 배열을 행과 열로 엮어 표현한다. |
int[][] m =new int[행][열]; <-행과 열은 크기를 말한다. m[행][열]은 만들어진 방의 번호이다. 둘이 안같다 주의. |
|
|
|
ex) |
1 2 3 |
1 5 6 7 m[1][1] = 5 |
2 8 9 10 m[1][3] = 7 |
3 111213 |
-------------------------------------------------------------------------------------------------------- |
2차원 배열의 저장 원리 |
|
stack |
참조값만 저장 |
|
#100 <-메모리 상의 주소값 |
□ |
↑ |
안에 |
#110 #120 #130 |
□ □ □ |
|
↑ ↑ ↑ |
|
|
m[0] m[1] m[2] <-행 표시 |
|
|
↓ ↓ ↓ |
|
#110 #120 #130 |
|
----- ----- ----- |
|1|2| |1|2| |1|2| <-열 표시 |
----- ----- ----- |
|
|
#110의 1번 index에는 m[0][0]이 들어있다 |
#110의 2번 index에는 m[0][1]이 들어있다. |
|
#120의 1번 index에는 m[1][0]이 들어있다. |
#120의 2번 index에는 m[1][1]이 들어있다. |
|
#130의 1번 index에는 m[2][0]이 들어있다. |
#130의 2번 index에는 m[2][1]이 들어있다. |
|
*reference type의 크기 |
전부 32bit이다. 왜냐하면 참조값만 가지기 때문이다. |
때문에 m안의 m[0] m[1] m[2] 도 전부 32bit를 가지고 있다. |
------------------------------------------------------------------------------------------------------------- |
2차원 배열에 for문 사용하기 |
int[][] m =new int[행][열]; |
for(조건식 <m.length){for(조건식 <m[i].length){}} |
ex) |
만약 각 배열을 이루는 index가 순서대로 123456을 출력하게 하고 싶을경우 |
int[][] m = new int[3][2]; |
int counter= 0; <-counter 변수를 만들고 |
for (int i = 0; i < m.length; i++) { |
for (int j = 0; j < m[i].length; j++) { |
counter++; <-for문이 변할때마다 1씩증가 하게 해서 |
m[i][j]= counter; <2차원 배열과 변수를 조합시켜라 |
System.out.println(m[i][j]); |
} |
|
} |
--------------------------------------------------------------------------------------------------------------- |
2차원 배열의 초기화 |
|
1차원 배열의 초기화처럼 |
int[][] m { { , ,}, <-3행 3열이된다. |
{ , ,}, |
{ , ,} } |
|
|
ex) |
package day05; |
|
//2차원 배열의 초기화 |
public class ArrayEx6 { |
public static void main(String[] args) { |
|
int[][] m = { { 0, 0, 0 }, //<-4행 3열 |
{ 0, 1, 2 }, |
{ 0, 2, 4 }, |
{ 0, 3, 6 } |
}; |
|
for (int i = 0; i < m.length; i++) { |
for (int j = 0; j < m[i].length; j++) { |
System.out.print(m[i][j]); |
|
} |
System.out.println(); |
} |
|
|
} |
|
} |
|
*for문에서 두번째 for문의 m[0].length를 m[i].length로 바꿔야 하는이유 |
각 행마다 열의 length가 달라지게 되면 [0]이 되어버리면 맞지 않는다 . |
때문에 유연하게 대응할수 있도록 하는 m[i].lenghth로 해주어야 한다. |
public class ArrayEx6 { |
public static void main(String[] args) { |
|
int[][] m = { { 0, 0, 0 }, |
{ 0, 1, 2 ,1,2,3}, |
{ 0, 2, 4 ,2}, |
{ 0, 3, 6 ,4,5,6,7,8} |
}; |
|
for (int i = 0; i < m.length; i++) { |
for (int j = 0; j < m[i].length; j++) { |
System.out.print(m[i][j]); |
|
} |
System.out.println(); |
} |
|
|
} |
|
} |