2차원, 3차원 등 높은 차원의 배열의 사용
0차원(점의 형태를 가진 데이터)
int a = 10;
1차원(선의 형태를 가진 데이터)
int[] b = new int[] { 10, 20, 30 };
2차원(면의 형태를 가진데이터)
int[][] c = new int[][] {
{10, 20, 30},
{40, 50, 60}
};
3차원(입체의 형태를 가진 데이터)
int[][][] d = new int[][][] {
2차원 배열의 필요성
ex : 3개반에서 각 3명의 학생에 대한 성적 정보
- 0차원 : 변수 9개 (9명의 성적 정보)
- 1차원 : 1차원배열 3개 (3개반의 성적 정보)
- 2차원 : 2차원배열 1개 (1개 학년의 성적 정보)
package array2d;
public class Test03 {
public static void main(String[] args) {
// 생성
int[][] score = new int[][] {
{ 70, 80, 80 },
{ 60, 90, 50 },
{ 100, 80, 40 }
};
//(score) -----> (+0) -----> [ 70 ] [ 80 ] [ 80 ]
// (+1) -----> [ 60 ] [ 90 ] [ 50 ]
// (+2) -----> [ 100 ] [ 80 ] [ 40 ]
//출력
for(int i = 0 ; i < score[0].length ; i++) {
System.out.print(score[0][i]);
System.out.print("\t");
}
System.out.println();
for(int i = 0 ; i < score[1].length ; i++) {
System.out.print(score[1][i]);
System.out.print("\t");
}
System.out.println();
for(int i = 0 ; i < score[2].length ; i++) {
System.out.print(score[2][i]);
System.out.print("\t");
}
System.out.println();
}
}
- 정답
70 80 80
60 90 50
100 80 40
출력 부분 더 간단하게 표현하기
package array2d;
public class Test04 {
public static void main(String[] args) {
// 생성
int[][] score = new int[][] {
{ 70, 80, 80 },
{ 60, 90, 50 },
{ 100, 80, 40 }
};
//(score) -----> (+0) -----> [ 70 ] [ 80 ] [ 80 ]
// (+1) -----> [ 60 ] [ 90 ] [ 50 ]
// (+2) -----> [ 100 ] [ 80 ] [ 40 ]
//출력
//for(int k = 0 ; k <= 2 ; k++) {
//for(int k = 0 ; k < 3 ; k++) {
for(int k = 0 ; k < score.length ; k++) {
for(int i = 0 ; i < score[k].length ; i++) {
System.out.print(score[k][i]);
System.out.print("\t");
}
System.out.println();
}
}
}
Q. 5 X 5 배열 위치를 기준으로 구현해보기
package array2d;
public class Test5_1 {
public static void main(String[] args) {
// 배열 생성
int[][] data = new int[5][5];// 5칸짜리 1차원배열을 5개 묶었다 = 5줄 5칸
// 초기화 : 위치를 기준으로 반복하며 값을 초기화
//= [0][0] 부터 [4][4] 까지 데이터를 추가
int count = 1;
for (int i = 0; i < data.length; i++) {
for (int k = 0; k < data[i].length; k++) {
System.out.println(i+"번 줄 , "+k+"번 칸에 "+count+"를 대입합니다");
//data[i][k] = 5 * i + k + 1;
data[i][k] = count;
count++;
}
}
// 출력
for (int i = 0; i < data.length; i++) {// 줄반복
for (int k = 0; k < data[i].length; k++) {// 칸반복
System.out.print(data[i][k]);
System.out.print("\t");
}
System.out.println();
System.out.println();
}
}
}
Q. 5 X 5 배열 값을 기준으로 구현해보기
package array2d;
public class Test5_2 {
public static void main(String[] args) {
// 배열 생성
int[][] data = new int[5][5];// 5칸짜리 1차원배열을 5개 묶었다 = 5줄 5칸
// 초기화 : 값을 기준으로 반복하며 초기화
//= 1부터 25까지 데이터를 추가
int count = 1;
int x = 0 , y = 0;
for(int i = 1 ; i <= 25 ; i ++) {
System.out.println(x+"번 줄 , "+y+"번 칸에 "+i+"를 대입");
data[x][y] = i;
y++;
if(y >= 5) {//삐져나가면
//다음줄로 이동 처리
x++;
y = 0;
}
}
// 출력
for (int i = 0; i < data.length; i++) {// 줄반복
for (int k = 0; k < data[i].length; k++) {// 칸반복
System.out.print(data[i][k]);
System.out.print("\t");
}
System.out.println();
System.out.println();
}
}
}
- 정답
0번 줄 , 0번 칸에 1를 대입
0번 줄 , 1번 칸에 2를 대입
0번 줄 , 2번 칸에 3를 대입
0번 줄 , 3번 칸에 4를 대입
0번 줄 , 4번 칸에 5를 대입
1번 줄 , 0번 칸에 6를 대입
1번 줄 , 1번 칸에 7를 대입
1번 줄 , 2번 칸에 8를 대입
1번 줄 , 3번 칸에 9를 대입
1번 줄 , 4번 칸에 10를 대입
2번 줄 , 0번 칸에 11를 대입
2번 줄 , 1번 칸에 12를 대입
2번 줄 , 2번 칸에 13를 대입
2번 줄 , 3번 칸에 14를 대입
2번 줄 , 4번 칸에 15를 대입
3번 줄 , 0번 칸에 16를 대입
3번 줄 , 1번 칸에 17를 대입
3번 줄 , 2번 칸에 18를 대입
3번 줄 , 3번 칸에 19를 대입
3번 줄 , 4번 칸에 20를 대입
4번 줄 , 0번 칸에 21를 대입
4번 줄 , 1번 칸에 22를 대입
4번 줄 , 2번 칸에 23를 대입
4번 줄 , 3번 칸에 24를 대입
4번 줄 , 4번 칸에 25를 대입
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Q. 다음 형태로 배열을 초기화하고 표 모양으로 구현해보기
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
package array2d;
public class Test06 {
public static void main(String[] args) {
// 입력(준비)
int[][] data = new int[5][5];
int count = 1;
for (int i = 0; i < data.length; i++) {
for (int k = 0; k < data[i].length; k++) {
// System.out.println("i = " + i + ", k = " + k);
// System.out.println("k = " + k + ", i = " + i);
// data[k][i] = count;
// count++;
// data[k][i] = ++count;//count를 1 증가 시킨 뒤 대입(증가를 제일 처음, 전위증가연산)
data[k][i] = count++;// count를 대입한 뒤 1 증가 시킴(증가를 제일 마지막, 후위증가연산)
}
}
// 출력
for (int i = 0; i < data.length; i++) {
for (int k = 0; k < data[i].length; k++) {
System.out.print(data[i][k]);
System.out.print("\t");
}
System.out.println("\n");
}
}
}
Q. 다음 형태로 배열을 초기화하고 표 모양으로 구현해보기
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
package array2d;
public class Test07 {
public static void main(String[] args) {
// 배열 생성
int[][] data = new int[5][5];
int count = 1;
for (int i = 0; i < data.length; i++) {
for (int k = 0; k < data[i].length; k++) {
if (i % 2 == 0) { // 짝수 줄
// System.out.println(i + " " + k);
data[i][k] = count++;
} else { // 홀수 줄
int t = data[i].length - 1 - k;
data[i][t] = count++;
// System.out.println(i + " " + (data[i].length - 1 - k));
}
}
}
// 출력
for (int i = 0; i < data.length; i++) {// 줄반복
for (int k = 0; k < data[i].length; k++) {// 칸반복
System.out.print(data[i][k]);
System.out.print("\t");
}
System.out.println();
System.out.println();
}
}
}
Q. 5x5 숫자 중복 없이 빙고판 만들기
빙고판은 무조건 정사각형이어야 한다.
(length가 사용하기 불편하므로 크기와 관련된 변수를 만들어 사용)
package array2d;
import java.util.Random;
public class Test08 {
public static void main(String[] args) {
//입력
int size = 5;
int[][] map = new int[size][size];
//처리
//1. (0,0)부터 (4,4)까지 1~25 사이의 랜덤값을 대입 - 위치 기준
//2. 1부터 25까지의 값을 순서대로 랜덤한 위치에 대입 - 값 기준
Random r = new Random();
for(int i=1; i <= size*size; i++) {
int x = r.nextInt(size);//0부터 size개;
int y = r.nextInt(size);//0부터 size개;
//System.out.println(i+"값을 ("+x+", "+y+") 위치에 대입");
//if(한번도 값을 넣은 적 없는 칸이라면) {
if(map[x][y] == 0) {
map[x][y] = i;
}
else {
//위치를 다시 뽑아라(다음 회차로 진행하지 못하도록 반복변수 i를 제자리로 설정)
i--;
}
}
//출력
for(int i=0; i < size; i++) {
for(int k=0; k < size; k++) {
System.out.print(map[i][k]);
System.out.print("\t");
}
System.out.println("\n");
}
}
}
- 정답
18 5 8 2 7
24 22 14 9 10
11 19 20 1 23
17 12 6 21 4
16 13 15 25 3
'Java 웹 개발' 카테고리의 다른 글
21.08.31 - 웹 개발 입문 15일차 (0) | 2021.08.31 |
---|---|
21.08.30 - 웹 개발 입문 14일차 (0) | 2021.08.30 |
21.08.26 - 웹 개발 입문 12일차 (0) | 2021.08.26 |
21.08.25 - 웹 개발 입문 11일차 (0) | 2021.08.25 |
21.08.24 - 웹 개발 입문 10일차 (0) | 2021.08.24 |