이차원 배열
- 중첩적인 구조를 가지는 배열
- 행과 열 차원의 배열
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 |