이차원 배열

- 중첩적인 구조를 가지는 배열

- 행과 열 차원의 배열

 

1. 참조형 변수 선언 (일반 배열과 마찬가지로 선언 방식은 2가지 이지만, 첫 번째 방식을 주로 사용)

1. 자료형[][] 변수명;
int[][] arr;

2. 자료형 변수명[][];
int arr[][];

 

2. 인스턴스 선언

1. new 자료형[개수][개수];
new int[5][5];

2. new 자료형[][] { {데이터, 데이터...}, {데이터, 데이터...}, {데이터, 데이터...}... };
new int[][]{{1,2,3,4,}, {6,7,8,9}...};

 

3. 선언과 동시에 초기화

1. 자료형[][] 변수명 = new 자료형[개수][개수];
int[][] arr = new int[5][5];

2. 자료형[][] 변수명 = new 자료형[][]{ {데이터, 데이터...}, {데이터, 데이터...}, {데이터, 데이터...}... };
int[][] arr = new int[][]{{1,2,3,4,}, {6,7,8,9}...};

 

4. 호출

변수명[인덱스][인덱스]
arr[1][3];

 

예시 1.

length를 통한 데이터 확인

int[][] arr = new int[][] {{1,2,3},{4,5,6},{7,8,9,0}};

    System.out.println(arr.length);		// 결과 : 3 (== 0번째 인덱스에 있는 배열의 길이)
    System.out.println(arr[2].length);	// 결과 : 4 (== 2번째 인덱스에 있는 배열의 길이)

    arr[0] = new int[5];				// 각 인덱스에 새로운 배열로 초기화
    arr[1] = new int[3];
    arr[2] = new int[7];

    System.out.println(arr.length);		// 결과 : 3 (== 위와 동일)
    System.out.println(arr[2].length);	// 결과 : 7 (== 2번째 인덱스의 배열을 초기화했기 때문)

sysout의 위치에 따라 결과 값이 다름. (초기화 순서 때문)

 

 

예시 2.

데이터 초기화에 따른 결과 화면

int[][] arr = new int[][] {{1,2,3},{4,5,6},{7,8,9,0}};

    for(int i = 0; i < arr.length; i++) {
                for(int j = 0; j < arr[i].length; j++) {
                    System.out.print(arr[i][j] + "\t");
                }
                System.out.println();
            }
            
// (결과)
// 1	2	3	
// 4	5	6	
// 7	8	9	0

 

 

예시 3. 

이차원 배열을 통해 보통 처음 접하는 것이 구구단이다.

빠른 이해를 위해선 대괄호 '앞과 뒤'를 '행과 열'로 생각하면 조금 쉬워지긴하는데.... 

진짜로 쉬워지려면 계속 접하는 수 밖에...ㅎ;;

		// 구구단
		int[][] arr = new int[8][9];
//		System.out.println(arr.length);		// 행의 개수 (arr의 길이는 8)
//		System.out.println(arr[0].length);	// 열의 개수 (arr 안의 각 인덱스별 배열 길이는 9)
		
		// 배열에 구구단의 결과값을 저장
		for(int i = 0; i < arr.length; i++) {	// 2단 ~ 9단	(8개)
			System.out.print(i + 2 + "단 : ");
			
			for(int j = 0; j < arr[i].length; j++) {
				arr[i][j] = i * j;
				System.out.print("[" + (i + 2) + "x" + (j + 1) + "=" + (i+2)*(j+1) + "]" + " ");
//				System.out.print("[" + (i+2)*(j+1) + "]" + " ");
			}
			System.out.println();			// 행이 끝날 때마다 엔터 역할
		}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제 (2개) 
아래의 형태가 되도록 2차원 배열을 구성하여 값을 대입 후 출력

(결과 화면)
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25

**선언과 동시의 초기화 금지.

 

5x5 빙고판을 만드려고 합니다

1부터 25까지의 숫자를 5X5 크기의 빙고판에 무작위로 배치하려고 합니다. 
모든 자리에 숫자가 랜덤으로 배치될 수 있도록 코드 구현

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

정답 

첫 번째 문제는 완성코드를 봐도 아직 정확한 이해가 되지 않아서... 유튜브로 이차원 배열 문제들을 더 찾아보기로!

int[][] arr = new int[5][5];
	
	for(int i = 0, cnt = 1; i < arr.length; i++) {
		for(int j = 0; j < arr.length; cnt++, j++) {
			arr[j][i] = cnt;
		}
	}
	
	for(int i = 0; i < arr.length; i++) {
		for(int j = 0; j < arr[i].length; j++) {
			System.out.print(arr[i][j] + "\t");
		}
		System.out.println();
	}

 

int[][] arr = new int[5][5];
		
		for(int i = 1; i <= 25; i++ ) {
			int r = (int)(Math.random() * 5);
			int c = (int)(Math.random() * 5);
			
			if(arr[r][c] == 0) {
				arr[r][c] = i;
			}else {
				i--;
			}
		}
		
		for(int i = 0; i < arr.length; i++) {
			for(int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}

'IT 언어 > Java' 카테고리의 다른 글

[Java] 생성자 --*Q/A  (0) 2023.12.12
[Java] 객체지향 프로그램(클래스, 객체, 인스턴스)  (0) 2023.12.11
[Java] 배열 --*Q/A  (0) 2023.12.01
[Java] 반복문 문제 --*Q/A  (0) 2023.12.01
[Java] 랜덤 Math.radom() --*Q/A  (2) 2023.11.27

+ Recent posts