반응형
● 2차원 배열에 대해서 알아볼게요.
앞서 배운 1차원 배열은 아래와 같이 생겼습니다. 딱 일렬로 세워진 배열이에요.
int[] arr1 = new int[4]
그리고 2차원 배열은 이렇게 행과 열로 구성되어 있습니다.
int[][] arr2 = new int[3][4] [행가로][열세로]
2차원 배열 요소의 전체적인 순차적 접근은 for문의 중첩 반복문을 사용해요.
즉, for문의 외부 반복, 내부 반복을 통해 순차적으로 출력할 수 있습니다.
예시를 통해 어떻게 만들어지는지 확인해볼게요.
public static void main(String[] args) {
int[][] arr = new int[3][4];
int num = 1;
// 배열에 값을 저장
for(int i = 0; i < 3; i++) { //행의 반복문
for(int j = 0; j < 4; j++) { //열의 반복문
arr[i][j] = num;
num++;
}
}
// 배열에 저장된 값을 출력
for(int i = 0; i < 3; i++) { //i행의 값을 출력
for(int j = 0; j < 4; j++) { //j열의 값을 출력
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
다음은 2차원 배열을 접근하는 방법입니다.
우선 2차원 배열이 어떻게 저장되어 있는지 확인해볼게요.
각 배열의 공간을 box라고 보았을 때 각 박스에 어떤 값이 들어있는지 행과 열로 구분합니다.
int [] [] arr = new int [3][4] ;
1차원 배열이 세 개가 들어가고 그 안에 4개씩 들어갑니다.
1차원이 세 개 들어가므로 길이정보는 3이 나오고, 그 세 개의 길이정보를 보면 각각 4가 출력 됩니다.
즉, length는 가장 첫 번째 배열을 확인하기 때문에 [행][열] 에서 행의 길이를 우선 가져오는 것이에요.
그 다음에 행의 length를 확인했을 때 그 안의 열의 길이가 출력됩니다.
다음 예제를 통해 그 길이를 활용해서 행열의 for문으로 2차원 배열의 순차적 접근을 해볼게요.
package day15;
public class ArrayDimension {
public static void main(String[] args) {
int[][] ref = new int[2][3]; // 3칸 짜리 1차원 배열이 두 개 붙어있다.
int num = 1;
for(int i = 0; i < ref.length; i++) { // 2차원 배열의 길이를 잴 때는 앞의 길이를 재므로 i, 즉 2의 길이를 잽니다.
// 두 번 접근을 합니다.
for(int j = 0 ; j < ref[i].length; j++) { //ref[i].length -> 0일 때는 첫 번째 행, 1일 때에는 두 번째 행이므로 각 행에 접근하게 됩니다.
ref[i][j] = num++;
}
}
for(int i = 0; i < ref.length; i++) {
for(int j = 0 ; j < ref[i].length; j++) { // 상기의 for문을 똑같이 기재한 뒤에
System.out.println(ref[i][j]); // 해당 값을 출력하는 것으로 수정해서 실행합니다.
}
}
}
}
package day15;
public class ArrayDimension {
public static void main(String[] args) {
int[][] ref = new int[2][3]; // 3칸 짜리 1차원 배열이 두 개 붙어있습니다.
int num = 1;
for(int i = 0; i < ref.length; i++) { // 2차원 배열의 길이를 잴 때는 앞의 길이를 재므로 i, 즉 2의 길이를 잽니다.
// 두 번 접근을 합니다.
for(int j = 0 ; j < ref[i].length; j++) { //ref[i].length -> 0일 때는 첫 번째 행, 1일 때에는 두 번째 행이므로 각 행에 접근하게 됩니다.
ref[i][j] = num++;
}
}
for(int i = 0; i < ref.length; i++) {
for(int j = 0 ; j < ref[i].length; j++) { // 상기의 for문을 똑같이 기재한 뒤에
System.out.println(ref[i][j]); // 해당 값을 출력하는 것으로 수정해서 실행합니다.
}
}
}
}
설명은 각주를 참고해주세요!
● 2차원 배열의 초기화에 대해서 알아볼게요.
int[][] arr = {
{1, 2},
{3},
{4, 5}
arr의 배열 안에 2차원의 배열을 생성합니다.
행과 열로 이루어졌으므로 각 행{} 의 갯수 안에 각 열{}의 요소가 들어있어야 해요.
이렇게 초기화를 했을 경우에 각 요소들은 arr이라는 3행 2열의 자료 속에 데이터가 들어가 있는 것입니다.
비어 있는 {3} <- 2행의 두 번째 열은 데이터가 공란으로 비어져 있어요.
1 | 2 |
3 | |
4 | 5 |
그럼 위에 초기화 된 배열을 for문의 중첩으로 출력해보겠습니다.
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
조금 전에 2차원 배열을 순차적으로 출력했던 것과 동일합니다.
package day15;
public class ArrayDimension {
public static void main(String[] args) {
int[][] arr = {
{1, 2},
{3},
{4, 5}
};
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
}
반응형
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 24. 메소드 오버라이딩, instanceof 연산자 (0) | 2022.10.31 |
---|---|
자바 기초 공부 일지 23. 클래스 상속과 생성자 (0) | 2022.10.31 |
자바 기초 공부 일지 21. enhanced for문 (for - each 문) (0) | 2022.10.31 |
자바 기초 공부 일지 20. 1차원 배열, int [] 배열, 배열의 디폴트 초기화 (수정중) (0) | 2022.10.28 |
자바 기초 공부 일지 19. 콘솔 입력(Scanner 클래스) (0) | 2022.10.28 |