자바/자바 입문 공부일지

자바 기초 공부 일지 22. 2차원 배열, 2차원 배열 초기화

Tomitom 2022. 10. 31. 09:32
반응형

● 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]);
			}
		}
	}
}

 

반응형