티스토리 뷰
▶▶ 보조 제어문
– 주로 if문과 같이 사용하며, 어떠한 조건을 충족시킬 때, 반복문(for / while / do-while)이나 switch문을 종료 시킴.
– 반복문 내에서 특정 조건식과 결합하여 반복문의 실행 흐름을 제어하는 용도로 사용함.
1. break
2. continue
▶ break문
– 반복문 내에서 조건식에 따라 반목문을 종료하는 용도로 사용, 주로 if문과 조합하여 반복문을 빠져나갈 조건을 설정함.
– break가 속해 있는 반복문을 빠져나감.
ex ) 안쪽 반복문에 속했으면 안쪽 반복문만 빠져나감.
for (초기식; 조건식; 증감식) {
if (조건) {
break;
→ 현재 소속된 반복문의 블록문을 빠져나감 (종료)
}
}
EX1 ) for—if문에서 break 사용
int i;
for(i=1; i<=10; i++) {
System.out.println(i);
// i값이 5일 때, for문을 빠져나감
if(i==5) {
System.out.println("i = 5이므로, for문을 종료!");
break;
}
}
→ i값이 1~10까지 1씩 증가하면서 반복되는데, i값이 5일때 if문의 조건에 부합하여 break문을 만나 반복문을 빠져나옴.
✓ 실행 결과
1
2
3
4
5
i = 5이므로, for문을 종료!
EX2 ) while—if문에서 break 사용
int i = 1;
while(i <= 10) {
System.out.println(i);
if(i == 5) {
System.out.println("i = 5이므로 while문을 종료!");
break;
}
i++;
}
✓ 실행 결과
1
2
3
4
5
i = 5이므로 while문을 종료!
▶ continue문
– 반복문 내에서 조건식에 따라 반복문의 다음 문장 실행을 생략하고, 다음 반복을 진행하는 용도로 사용
– continue를 만나면 현재 반복문의 continue문 아래쪽 문장 모두 실행을 생략하고,
다음 반복 실행을 위해 for문의 증감식 또는 while문의 조건식으로 이동함.
(for문의 순서 = 초기 → 조건 → 실행 → 증감 → 조건 → 실행 → 증감 → 조건 → 실행...)
즉, 반복문의 처음의 순서로 돌아오는 것
– Pass 느낌 !
for (초기식; 조건식; 증감식) {
if (조건) {
continue;
→ 현재 반복문의 continue문 아래쪽 문장 실행을 생략하고,
다음 반복 실행을 위해 for문의 증감식 또는 while문의 조건식으로 이동.
}
문장 실행 안됨; → continue문에 의해 실행이 생략되는 문장
}
EX )
int i = 1;
for(i=1; i <= 10; i++) {
// i값이 5일 때 출력문 실행을 생략하고 다음 반복 실행
if(i == 5) {
System.out.println("i = 5이므로 출력문 실행을 생략!");
continue;
}
System.out.println(i); // i의 값이 5일 때, 출력문 실행안됨.
}
System.out.println("for문 종료 후 i값 = " + i);
→ i값이 10까지 출력된 뒤, 다시 증감식으로 돌아가 +1된 후 조건식으로 이동하여 false의 결과가 나옴.
따라서 for문의 반복 순서상, i값이 증가된 후 조건식을 보기에, for문 종료 후 i값은 '11'이 출력됨.
✓ 실행 결과
1
2
3
4
i = 5이므로 출력문 실행을 생략!
6
7
8
9
10
for문 종료 후 i값 = 11
Q1 ) 1~100까지 정수의 합을 계산하는데 합계가 1000보다 클 경우,
반복문을 종료하고 빠져나간 뒤에 1000보다 커지는 시점의 정수(x)를 출력하시오.
A1-1 ) while문 사용
int total = 0;
int x = 1;
while(x <= 100) {
total += x;
if(total > 1000) {
break;
}
x++;
}
System.out.println("1000보다 커지는 시점의 정수 = " + total);
System.out.println("합계가 1000보다 클 때의 x = " + x);
→ while문으로 1부터 100까지 누적합하다가 1000보다 넘으면 그만둘것을 if-break문으로 조건을 검.
→ 그 뒤에 while문의 제어변수 x가 1증가함. 중첩 while문 증감식 위치 신경쓰기!
✓ 실행 결과
1000보다 커지는 시점의 정수 = 1035
합계가 1000보다 클 때의 x = 46
A1-2 ) for문 사용
int total = 0;
int x = 1;
for(x=1; x<=100; x++) {
total += x;
if(total > 1000) {
break;
}
}
System.out.println("1000보다 커지는 시점의 수 = " + total);
System.out.println("합계가 1000보다 클 때의 x = " + x);
✓ 실행 결과
1000보다 커지는 시점의 정수 = 1035
합계가 1000보다 클 때의 x = 46
Q2 ) 1 + (-2) + 3 + (-4) + 5 + (-6) + ... 이렇게 계속 더해서 총합이 100이상이 되는 x값 출력 (break문 사용)
A2-1 ) break문 사용해서 풀기
while문을 계속 실행하고 싶다면 'true'값을 주면 됨.
위의 문제를 보면 범위가 없음! → 반복 횟수가 정해져있지 않기 때문에 while문 사용
int x = 1;
int total = 0;
while(true) {
if(x%2==0) { // 짝수
System.out.println(-x);
total += -x; // 짝수의 값 누적
}else { // 홀수
System.out.println(x);
total += x; // 홀수의 값 누적
}
if(total >= 100) {
break;
}
x++; // 증감식 빼먹지 말기!
}
System.out.println("x = " + x);
System.out.println("total = " + total);
→ 홀수일때는 양수, 짝수일때는 음수로 범위가 지정되어 있지 않은 누적합 구하기이므로 while-if문 사용함.
→ 범위 지정이 없으므로 while문은 true값으로 설정하고, 누적값이 100이 될 때까지 반복문 사용함.
→ if문으로 짝수일때의 누적합과 홀수일때의 누적합을 각 각 구해줌.
→ 총합이 100이상이 될 때의 x값이 필요하므로, 다시 if문을 추가하여 총합이 100이상일 때 break문을 사용함.
→ 까먹지말고 마지막에 x증감식 써주기!!!
✓ 실행 결과
1
-2
3
-4
5
-6
7
-8
9
-10
11
-12
13
...
-190
191
-192
193
-194
195
-196
197
-198
199
x = 199
total = 100
A2-2 ) break문 사용하지 않고 더 쉽게 풀기
문제에서 total값이 100이상이 되는 값이니깐 그냥 이 자체를 조건식으로 사용함.
int x = 0;
int total = 0;
while(total < 100) {
x++; // x의 초기값이 0이므로 증감식을 먼저 씀
if(x%2==0) {
System.out.println(-x);
total += -x;
}else {
System.out.println(x);
total += x;
}
}
System.out.println("x = " + x);
System.out.println("total = " + total);
✓ 실행 결과
1
-2
3
-4
5
-6
7
-8
9
-10
11
-12
13
...
-190
191
-192
193
-194
195
-196
197
-198
199
x = 199
total = 100
Q3 ) 중첩 for문을 사용하여 2단~9단까지 출력하시오. (단, 구구단의 단이 5단일 때 반복문 종료.)
A3 )
for(int dan = 2; dan <= 9; dan++) { // 2단 ~ 9단 반복
System.out.printf("< %d단 > \n", dan);
for(int i = 1; i <= 9; i++) { // 1 ~ 9 반복
if(dan == 5) {
break;
}
System.out.printf("%d * %d = %d \n", dan, i, dan * i);
}
System.out.println();
}
→ if문에서 현재 단이 5단일 때, break가 속한 반복문인 '안쪽 for문'만 빠져나감. (바깥쪽 for문 X)
즉, 바깥쪽 for문의 다음 반복을 진행함.
✓ 실행 결과
< 2단 >
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
< 3단 >
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
...
< 8단 >
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
< 9단 >
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
▶ Label (레이블)
– 반복문의 앞에 위치하여 break 또는 continue의 동작 지점을 지정함.
– break문 또는 continue문 뒤에 해당 레이블의 이름을 지정하는 경우,
Label 위치의 다음 반복문에 break 또는 continue문이 적용됨.
– 주로, 중첩 반복문에서 반복문을 한꺼번에 빠져나가기 위해 사용됨.
– 반복문 앞 또는 위에 주로 대문자로 된 문자를 작성하고 콜론(:)을 붙임.
레이블명 :
바깥쪽 반복문() {
안쪽 반복문() {
if(조건식) {
break 레이블명; 또는 continue 레이블명;
}
}
}
EX1-1 ) break 레이블;
EXIT_FOR:
for(int dan = 2; dan <= 9; dan++) {
System.out.println(" < " + dan + "단 >");
for(int i = 1; i <= 9; i++) {
if(dan == 5) {
break EXIT_FOR; // EXIT_FOR 레이블을 찾아 해당 반복문을 종료
}
System.out.printf("%d * %d = %d \n", dan, i, dan * i);
}
System.out.println();
}
→ break 레이블 기능으로 EXIT_FOR 밑에 위치하고 있는 바깥쪽 for 문이 break되면서 전체 반복문 종료.
→ i값이 5일때, 즉 구구단 5단일때 전체 반복문이 종료되므로, 구구단은 4단까지만 출력됨.
✓ 실행 결과
< 2단 >
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
< 3단 >
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
< 4단 >
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
< 5단 >
EX1-2 ) continue 레이블;
EXIT_FOR:
for(int dan = 2; dan <= 9; dan++) {
System.out.println(" < " + dan + "단 >");
for(int i = 1; i <= 9; i++) {
if(dan == 5) {
continue EXIT_FOR; // EXIT_FOR 레이블을 찾아 다음 반복문을 실행
}
System.out.printf("%d * %d = %d \n", dan, i, dan * i);
}
System.out.println();
}
→ continue 레이블 기능으로 i값이 5일때, 즉 구구단이 5단일때 바로 EXIT_FOR 레이블을 찾아 다음 반복문을 실행함.
→ 따라서 5단은 출력되지 않으며, 바깥 for문의 dan++ 증감식으로 가서 dan의 값이 +1 되고, 다시 6단부터 출력됨.
✓ 실행 결과
< 2단 >
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
< 3단 >
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
< 4단 >
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
< 5단 >
< 6단 >
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
< 7단 >
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
< 8단 >
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
< 9단 >
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
'JAVA' 카테고리의 다른 글
접근 제한자(public & private) / getter & setter 메서드 (0) | 2023.02.28 |
---|---|
메서드 (method) — 형태에 따른 정의 & 호출 (0) | 2023.02.22 |
반복문 / for문(for, 이중for) / while문(while, do-while, 중첩while) (0) | 2023.02.08 |
제어문 / 조건문( if, if-esle, if-else if-else, 중첩 if ) / 선택문( switch-case ) (0) | 2023.02.08 |
삼항 연산자 (조건 연산자) (0) | 2023.02.06 |
- Total
- Today
- Yesterday
- 논리형
- 내장객체
- 인자
- 숫자형
- 문자형
- 주석문
- Java
- github
- 매개변수
- 로컬저장소
- model2
- 데이터타입
- 업캐스팅
- 제어문
- 원격저장소
- Object
- JSTL
- 단일행함수
- DB
- null
- 오버라이딩
- Method
- 다형성
- mysql
- gitbash
- Git
- jsp
- javascript
- 출력문
- Dao
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |