본문 바로가기

자바스프링웹공부(2024)/자바

2024.08.05. break && continue

반응형

*break & continue;
  - 반복문 내에서 반복문을 제어하는데 사용.
  - 주로 조건식 (if문 등)과 결합하여 사용.
 
  1. break문
  - 현재 수행중인 반복문을 종료하고 빠져나가는데 사용.
  - break문을 만나면 반복문 내의 break문 보다 아래쪽 문장실행을 생략하고 즉시 반복문을 빠져나감.
 
  2. continue문
  - 현재 수행중인 반복문의 특정 문장 실행을 생략하는데 사용.
  - 현재 수행중인 반복문의 continue문 보다 아래쪽 문장 실행을 생략하고 다음 반복을 진행하기 위해 위로 점푸.
  - for문에서 증감식으로 이동. while문은 다음 조건식으로 이동. 

int i = 1;
while (i <= 10) {
    if(i % 2 == 1) { // 홀수일 경우 
        continue;
    }
    System.out.println(i);
    i++;			
}

// 결과 : 무한루프 - continue를 만나면 조건식으로 간다. 그러면 1 이 계속 i<=10 조건식에 들어가서 true가 되므로 무한 루프에 도는 것이다. 
// 증감식을 countinue 보다 아래쪽에 있으면 false 될 일이 없으므로 계속 true가 된다.
i=0; // 1부터 시작하면 while문으로 들어가자마자 2로 시작하기때문에 초기식도 +1 해야한다.  
while (i <= 10) {
    i++; // 주의!! while 문 내에서 continue문을 사용해야 할 경우 제어변수를 제어하는 증감식이 continue문 보다 위쪽에 위치해야 한다. 
    if(i % 2 == 1) { // 홀수일 경우 
        continue;
    }
    System.out.println(i);
    //i++; 여기에 위치하면 무한루프.			
}

 
* 중첩반복문
중첩 반복문 내에서 break, continue문 사용시 break, continue문이 소속된 반복문에 효과가 적용됨.
  따라서, 원하는 반복문 블럭에 break, continue문을 적용하고 싶을 경우 레이블(Label) 기능을 활용하여 원하는 블럭을 지정하고 break, continue 문 사용시 해당 레이블을 지정하도록 해야한다.

레이블명:
for(){// 원하는 반복문
    for(){ // 안쪽 반복문
        if(){
            break or continue;
            break 레이블명;
        }
    }
}
OUTER:
for (int dan=2; dan <= 9; dan++) {
    System.out.println("< "+ dan +"단 >");

    INNER:
    for(int i = 1; i <= 9; i++) {
        if(dan == 6) {
            // ???????????????????? 디버깅을 해보셈.
            // break; // 안족 for문 종료하고 줄바꿈 문장이 실행됨.  <6단> 제목만 찍고 6단만 안나온다.
            //continue; // 아래쪽 실행문을 생략하고 for문의 증감식으로 이동함. 쓸데없이 9바퀴돌고 줄바꿈을 함.

            //break INNER;
            //continue  INNER; 
            // 둘다 위와 같은 결과가 나옴.

            //break OUTER; // <6단> 제목 찍고 줄바꿈후 완전 종료함. 다음에 것을 아예 실행안함.
            continue OUTER;// <6단> 제목 찍고 줄바꿈 하지않고 완전 종료함. 바깥쪽 for문의 증감식(dan++) 이동
            // dan 6일때 i가 1일 경우 continue 문을 만나 
            // 안쪽 for문을 포함하여 for문의 continue 문 아래쪽 문장을 생략 후 바깥쪽 for문 반복을 위해 증감식(dan++)으로 이동함.

        }

        System.out.println(dan + " * " + i + " = " + dan*i);
    }
    System.out.println();
}
System.out.println("프로그램 종료");


   
 


* 오늘의 문제 *

Q. UP & DOWN 게임만들기
  1 ~ 999 사이의 난수 하나를 target에 저장.
  20번 반복하면서 정수를 입력 받는다.
   - target 보다 작은 수를 입력받았을 경우 "UP" 출력
   - target 보다 큰 수를 입력받았을 경우 "DOWN" 출력
   - 일지하는 숫자를 입력받았을 경우 target과 몇회만에 맞췄는지 출력 후 반복 종료.
   "정답 : XXX, 횟수 : XXX"
   - 20번 안에 정답을 맞추지 못한 경우 "실패! 정답 : XXX" 출력
   
   추가) 난이도를 선택할 수 있도록 프로그램 변경
   상, 중, 하 (2, 1, 0) 중 하나를 입력받아 
   상: 8번, 중 12번, 하: 20번으로 반복횟수 설정.


** if문 밖에 빼서 코드 깔끔하게!!!!

 

* 더 간결한 코드 가져옴. *

- 나는 if else 로 상, 중, 하 횟수를 받았는데 동등비교는 switch 를 사용하는 것이 더 간결하고 성능면에서도 효율 적이다. 

- Scanner는 한번 생성하면 다시 만들 필요없이 재사용 하면 된다. 
반응형