✍ 2차원 배열
1차원 배열: 자료형이 같은 변수의 묶음
2차원 배열: 자료형이 같은 1차원 배열의 묶음
* - 2차원 배열은 각 칸마다 2개의 인덱스 번호를 부여 받는다. arr[][]: 자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열이 존재
2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여 (앞 번호는 행, 뒷 번호는 열 ([0][0]) )
참고) 배열 = 자료형이 같은 변수의 묶음
arr[m] [n]
m :행 줄 수 n : 열 한 줄에 있는 칸 수
arr[0][0]
arr[0][1]
arr[0][0]
ex)아파트 동 호수
1. 배열 선언
자료형[ ][ ] 배열명 ;
자료형 배열명[ ][ ] ;
자료형[ ] 배열명[ ];
배열명 = ......................................................................... new 자료형[행크기][열크기];
2차원 배열은 각 칸마다 2개의 인덱스 번호를 부여 받는다.
arr[1][3] 앞에[1] == 행, [3] == 열
참고
int[][] arr; arr = new int[2][3];
➡ Stack 메모리 영역에 int[][] (int2차원 배열)을 참조할 참조 변수 arr선언
//행의 인덱스 번호: 0, 1
// 열의 인덱스 번호 : 0, 1, 2
+그림추가
2차원 배열 참조 변수 == ⭐1차원 배열 참조 변수의 묶음⭐
arr[row].length 바깥 반복문에서 그 해당 행의 길이
arr 0번 행의 길이 : arr[0].length == 3
arr 1번 행의 길이 : arr[1].length == 3 -> 열의 개수
2차원 배열인데 행 열을 다 쓰지않고 행만 써도 길이를 알 수 있다.
arr.length == 2 == arr이 참조하는 2차원 배열의 행의 개수
2차원 배열에서 행의 개수가 궁금하다면
arr.length
열의 개수가 궁금하다면
arr[행]
2. 배열 할당
자료형[ ][ ] 배열명 = new 자료형[행크기][열크기];
자료형 배열명[ ][ ] = new 자료형[행크기][열크기];
자료형[ ] 배열명[ ] = new 자료형[행크기][열크기];
int[][] arr = new int[3][4];
int arr[][] = new int[3][4];
할당을 두개해야한다.
2차원 배열 구조
참고) string배열의 참조의 참조하는 구조와 비슷하다.
각 행마다 다른 구조를 한다.
3. 배열 초기화
👉 값이 10, 20, 30, 40, 50, 60으로 초기화
1) 인덱스를 이용하여 직접 초기화
arr[0][0] = 10; arr[0][1] = 20; arr[0][2] = 30; arr[1][0] = 40; arr[1][1] = 50; arr[1][2] = 60;
2) for문을 이용한 초기화
for(int row = 0; row< arr.length; row++) { //0행,1행 // arr.length == 행의 개수 == 2 for(int col = 0; col<arr[row].length; col++) { //1) 수식 이용 // arr[row][col] = (row*30) + 10*col +10; //단순하게 하는방법 arr[row][col] = num; //반복문을 돌면서 num에 값을 누적 num += 10; //num 값을 10씩 증가시킨다. 다음값에는 10이 누적된 값을 적용 } }
3) 2차원 배열 선언과 동시에 초기화
int[] tmp1 = {10, 20, 30}; //1차원 배열 선언과 동시에 초기화 (중괄호 안에 나열될 값을 순서대로 쓴다.) int[] tmp2 = {40, 50, 60}; //1차원 배열 선언과 동시에 초기화 (중괄호 안에 나열될 값을 순서대로 쓴다.) int[][] arr = { {10, 20, 30} , // ,를 붙여서 행 구분 {40, 50, 60} };//1차원 배열 두개를 가져와서 묶었다
3-1) 출력 시 행, 열 역순으로 초기화
정방향
10 20 30
40 50 60
역방향
60 50 40
30 20 10
for(int row = arr.length -1; row>=0 ; row --) { //행 역순, -1해주는 이유는 인덱스 번호는 543210이기 때문 for(int col = arr[row].length-1; col >=0; col--) { System.out.print(arr[row][col]+ " "); //for문 방향을 바꿔서 --..? } System.out.println(); }
arr[row].length-1
// 참조하고있는 열의 배열이 0,1,2인데
// 역순으로 접근하기 위해서는 2부터 시작해야한다 => 행의 길이 -1
✍ 가변 배열
: 행의 개수는 정해져 있으나 열의 개수가 정해져 있지 않은 2차원 배열
1. 가변 배열 할당
int[][] arr = new int[4][]; // 열 개수 지정하지 x arr[0] = new int[3]; //0번 행에 3열짜리 1차원 배열 추가 arr[1] = new int[4]; //1번 행에 4열짜리 1차원 배열 추가 arr[2] = new int[5]; //2번 행에 5열짜리 1차원 배열 추가 arr[3] = new int[2]; //3번 행에 2열짜리 1차원 배열 추가
int[][] arr = new int[4][]; // 열 개수 지정하지 x arr[0] = new int[3]; //0번 행에 3열짜리 1차원 배열 추가 arr[1] = new int[4]; //1번 행에 4열짜리 1차원 배열 추가 arr[2] = new int[5]; //2번 행에 5열짜리 1차원 배열 추가 arr[3] = new int[2]; //3번 행에 2열짜리 1차원 배열 추가 int num = 0; //0부터 1씩 순서대로 증가하며 배열 요소 초기화하는 변수 for(int row =0; row<arr.length; row++) { //arr.length; ==4 행의개수 for(int col = 0; col<arr[row].length; col++) { //각 행마다 열의개수 구하기 arr[row][col] = num++; // 증감연산자 후위연산 //대입 먼저하고 1증가해라 System.out.printf("%4d", arr[row][col]); } System.out.println(); //행 변경 줄 바꿈 }
'Backend > Java' 카테고리의 다른 글
[Java] OOP 1_Object Oriented Programming(객체지향) (1) | 2021.09.06 |
---|---|
[Java] Array(배열)_3 (배열 복사) (0) | 2021.09.03 |
[Java] Array(배열)_String[] (null) (0) | 2021.09.02 |
[Java] Array(배열)_2 (초기화, Arrays 클래스, Arrays.toString) (0) | 2021.09.01 |
[Java] Array(배열)_기초1 (0) | 2021.08.31 |