JAVA - 2차원 배열

안녕하세요 .

국비 기록용으로 남길려고합니다 

참고 하실때 도움되셨으면좋겠습니다 ..!(너무믿지 말아주세요 ...)


2차원 배열

자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재

2차원 배열은 할당된 공간마다 번호 두 개 부여

 

2차원 배열선언

배열 선언시 메모리 stack영역에 참조 변수 생성된다.

3가지 방법이존재하지만,

자료형[][] 배열명; <<이방법이 제일많이 사용된는것같다.

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

int[][] arr1;
int arr1[][];
int[] arr1[];

 

2차원 배열할당

배열 할당 시 headp영역에 해당 크기만큼의 공간 할당

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

배열크기 확인

// 배열 크기확인하는방법
int arr[][] = new int[3][5];
// 행
arr.length; //행의 길이는 3
// 열
arr[0].length; //열의 길이는 5
arr[1].length; //열의 길이는 5
arr[2].length; //열의 길이는 5

 

이차원 배열 for문 사용

이차원 배열은 이중for문이 많이사용되는것 같다.

// 이차원 배열의 인덱스에 접근하기 위해서는 이중for문 사용
		// arr1[0][0] ~ arr[2][4]
		for(int i = 0; i < arr1.length; i++) {
			for(int j = 0; j < arr1[i].length; j++) {
				System.out.print(arr1[i][j] + " ");
			}
			System.out.println();
		}

 

int[][] arr = new int[3][5];
		
		// 중첩 for문을 이용하여 인덱스 순차 접근하여 값 기록
		int value = 1;
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				arr[i][j] = value++;
			}
		}
		
		//출력
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				System.out.printf("%2d ",arr[i][j]);
			}
			System.out.println();
		}

 

 

이차원 가변 배열

행은 정해졌으나 각 행에 대한 열의 갯수가 정해지지 않은 상태

자료형이 같은 1차원 배열 여러 개를 하나로 묶은 것이 2차원 배열이므로

묶여있는 1차원 배열의 길이가 꼭 같을 필요는 없음

// 가변 배열
		// => 행은 정해졌으나 각 행에 대한 열의 갯수가 정해지지 않은 상태
		//    자료형이 같은 1차원 배열 여러 개를 하나로 묶은 것이 2차원 배열이므로
		//    묶여있는 1차원 배열의 길이가 꼭 같을 필요는 없음
		
		int[][] arr = new int[3][]; // 가변 배열 할당(행의 크기는 3행으로)
		
		arr[0] = new int[2]; //0행은 2열로
		arr[1] = new int[1]; //1행은 1열로
		arr[2] = new int[3]; //2행은 3열로

		int value = 1;
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				arr[i][j] = value++;
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}

 

예제

	// double형 2행 4열 배열을 만들어
		// 3명 학생의 국어(0행), 영어(1행) 성적을 입력 받고 마지막 열(3열)에는 합계를 담기
		double[][] arr = new double[2][4];
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < arr.length; i++) {
			// 국어 or 영어 합계
			double sum = 0.0;
			
			for(int j = 0; j < arr[i].length - 1; j++) {
				if(i == 0) {
					System.out.println(j + 1 + "번 학생 국어 점수 : ");
				}
				else {
					System.out.println(j + 1 + "번 학생 영어 점수 : ");
				}
				
				arr[i][j] = sc.nextDouble();
				sum += arr[i][j];
			}
			arr[i][3] = sum;
		}
		
		// 출력
		for(int i = 0; i < arr.length; i++) {
			if(i == 0) {
				System.out.print("국어 점수 : ");
			}else {
				System.out.print("영어 점수 : ");
			}
			for(int j = 0; j < arr[i].length; j++) {
				if(j < arr[i].length - 1) {
					System.out.print(arr[i][j] + " ");
				}else {
					System.out.print("합계 : " + arr[i][j]);
				}
			}
			System.out.println();
		}
		

예제2

	// char형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아
		// 해당 좌표값을 'X' 로 변환해 2차원 배열 출력하기
		// 반복 실행하되 행이나 열 입력 시 0미만 5이상의 수가 입력되면 프로그램 종료
		Scanner sc = new Scanner(System.in);
		char[][] arr = new char[5][5];
		
		while(true) {
			System.out.print("행 인덱스 입력>> ");
			int row = sc.nextInt();
			
			System.out.print("열 인덱스 입력>> ");
			int col = sc.nextInt();
			sc.nextLine();
			
			if(row < 0 || row > 4 || col < 0 || col > 5) {
				break;
			}
			
			arr[row][col] = 'X';
			
			System.out.println("\t0\t1\t2\t3\t4\t");
			for(int i = 0; i < arr.length; i++) {
				System.out.print(i + "\t");
				for(int j = 0; j < arr[i].length; j++) {
					System.out.print(arr[i][j] + "\t");
				}
				System.out.println();
			}
			System.out.println();
			
		}
		System.out.println("프로그램을 종료합니다.");
		
		

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA - 객체(2편)  (0) 2021.05.24
JAVA - 객체(1편)  (0) 2021.05.23
JAVA - 배열  (0) 2021.05.18
JAVA - 반복문(for, while), 분기문(break, continue)  (0) 2021.05.14
JAVA - 조건문(if, else, else if, switch)  (0) 2021.05.13
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유