Coding(Java)/Java(이론)2021. 9. 24. 20:00
반응형

[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, 13);
        System.out.println("---지정한 행을 변경---");
        MyArray2.display(mm);        
        
        //지정한 행의 열 구간을 변경
        MyArray2.fill(mm, 0125);
        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=
                        {1234},
                        {5678},
                        {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
Posted by skywalker222