티스토리 뷰

JAVA

보조 제어문 (break / continue)

태로미 2023. 2. 11. 16:38

 

 

 

 

 

 

 

 

 

 

▶▶   보조 제어문

–  주로 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 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함