Java - 중첩 while 문 , do~while문, 반복문 제어 break; continue;

2020. 6. 13. 18:31Java

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
public class Ex {
 
    public static void main(String[] args) {
        // while 문을 사용하여 구구단 2단 출력
        int dan = 2;
        
        System.out.println(" < " + dan + "단 >");
        
        int i = 1;
        
        while(i <= 9) {
            System.out.println(dan + " * " + i + " = " + (dan * i));
            i++;
        }
        
        System.out.println("============================");
        
        // while 문을 사용하여 정수 1 ~ 10 까지의 합 계산
        int total = 0// 합계를 누적할 누적 변수
        
        int num = 1;
        
        while(num <= 10) {
            total += num; // total = total + num;
            num++;
        }
        
        System.out.println("1 ~ 10 까지 정수의 합 : " + total);
        
 
/*
         * 중첩 while 문
         * - 중첩 for문과 마찬가지로 while 문 내부에 또 다른 반복을 수행하는 while 문을 기술
         * 
         * < 기본 문법 >
         * 초기식1;
         * 
         * while(조건식1) {
         *         
         *         초기식2;
         * 
         *         while(조건식2) {
         *             // 반복할 문장...
         *             증감식2;
         *         }
         * 
         *         증감식1;
         * 
         * }
         * 
         */
        
//        for(int i = 1; i <= 2; i++) {
//            
//            for(int j = 1; j <= 3; j++) {
//                
//                System.out.println("i = " + i + ", j = " + j);
//                
//            }
//            
//        }
        
        int i = 1// 초기식1
        
        while(i <= 2) { // 조건식1
            
            int j = 1// 초기식2
            
            while(j <= 3) { // 조건식2
                
                System.out.println("i = " + i + ", j = " + j);
                j++// 증감식2
                
            }
            
            i++// 증감식1
        }
 
 
/*
         * 변수의 적용 범위
         * - 특정 메서드 내에서 선언된 변수를 로컬 변수(Local Variable)라고 하며,
         *   이 변수는 선언된 시점부터 아래쪽 메서드 중괄호가 끝나는 지점까지만 유효함
         */
        
        for(int i = 1; i <= 10; i++) {
            // for문에서 선언된 제어변수 i는 for문이 종료되면 제거됨(즉, 사용 불가능)
            System.out.println(i + " : Hello, World!");
        }
        
//        System.out.println(i); // 오류 발생! 변수 i는 for문 종료 시 제거되어 존재하지 않는 변수
        
        System.out.println("-----------------");
        
        int i = 1// main() 메서드 내에서 선언된 변수로 현재 지점부터 
                   // main() 메서드가 끝나는 중괄호까지는 사용 가능함
        
        while(i <= 10) {
//            int num = 0; // 로컬변수 num 은 while 문 내에서만 사용 가능한데
                         // 조건식보다 아래쪽에 위치하므로 조건식에서는 접근이 불가능하며
                         // while 문이 한 바퀴 반복될 때마다 새로운 변수 num 이 매번 생성됨
            
            System.out.println(i + " : Hello, World!");
            i++;
        }
        
        System.out.println(i); // while 문보다 위에 선언된 변수이므로 while 문이 끝나도 사용 가능
    
/*
         * do ~ while 문
         * - while 문과 달리 조건식을 먼저 판별하지 않고 
         *   반복문을 먼저 한 번 실행(do)한 후 마지막에 조건식(while)을 판별하는 while문
         * - while 문은 조건식 결과에 따라 반복문이 한 번도 실행되지 않을 수 있지만,
         *   do ~ while 문은 무조건 한 번의 실행은 보장함
         *   
         * < 기본 문법 >
         * 초기식;
         * 
         * do {
         *         // 반복할 문장
         *         증감식;
         * } while(조건식);
         * => 마지막 while 문 끝에 세미콜론(;) 주의!
         * 
         */
        
        int i = 11;
        
        while(i <= 10) {
            // 조건식 판별 결과가 false 이므로 while 블록 내의 문장은 한 번도 실행되지 않는다!
            System.out.println(i + " : Hello, World!");
            i++;
        }
        
        System.out.println(i);
        
        System.out.println("------------");
        
        i = 11;
        
        do {
            // 조건식 판별 결과는 false 이지만, do 문장을 만나 무조건 한 번 실행한 후
            // 마지막에 조건식을 판별하여 false 가 되어 do ~ while 문 종료됨
            System.out.println(i + " : Hello, World!");
            i++;
        } while(i <= 10);
        
        System.out.println(i);
 
 
/*
         * 반복문의 제어
         * - break 문과 continue 문을 사용하여 반복문을 제어
         * - 주로 if문과 조합하여 사용
         * 
         * 1. break 문
         * - 반복문을 빠져나가기 위해 사용하는 문장
         * 
         * 2. continue 문
         * - 반복문의 continue 문장 아래쪽 문장들 실행을 생략하고, 다음 반복을 진행
         * 
         */
        
        for(int i = 1; i <= 10; i++) {
            // i가 5일 때, "반복을 종료합니다" 출력
            if(i == 5) {
                System.out.println("break : 반복을 종료합니다!");
                break// for문 바깥으로 빠져나가서 for문 다음 문장 실행
                // => i 값이 5일 때 for문이 종료됨
            }
            
            System.out.println(i + " : Hello, World!");
            
        }
        
        System.out.println("for 문 종료!");
        
        System.out.println("--------------------------");
        
        for(int i = 1; i <= 10; i++) {
            // i가 5일 때, "반복을 종료합니다" 출력
            if(i == 5) {
                System.out.println("continue : 현재 반복을 생략합니다!");
                continue// 현재 문장 아래쪽의 나머지 문장 실행을 생략하고, 다음 반복(i++) 진행
                // => i 값이 5일 때 출력을 생략하고 6부터 다시 출력
            }
            
            System.out.println(i + " : Hello, World!");
            
        }
        
        System.out.println("for 문 종료!");
        
        System.out.println("--------------------------------");
        
        EXIT_FOR_I:
        for(int i = 1; i <= 10; i++) { // 바깥쪽 for문
            
            EXIT_FOR_J:
            for(int j = 1; j <= 10; j++) { // 안쪽 for문
                
                if(j == 5) {
//                    break; // 안쪽 for문을 종료하고 빠져나감
//                    continue; // 현재 안쪽 for문 반복을 생략하고 다음 안쪽 for문 반복 진행
                    
                    // EXIT_FOR_J 레이블을 지정하여 break 또는 continue 사용 시 기본 문장과 동일
//                    break EXIT_FOR_J;
//                    continue EXIT_FOR_J;
                    
//                    break EXIT_FOR_I; // EXIT_FOR_I 레이블 지정 시 바깥쪽 for문을 빠져나감
                    
                    continue EXIT_FOR_I; // 바깥쪽 for문 다음 반복 실행 = break 와 결과 동일
                }
                
                System.out.println("i = " + i + ", j = " + j);
                
            }
            
        }
 
 
 
 
 
}
 
}
 
cs

중첩 while문은 중첩 for 문과 연산과정이 똑같기에 어려운 건 없었고, do~ while 문 은 무조건 한 번은 실행된다는 특성이 있기 때문에 연산과정과 출력되는 과정을 몇 번더 유심히 봐야 할 것 같다. 그리고 반복문을 무한히 반복만 하지 않고 제어를 하기 위한 반복문 제어 break; , continue; 를 배워 보았는데 break는 연산과정 중 break를 만나면 그 반복문을 종료하고 반복문을 빠져나가는 것이고 continue는 반복문 연산중 continue를 만나면 설정해 두었던 연산과정만 제외하고 다시 반복문이 반복된다는 개념인데 조금 헷갈릴법한 부분이기 때문에 이것도 몇 번 더 유심히 보아서 자동으로 구문을 보자마자 연산과정이 이해가 될 수 있게 반복 숙달을 해야 할 것 같다. 이런 거 하나하나가 너무 재미있게 다가온다. 지루할 틈이 하나도 없는 것 같다. 개발자는 평생 공부해야 하는 직업이라고 하던데 평생 심심할 틈이 없을 것 같다.