reallygeorge? 2020. 3. 27. 21:12
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();
}
 
 
}
 
}