Array (배열) 02

Zino·2022년 12월 14일

Java

목록 보기
9/26
post-thumbnail

🔍 2차원 배열

  • 자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열이 존재
  • 2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여 (앞 번호는 행, 뒷 번호는 열 ([0][0]) )


✔️ 2차원 배열 선언과 할당

  • 🌱 배열 선언

자료형[ ][ ]    배열명 ; 

자료형    배열명[ ][ ] ;

자료형[ ]    배열명[ ]; 

💡 1 차원 배열 선언 -> int[] arr / int arr[]
💡 2 차원 배열 선언 -> int[][] arr / int arr[][]


  • 🌱 배열 할당

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

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

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

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

✔️ 2차원 배열 구조


✔️ 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차원 배열 생성 시 마지막 배열 차수(열)를 지정하지 않고,
    나중에 서로 크기가 다른 1차원 배열을 생성하여 참조하는 배열

⚡️ 가변 배열 구조


📒 예제

	public void ex1() {
		
		//2차원 배열 선언
		
		int[][] arr;
		// int 2차원 배열을 참조하는 참조 변수 선언
		//int arr[][]
		//int[] arr[]
		// note ! (참조형 == 참조 변수 == 레퍼런스 변수 == 레퍼런스)
		
		// 2차원 배열 할당
		// -> new 자료형[행크기][열크기]
		
		arr = new int[2][3];
		// heap영역에 int 2차원 배열 2행 3열공간을 할당
		
		
		// 2차원 배열 초기화
		// 1) 행, 열 인덱스르 이용해서 직접 초기화
		
		/*
		arr[0][0] = 100;
		arr[0][1] = 200;
		arr[0][2] = 300;

		arr[1][0] = 400;
		arr[1][1] = 500;
		arr[1][2] = 600;
		*/
		
		//2) 2중 for문을 이용한 초기화
		
		//배열 요소 초기화에 사용할 변수.
		int num = 10;
		
		// * 배열 길이
		// -> 배열명.length는 변수가 직접 참조하고 있는 배열의 길이를 반환
		
		System.out.println(arr.length); // 2 (행 길이)
		//arr이 참조하고 있는 2차원 배열의 행의 길이
		
		System.out.println(arr[0].length);
		//arr[0]행이 참조하고있는 1차원 배열(열)의 길이
		
		for(int row = 0; row < arr.length; row++ ) {//행 반복
			for(int col = 0; col < arr[row].length; col++) {//열 반복(0,1,2)
				arr[row][col] = num;
				num += 10;
			}
		}
		//출력
		//Arrays.toString(배열명) : 참조하고 있는 1차원 배열 값을 문자열로 반환
		System.out.println(Arrays.toString(arr));
		
		//Arrays.deepToString(배열명)
		//- 참조하고있는 배열의 데이터가 나오는 부분까지 파고들어가서
		// 모든 값을 문자열로 반환
		
		System.out.println(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[row].length; col++) {
								//0  0,1,2
								//1  0,1,2
								//2  0,1,2
				//현재 행의 모든 열의 값을 누적
				 sum += arr[row][col]; 
			}
			System.out.printf("%d행의 합: %d\n", row, sum);
		}
		System.out.println("=======================");
		//열 별로 합 출력
		//-> 열 부터 지정 후 각 행의 값을 누적
		
		for(int col = 0; col < arr[0].length; col++) {//열반복
			
			int sum =0;
			
			for(int row = 0; row < arr.length; row++) {
				 sum += arr[row][col]; 
			}
			System.out.printf("%d열의 합: %d\n", col, sum);
		}
		System.out.println("=======================");
		
		//전체 합 출력
		
		int sum = 0;
		
		for(int row = 0; row < arr.length; row++) {
			for(int col = 0; col < arr[row].length; col++) {
				sum += arr[row][col];
			}
		}
		System.out.println("전체 합:" + sum);
		
	}

📗 예제

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

0개의 댓글