국비 9

냐아암·2023년 4월 26일
0

국비

목록 보기
13/114

2차원 배열

  • 1차원 배열: 같은 자료형 변수를 묶음으로 다루는 것

  • 2차원 배열: 같은 자료형 1차원 배열을 묶음으로 다루는 것 (참조 2번)

  • 3차원 배열: 같은 자료형 2차원 배열을 묶음으로 다루는 것

  • int[][] arr;
    int [][]을 참조하는 변수 arr 선언

  • new int[2][4];
    heap 영역에 새롭게 2행 4열(가로 2줄, 세로 4줄) int 2차원 배열을 할당(생성)

    --> 생성된 int 2차원 배열의 시작 주소를 arr에 대입

  • 배열길이: 배열명.length는 변수가 직접 참조하고 있는 길이의 반환
    -Arrays.toString: 참조하고 있는 1차원 배열 값을 문자열로 반환
    -Arrays.deepToString: 참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가 모든 값을 문자열로 반환


[2차원 배열 초기화]
1. 2중 for문 사용
2. 행, 열을 인덱스를 이용해 직접 초기화


가변 배열

-2차원 배열 생성 시 마지막 배열 차수(열)을 지정하지 않고 나중에 서로 크기가 다른 1차원 배열을 생성하여 참조하는 배열


Array2Example

package edu.kh.array2.ex;

import java.util.Arrays;

public class Array2Example {
	
	/*
	 * 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문을 이용한 초기화
		
		//*배열길이
		//->배열명.length는 변수가 직접 참조하고 있는 배열의 길이 반환
		
		int num=10;// 배열 요소 초기화에 사용할 변수
		System.out.println(arr.length); //2 -> arr이 참조하고 있는 2차원 배열의 행의 길이
		System.out.println(arr[0].length); //3-> arr[0]행이 참조하고 있는 1차원 배열(열)의 길이
		
//		int count=1;
		
		for(int row = 0; row<arr.length; row++) { //행 반복
			for(int col = 0; col<arr[row].length; col++) {
				arr[row][col] = num;
				num+=10;
				
//				arr[row][col] = count*num;
//				count++;
			}
		}
		
		//Arrays.toString(배열명): 참조하고 있는 1차원 배열 값(주소값)을 문자열로 반환
		System.out.println(Arrays.toString(arr)); //[[I@6f2b958e, [I@1eb44e46]
		
		//Arrays.deepToString(배열명)
		//-참조하고 있는 배열의 데이터가 나오는 부분까지 파고 들어가 모든 값을 문자열로 반환
		System.out.println(Arrays.deepToString(arr)); //[[10, 20, 30], [40, 50, 60]]
		
		
	}
	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++) { //열 반복
				sum+=arr[row][col]; //현재 헹의 모든 열 값 누적
			}
			System.out.printf("%d행의 값: %d\n",row,sum);
		}
		System.out.println("----------------------------------------");
		
		//열별로 합 출력
		// -> 열부터 지정 후 각 행의 값 누적
		// --> 완전한 사각형의 형태를 지닌 2차원 배열은 모든 열의 길이가 같다.
		
		for(int col = 0; col<arr[0].length; col++) { //열 반복
			int sum = 0;
			for(int row = 0; row<arr.length; row++) { //행 반복
				sum+=arr[row][col];
				//		  0    0
				//		  1    0
				//		  2    0
			}
			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행에 5열짜리 1차원 배열을 생성하여 주소값 저장
		arr[3]=new char[2]; //3행에 2열짜리 1차원 배열을 생성하여 주소값 저장
		
		// 각 배열 요소에 'a'부터 차례대로 대입
		
		char ch = 'a';
		
		
		for(int row = 0; row<arr.length; row++) {
			for(int col = 0; col<arr[row].length; col++) {
				arr[row][col] = ch++; //char은 숫자로 저장
				//후위 연산자이기 때문에 첫 대입 때 연산 전 대입
			}
		}
		System.out.println(Arrays.deepToString(arr));
	}

}

Array2Run

package edu.kh.array2.ex;

public class Array2Run {

	public static void main(String[] args) {
		
		Array2Example arr2Ex = new Array2Example();
		
		arr2Ex.ex1();
		arr2Ex.ex2();
		arr2Ex.ex3();

	}

}
profile
개발 일지

0개의 댓글