Coding(Java)/Java(이론)2021. 8. 31. 12:00
반응형

[Java] 12. 다중반복문, break&continue label

 

 

다중반복문

 

다중반복문은 반복문 속에 반복문이 하나 이상 있는 반복문이다. 

 

다음은 이중반복문을 이용하여 알파벳을 출력하는 프로그램이다.

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
package mymain;
 
public class _7_다중반복문1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
                //2중 for문
                for(int k=0;k<10;k++)
                {
                    for (int i = 'A'; i <= 'Z'; i++) {
                        System.out.print((char) i);
                    }
 
                    System.out.println();//줄바꾸기
                }
                
                System.out.println("---------------------------------");
                
                for(int k='A';k<='Z';k++) {
                    
                    System.out.printf("k=%c:", k);
                    
                    //k만큼만 알파벳을 출력하는 반복문
                    for(int i='A';i<=k;i++) {
                        System.out.printf("%c", i);
                    }//속에는 줄바꿈 없음
 
                    
                    System.out.println();//줄바꾸기
                }
 
    }
 
}
 
cs

이 프로그램의 실행결과는 다음과 같다.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
---------------------------------
k=A:A
k=B:AB
k=C:ABC
k=D:ABCD
k=E:ABCDE
k=F:ABCDEF
k=G:ABCDEFG
k=H:ABCDEFGH
k=I:ABCDEFGHI
k=J:ABCDEFGHIJ
k=K:ABCDEFGHIJK
k=L:ABCDEFGHIJKL
k=M:ABCDEFGHIJKLM
k=N:ABCDEFGHIJKLMN
k=O:ABCDEFGHIJKLMNO
k=P:ABCDEFGHIJKLMNOP
k=Q:ABCDEFGHIJKLMNOPQ
k=R:ABCDEFGHIJKLMNOPQR
k=S:ABCDEFGHIJKLMNOPQRS
k=T:ABCDEFGHIJKLMNOPQRST
k=U:ABCDEFGHIJKLMNOPQRSTU
k=V:ABCDEFGHIJKLMNOPQRSTUV
k=W:ABCDEFGHIJKLMNOPQRSTUVW
k=X:ABCDEFGHIJKLMNOPQRSTUVWX
k=Y:ABCDEFGHIJKLMNOPQRSTUVWXY
k=Z:ABCDEFGHIJKLMNOPQRSTUVWXYZ

-선을 기준으로 윗부분은 A부터 Z까지의 모든 알파벳(for문 출력)을 일렬로 나열한 것을 출력(for문 출력)하고 아랫부분은 왼쪽에 알파벳을 출력하고, 그 오른쪽에 A부터 왼쪽에 출력된 알파벳까지(for문 출력) A부터 Z까지(for문 출력)를 출력한다. 

 

다음은 별표(*)와 첨자(,)를 이용한 출력 프로그램이다. 

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package mymain;
 
