TIL

이우진·2023년 7월 21일
/* 2차원 배열
 * 
 * - 자료형이 같은 1차원 배열을 묶음으로 다루는 것
 * -> 행,열 개념 추가
 * 
 * 
 **/

public void ex1() {
	
	//2차원 배열 선언
	int[][]arr;
	//int 2차원 배열을 참조하는 참조변수 선언
	// 참조형 == 참조 변수== 레퍼런스 변수 == 레퍼런스
	
	//2차원 배열 할당
	// -> new 자료형[행크기][열크기]
	
	arr=new int[2][3];
	//heap 영역에 int 2차원 배열 2행 3열 공간을 할당
	
	//2차원 배열 초기화
	//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) 2중 for문을 이용한 초기화
	
	int num =10; // 배열 요소 초기화에 사용할 변수
	
	//* 배열 길이
	//-> 배열명.length 는 변수가 직접 참조하고있는 배열의 길이를 반환
	
	System.out.println(arr.length); // (행길이)
	//arr이 참조하고 있는 2차원 배열의 행의 길이
	
	System.out.println(arr[0].length); //3(열길이)
	//arr[0] 행이 참조하고 있는 1차원 배열의 (열)길이
	
	System.out.println(arr[1].length); //3(열길이)
	//arr[1] 행이 참조하고 있는 1차원 배열의 (열)길이
	
	for(int row = 0; row < arr.length; row++) { // 행 반복(0,1)
		
		for(int col=0; col < arr[row].length;  col++) {
			
			arr[row][col] = num;
			num += 10;
			
		}
	}
	
	//Arrays.toString(배열명) : 참조하고 있는 1차원 배열 값을 문자열로 반환
	System.out.println("toString() : " + Arrays.toString(arr));
	
	//Arrays.deeptoString(배열명)
	//- 참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가서 
	// 모든 값을 문자열로 반환
	System.out.println("deepToString() :"+ Arrays.deepToString(arr));
    public void ex2() {
	
	// 2차원 배열 선언과 동시에 초기화
	// 3행 3열짜리 정수형 2차원 배열 선언과 동시에
	// 1~9까지 초기화
	int[][] arr = { {1,2,3},
			       {4,5,6},
			       {7,8,9,} };
	
	//행 별로 합 출력
	for(int row = 0;row < arr.length; row++) { //행 반복
		int sum = 0;
		
		for(int col = 0; col < arr. length; col++) { // 열 반복
			
			sum += arr[row][col];
			     //    0      0 --> 1
			     //    0      1 --> 2
			     //    0      2 --> 3
			//-----------------------------
			     //    1      0 --> 4 
			     //    1      1 --> 5
			     //    1      2 --> 6
			//------------------------------
			     //    2      0 --> 7
			     //    2      1 -->8
			     //    2      2 -->9
		}
		
		System.out.printf("%d행의 합 : %d\n",row,sum);
		
	}
	
	System.out.println("--------------------------");
	

	//열 별로 출력
	// 0열의 합 : 12
	// 1열의 합 : 15
	// 2열의 합 : 18
    
    for(int col = 0; col < arr[0].length; col++) { //열 반복
    	
    	int sum = 0;
    	for(int row=0; row<arr.length; row++) { // 행 반복
    		
    		sum += arr[row][col];
    		//-----------------1턴
    		//           0   0 
    		//           1   0
    		//           2   0
    		//-----------------2턴
    		//           0   1
    		//           1   1
    		//           2   1
    		//------------------3턴
    		//           0   2
    		//           1   2
    		//           2   2
    		
    		
    	}
    	
    	System.out.printf("%d 열의 합 : %d\n",col ,sum);
    }
    	int sum = 0;
    	
    	for(int row = 0; row< arr.length; row++) {
    		
    		for(int col =0; col<arr.length; col++) {
    			
    			sum += arr[row][col];
    		}
    	
    	}
    	System.out.println("전체 합 : "+ sum);

}

	
	// 전체 합 출력
	// ex) 전체 합 : 45

	
    	public void ex3() {
    		
    	// 가변 배열
    		// - 2차원 배열 생성 시 마지막 배열 차수(열)을 지정하지 않고
    		// 나중에 서로 크기가 다른 1차원 배열을 생성하여 참조하는 배열
    	
    		char[][]arr= new char[4][];
    		            // chat 2차원 배열 생성 시 행 부분만 생성
    		
    		arr[0]= new char[3]; // 0행에 3열짜리 1차원 배열을 생성하여 주소값 저장
    		arr[1] = new char[4]; // 1행에 4열짜리 1차원 배열을 생성하여 주소값 저장
    		arr[2] = new char[5]; // 2행에 5열짜리 1차원 배열을 생성하여 주소값 저장
    		arr[3] = new char [2]; // 3행에 2열짜리 1차원 배열을 생성하여 주소값 저장
    		
    		
    		char ch = 'a';
    		for(int row = 0; row<arr.length; row++) { //행
    			
    			for(int col; col<arr[row].length; col++) {
    				
    				arr[row][col] = ch++;
    			}
    		}
    		
    			
    	}
    	 System.out.println(Arrays.deepToString(arr));

2차원 배열:
1차원 배열의 묶음으로 배열 안에 다른 배열이 존재한다.
2차원 배열은 할당된 공간마다 인데스 번호 두 개 부여 ex) arr[][](앞 번호는 행,
뒷 번호는 열 [0][0])

2차원 배열 선언과 할당

배열선언 :
자료형[][] 배열명;
자료형 배열명[][];
자료형[] 배열명[];

배열 할당 :
자료형[][] 배열명 = new 자료형[행크기][열크기];
자료형 배열명[][] = new 자료형 [행크기ㅐ][열크기];
자료형[] 배열명[] = new 자료형 [행크기][열크기];
ex) int[][] arr = new int[3][4];
int arr [][] = new int[3][4];
2차원 배열 초기화

인덱스를 이용한 초기화 :
ex) arr[0][0] = 1;
arr[1][1] = 2;
for문을 이용한 초기화
ex)for(int i = 0; i < arr.length; i++) {
for(int j = 0; j< arr[i].length; j++) {
arr[i][j] = j:
}
}
선언과 동시에 초기화
ex) int[][] arr = {{1,2,3,4},{5,6,7,8}};
int[][] arr = new int[][] {{1,2,3,4},{5,6,7,8}}:
String fruit[][] = {["사과","딸기","석류"},{"바나나","참외","레몬"}};

가변 배열: 다차원 배열 생성 시 마지막 배열차수의 크기를 지정하지 않고
나중에 서로 크기가 다른 배열로 지정한 배열.

가변 배열 할당
(2차원 가변 배열)

자료형[][] 배열명 = new자료형[행크기][];

ex) int[][] arr = new int[4][];

   arr[0] = new int [3];
   arr[1] = new int [4];
   arr[2] = new int [5];
   arr[3] = new int [2];
                           
profile
이우진

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

2차원 배열에 대한 설명이 잘 정리되어 있어서 많이 배웠어요. 해당 배열의 행과 열의 크기를 알아내는 방법이나 초기화 하는 방법 등이 구체적이어서 좋았어요. 특히 Arrays.toString과 Arrays.deepToString의 차이점은 처음 알았네요. 감사합니다!

답글 달기