반응형
[Java] 16. 배열(2)
다차원 배열은 1차원 배열이 여러개 모인 것이고, 다차원 배열을 선언하고 생성하는 것은 1차원 배열과 비슷하다.
다음은 다차원 배열을 이용한 프로그램이다.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package myutil;
public class MyArray2 {
public static void draw_block(int [][] mm) {
for(int i=0;i<mm.length;i++) {
for(int k=0;k<mm[i].length;k++) {
if(mm[i][k]==1)
System.out.print("■");
else
System.out.print(" ");
}
System.out.println();
}
}
public static void display(int [][] mm) {
for(int i=0;i<mm.length;i++) {//행첨자
for(int k=0; k<mm[i].length;k++) {//열첨자
System.out.printf("%4d", mm[i][k]);
}
System.out.println();//줄바꾸기
}
}
//전체를 원하는 값을 채우기
public static void fill(int[][] mm, int newVal) {
for (int i = 0; i < mm.length; i++) {// 행첨자
for (int k = 0; k < mm[i].length; k++) {// 열첨자
mm[i][k]=newVal;
}
}
}
//지정한 행을 변경
public static void fill(int[][] mm, int row, int newVal) {
for (int k = 0; k < mm[row].length; k++) {// 열첨자
mm[row][k]=newVal;
}
}
//지정한 행의 fromindex부터 toindex까지 열 변경
public static void fill(int[][] mm, int row, int fromindex, int toindex, int newVal) {
for (int k = fromindex; k <=toindex; k++) {// 열첨자
mm[row][k]=newVal;
}
}
public static void display_sum(int[][] mm) {
// TODO Auto-generated method stub
int [] row_sum=new int[mm.length];
for(int i=0;i<mm.length;i++) {//행첨자
int col_sum=0;
for(int k=0; k<mm[i].length;k++) {//열첨자
System.out.printf("%4d", mm[i][k]);
col_sum=col_sum+mm[i][k];
row_sum[k]=row_sum[k]+mm[i][k];
}
System.out.printf("\t(%d)",col_sum);
System.out.println();//줄바꾸기
}
for(int i=0;i<4*row_sum.length;i++) {
System.out.print('-');
}
System.out.println();
//세로합계의 누적값 출력
for(int i=0; i<row_sum.length;i++) {
System.out.printf("%4d",row_sum[i]);
}
System.out.println();
}
}
|
cs |
위의 프로그램은 채우기, 줄바꾸기, 값바꾸기, 줄바꾸기, 행/열의 합, 가변길이, 블록그리기를 구하기 위한 클래스이다.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package mymain;
import myutil.MyArray2;
public class _04_Array2_test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//2차원 배열의 참조변수
int [][] mm;
//배열생성[행][열]
mm=new int[3][4];
//첫 번째줄
mm[0][0]=1;
mm[0][1]=2;
mm[0][2]=3;
mm[0][3]=4;
//두 번째줄
mm[1][0]=5;
mm[1][1]=6;
mm[1][2]=7;
mm[1][3]=8;
//세 번째줄
mm[2][0]=9;
mm[2][1]=10;
mm[2][2]=11;
mm[2][3]=12;
// i k
int su=1;
//일괄처리로 값을 세팅
for(int i=0;i<mm.length;i++) { //행첨자 i=0, 1, 2
for(int k=0;k<mm[i].length;k++) { //열첨자 k=0, 1, 2, 3
mm[i][k]=su;
su++;
//다른방법: su=i*3+k+1;
}
}
//2차원배열 출력
System.out.println("---2차원배열 출력---");
MyArray2.display(mm);
//모든 값을 특정값으로 채우기
MyArray2.fill(mm, 0);
System.out.println("---0으로 초기화---");
MyArray2.display(mm);
//지정한 행을 변경
MyArray2.fill(mm, 1, 3);
System.out.println("---지정한 행을 변경---");
MyArray2.display(mm);
//지정한 행의 열 구간을 변경
MyArray2.fill(mm, 0, 1, 2, 5);
System.out.println("---지정한 행의 열 구간을 변경---");
MyArray2.display(mm);
}
}
|
cs |
이 프로그램은 2차원배열을 출력하고, 위의 클래스를 이용하여 초기화, 행 변경, 열 구간 변경을 실행하고, 그 결과는 다음과 같다.
---2차원배열 출력--- 1 2 3 4 5 6 7 8 9 10 11 12 ---0으로 초기화--- 0 0 0 0 0 0 0 0 0 0 0 0 ---지정한 행을 변경--- 0 0 0 0 3 3 3 3 0 0 0 0 ---지정한 행의 열 구간을 변경--- 0 5 5 0 3 3 3 3 0 0 0 0 |
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package mymain;
import myutil.MyArray2;
public class _05_Array2_test2_초기화 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//초기화시 개수 부분은 생략
/*
int [][]mm=new int [][]{ //new int[][]생략가능
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12},
};
MyArray2.display(mm);
*/
int [][]mm={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12},
};
MyArray2.display(mm);
//고정길이 배열: 열의 개수가 고정적 길이를 갖는 배열
//가변길이 배열: 열의 개수가 가변적 길이를 갖는 배열
int [][] mm1=new int [3][];
mm1[0]=new int[] {1,2};//new int[]를 써 줘야 한다.
mm1[1]=new int[] {3,4,5};
mm1[2]=new int[] {6,7,8,9};
System.out.println("---가변길이 배열---");
MyArray2.display(mm1);
//가변길이 배열의 초기화
int [][] mm2= {
{1},
{2,3},
{4,5,6},
{6,7,8,9}
};
System.out.println("---가변길이 배열(초기화)---");
MyArray2.display(mm2);
int [][] t_block= {
{1,1,1},
{0,1,0},
{0,1,0}
};
int [][] nemo_block= {
{1,1,1},
{1,0,1},
{1,1,1}
};
System.out.println("---Block 그리기---");
MyArray2.draw_block(t_block);
System.out.println();
MyArray2.draw_block(nemo_block);
}
}
|
cs |
이 프로그램은 2차원배열을 출력하고, 위의 클래스를 이용하여 가변길이를 조절하고 블럭을 그리는 프로그램이다.
실행결과는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 ---가변길이 배열--- 1 2 3 4 5 6 7 8 9 ---가변길이 배열(초기화)--- 1 2 3 4 5 6 6 7 8 9 ---Block 그리기--- ■■■ ■ ■ ■■■ ■ ■ ■■■ |
반응형
'Coding(Java) > Java(이론)' 카테고리의 다른 글
[Java] 17. 클래스 예제 (0) | 2021.10.11 |
---|---|
[Java] 15. 배열(1) (0) | 2021.09.24 |
[Java] 14. 메소드 예제 (0) | 2021.09.09 |
[Java] 13. 클래스의 정의와 메소드 (0) | 2021.09.02 |
[Java] 12. 다중반복문, break&continue label (0) | 2021.08.31 |