public class _7_다중반복문2 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //별찍기
        
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<5;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        System.out.print('*');
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                System.out.println("---첨자확인---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<5;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        //System.out.printf("(i:%d, k:%d)", i, k);
                        System.out.printf("(%d, %d)", i, k);
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                
                System.out.println("---삼각형1---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<=i;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        System.out.print('*');
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                
                System.out.println("---삼각형2---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<5;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        if(k<=i) 
                            System.out.print('*');
                        else
                            System.out.print('-');
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                
                System.out.println("---삼각형3---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=5;k>=0;k--//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        if(k<=i) 
                            System.out.print('*');
                        else
                            System.out.print(' ');
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                System.out.println("---삼각형4(<=>삼각형2)---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<5;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
                        if(k<i) 
                            System.out.print(' ');
                        else
                            System.out.print('*');
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
                System.out.println("---바람개비---");
                for(int i=0;i<5;i++//행첨자(row) i=0, 1, 2, 3, 4 
                {
                    for(int k=0;k<5;k++//열첨자(col) k=0, 1, 2, 3, 4
                    {
 
                         if(k==|| k==4-i)
                             System.out.print(' ');
                         else
                             System.out.print('*');
                        
                        
                        //Thread.sleep(500);
                    }
                    
                    System.out.println();
                }
 
    }
 
}
cs

이 프로그램의 실행결과는 다음과 같다.

*****
*****
*****
*****
*****
---첨자확인---
(0, 0)(0, 1)(0, 2)(0, 3)(0, 4)
(1, 0)(1, 1)(1, 2)(1, 3)(1, 4)
(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)
(3, 0)(3, 1)(3, 2)(3, 3)(3, 4)
(4, 0)(4, 1)(4, 2)(4, 3)(4, 4)
---삼각형1---
*
**
***
****
*****
---삼각형2---
*----
**---
***--
****-
*****
---삼각형3---
     *
    **
   ***
  ****
 *****
---삼각형4(<=>삼각형2)---
*****
 ****
  ***
   **
    *
---바람개비---
 *** 
* * *
** **
* * *
 *** 

첨자확인과 삼각형, 바람개비는 for문을 행, 열 별로 실행시켜 출력시켰다. 

 

label

 

label은 다중 반복문 안에서 탈출(break)하거나 label영역만큼 이동(continue)할 때 사용된다. break, continue문에서 사용된다.

 

다음은 label을 이용한 break, continue문의 예이다. 

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
package mymain;
 
public class _8_break_continue_label_test {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //break :탈출문(switch, 반복문 끝내기)
                //break lable: label 영역의 반복문을 끝내라
                System.out.println("-----[break label]-----");
                OUT_FOR:  //Label
                for(int i=0; i<5; i++) {//행
                    
                    for(int k=0; k<5; k++) {//열
                        
                        System.out.printf("(%d,%d)", i, k);
                        //(2,2): 현재 for문 전체 종료
                        if(i==2 && k==2break OUT_FOR;// OUT_FOR문 영역까지 탈출 
                        //여기서의 break는 for(int k=0; k<5; k++)에 대한 break
                    }                    
                    System.out.println();//줄바꾸기
                }                
                System.out.println("\n---End---");
                
                //continue:현재 명령을 종료하고 다음 제어식으로 이동
                //continue lable:label영역만큼 continue
                System.out.println("-----[continue label]-----");
                OUT_FOR1:  //Lable
                for(int i=0; i<5; i++) {//행
                    
                    for(int k=0; k<5; k++) {//열
                        
                        if(k==2) {
                            System.out.println();//줄바꾸기
                            continue OUT_FOR1;//바깥쪽 for -> i++로 이동
                        }
                        
                        System.out.printf("(%d,%d)", i, k);                                                
                    }                    
                    System.out.println();//줄바꾸기
                }                
                System.out.println("\n---End---");
 
    }
 
}
 
cs

이 프로그램의 실행결과는 다음과 같다.

-----[break label]-----
(0,0)(0,1)(0,2)(0,3)(0,4)
(1,0)(1,1)(1,2)(1,3)(1,4)
(2,0)(2,1)(2,2)
---End---
-----[continue label]-----
(0,0)(0,1)
(1,0)(1,1)
(2,0)(2,1)
(3,0)(3,1)
(4,0)(4,1)

---End---

먼저 코드부분에서 i는 행, k는 열이다.

break label 부분에서 lable인 OUT_FOR는 for문 바깥에 있고, k=2이고 i=2이면 lable로 break하게 되어있다. 그래서 실행결과의 마지막이 (2,2)이다. 

continue label 부분에서 lable인 OUT_FOR1은 for문 바깥에 있고, k=2일 때 lable로 continue하게 되어있다. continue문은 break문과 달리 다음 명령을 수행하므로 k가 2 이상인 경우는 출력되지 않고, k가 0, 1인 경우만 출력된다. 

반응형

'Coding(Java) > Java(이론)' 카테고리의 다른 글

[Java] 14. 메소드 예제  (0) 2021.09.09
[Java] 13. 클래스의 정의와 메소드  (0) 2021.09.02
[Java] 11. do-while문, continue문  (0) 2021.08.30
[Java] 10.while문  (0) 2021.08.25
[Java] 9. for문  (0) 2021.08.24
Posted by skywalker222