2차원 배열

김찬희·2023년 2월 14일
0

KH정보교육원

목록 보기
6/27

▶ 2차원 배열

자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열이 존재
2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여 (앞 번호는 행, 뒷 번호는 열([0][0]))
-> 1차원 배열 참조 변수를 묶음으로 다루는 것
--> 2차원 배열 == 1차원 배열 참조변수로 이루어진 배열
√ 인덱스 값 이해

▶ 2차원 배열 선언과 할당

√ 배열 선언

자료형[][] 배열명;
자료형 배열명[][];
자료형[] 배열명[];

√ 배열 할당

자료형[][] 배열명 = new 자료형[행크기][열크기];
자료형 배열명[][] = new 자료형[행크기][열크기];
자료형[] 배열명[] = new 자료형[행크기][열크기];
ex)
int[][] arr = new int[3][4];
int arr[][] = new int[3][4];

▶ 2차원 배열 구조

▶ 2차원 배열 초기화

√ 인덱스를 이용한 초기화

	arr[0][0] = 1;
    arr[1][1] = 2;

√ for문을 이용한 초기화

	for(int i=0; i<arr.length; i++) {
    	for(int j=0; j<arr[i].length; j++) {
        	arr[i][j] = j;
        }
    }

√ 선언과 동시에 초기화

	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];

▶ 가변 배열 구조

package edu.kh.array.ex;

public class ArrayEx2 {

	// 2차원 배열 사용법 1
	public void ex1() {
		
		// 2차원 배열 선언 및 할당
		int[][] arr = new int[2][3];  // 2행 3열
		System.out.println("행의 길이 : " + arr.length);
		System.out.println("열의 길이 : " + arr[0].length);
		
		// 2차원 배열 초기화
		// 1) 인덱스를 이용한 초기화
		arr[0][0] = 7;
		arr[0][1] = 14;
		arr[0][2] = 21;
		
		arr[1][0] = 28;
		arr[1][1] = 35;
		arr[1][2] = 42;
		
		System.out.println("------------------");
		
		// 2) 2중 for문을 이용한 초기화 방법
		int number = 0;
		for(int row=0;row<arr.length;row++) {
			for(int col=0;col<arr[row].length;col++) {
				arr[row][col] = number++ * 5;
			}
		}
		
		System.out.println("------------------");
		
		// 3) 선언 및 초기화
		
		int[][] arr2 = {
						{1, 2, 3, 4, 5},
						{60, 70, 80, 90, 100},
						{11, 22, 33, 44, 55}
						};
		System.out.println(arr2[1][3]);
		
		System.out.println("------------------");
		
		for(int row=0;row<arr2.length;row++) {
			System.out.print(row + "행 : ");
			// 한 행에 있는 모든 열의 값 출력
			for(int col=0;col<arr2[row].length;col++) {
				System.out.print(arr2[row][col] + " ");
			}
			System.out.println();  // 개행
		}
	}
	
	// 2차원 배열 응용 1
	public void ex2() {
		
		// 3행 3열 짜리 int 2차원 배열에 난수(0~9)를 대입한 후
		// 각 행의 합과 전체 합 출력
		
		// 3  2  5
		// 9  7  2
		// 1  2  3
		
		// 0행의 합 : 10
		// 1행의 합 : 18
		// 2행의 합 : 6
		// 전체 합 : 34
		int[][] arr = new int[3][3];
		for(int row = 0;row<arr.length;row++) {
			for(int col =0;col<arr[row].length;col++) {
				arr[row][col] = (int)(Math.random()*10);
				System.out.printf("%3d", arr[row][col]);
			}
			System.out.println();
		}
		System.out.println();

		int total = 0;
		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);
			total += sum;
		}
		System.out.println("전체 합 : " + total);
		
		
	}
	
	public void ex3() {
		// 가변 배열 
		// - 2차원 배열 할당 시 
		//   마지막 차수(열)의 크기를 지정하지 않고
		//   추후에 각행에 새로운 1차원 배열의 주소를 대입하는 배열
		
		char[][] arr = new char[4][];
		arr[0] = new char[3];
		arr[1] = new char[4];
		arr[2] = new char[5];
		arr[3] = new char[2];
		
		// 배열의 모든 요소에 a부터 시작하여 하나씩 증가하는 알파벳 대입
		char ch = 'a';
		for(int row=0;row<arr.length;row++) {
			
			// 각 행의 열의 길이가 다르기 때문에
			// 조건식의 값이 행별로 변할 수 있도록 
			// arr[row].length 사용
			for(int col=0;col<arr[row].length;col++) {
				arr[row][col] = ch;  // 요소에 문자 대입
				ch++;  // 다음 문자로 증가
				System.out.print(arr[row][col]+" ");  // 저장된 알파벳 출력
			}
			System.out.println();
		}
	}
}
profile
김찬희입니다.

0개의 댓글