관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch4 - 20 ~ 24 [break문, continue문, 이름붙은 반복문] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch4 - 20 ~ 24 [break문, continue문, 이름붙은 반복문]

소소한나구리 2023. 11. 8. 12:01

1) break문

  • switch문을 벗어날 때 사용
  • 자신이 포함된 하나의 반복문을 벗어날 때 사용

 

(1) 예제

  • 무한반복문으로 i의 값을 증가시켜 sum에 계속 덧셈 연산을 수행
  • if문으로 sum이 100을 넘어가면 break문을 동작하게 하여 무한 반복문을 종료
  • 동일한 로직을 일반 while문, for문 for문의 무한 반복문으로도 구성
public class ex4_16 {

	public static void main(String[] args) {
		int sum = 0, i = 0;
		
		//while 무한반복문: true 생략불가
		while(true) { // 무한반복문 for(;true;) {} (for문은 true생략 가능)
			if(sum > 100)
				break; // 자신이 속한 반복문을 아웃
			++i;
			sum += i;
		}
		
		// 일반 while문으로 변경
		while(sum < 100) { 
			++i;
			sum += i;
		}

		// for문으로 변경
		for(; sum < 100; sum += i) {
			++i;	
		}
		
		// for문의 무한반복문으로 변경
		for( ; ; ) { // for문 true생략 가능
			if(sum > 100)
				break; // 자신이 속한 반복문을 아웃
			++i;
			sum += i;
		}
		System.out.println("i=" +i);
		System.out.println("sum=" +sum);
	} 
}

i=14
sum=105

2) countinue문

  • 자신이 포함된 반복문의 끝으로 이동 -> 다음 반복으로 넘어감
  • 전체 반복 중에서 특정 조건의 반복을 건너 뛸 때 유용

 

(1) 예제

  • i의 값을 10까지 1씩 증가하지만 if문의 조건에 i의 값이 3의 배수가 되면 continue문이 수행되어 println()코드를 수행하지 않고 다음 반복으로 넘어감
  • 결과적으로 3의 배수만 제외하고 나머지 i값이 출력됨
public class ex4_17_continue {

	// i를 3으로 나누었을 때의 나머지가 0인 경우 출력을 건너뛰는 코드 (3의 배수를 출력 제외)
	public static void main(String[] args) {
		for(int i = 0; i <= 10; i++) {
			if (i%3 == 0)
				continue;
			System.out.println(i);
		}
	}
}

1
2
4
5
7
8
10

 

(2) break문과 continue문 활용

  • 챗봇 만들기
  • 무한 반복문 내부의 if문에 입력값이 0이 되면 break문이 동작하도록하여 프로그램을 종료하도록 설계
  • else if문에는 1,2,3 의 숫자가 아닌 다른 숫자가 들어오게 되면 continue문을 수행하여 종료하지는 않지만 다음 반복을 실행하여 다시 메뉴를 보여주도록 설계
import java.util.*;

public class ex4_18_continue {
    public static void main(String[] args) {
        int menu = 0, num = 0;
			
        Scanner scanner = new Scanner(System.in);
			
        while(true) {  // 무한반복문
            System.out.println("(1) square");
            System.out.println("(2) square root");
            System.out.println("(3) log");
            System.out.print("원하는 메뉴(1~3)를 선택하세요,(종료:0)>");
            
            String tmp = scanner.nextLine();
            menu = Integer.parseInt(tmp);
				
            if(menu==0) { 
                System.out.println("프로그램을 종료합니다.");
                break; // 0을 입력하면 반복문을 break
            } else if (!(1 <= menu && menu <= 3)) {
                System.out.println("메뉴를 잘못 선택하셨습니다. (종료:0)");
                continue;  // 1~3번을 아닌 것을 입력하면 다시 반복문을 실행
            }
            System.out.println("선택하신 메뉴는 "+menu+"번입니다.");
        }
    }
}

0 입력 시 프로그램 종료

(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요,(종료:0)>0
프로그램을 종료합니다.

1~3이 아닌 다른 수를 입력 시 반복문 재실행

(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요,(종료:0)>4
메뉴를 잘못 선택하셨습니다. (종료:0)
(1) square
(2) square root
(3) log
원하는 메뉴(1~3)를 선택하세요,(종료:0)>

1~3을 선택 시 무한반복

3) 이름붙은 반복문

  • 반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있음\
  • 중첩반복문에 사용
  • contunue에는 쓰는 경우가 거의 없고 break에 많이 사용

 

(1) 예제

  • for문 앞에 Loop1 : 으로 이름을 생성할 수 있음
  • break문에 반복문에 생성한 이름을 작성하여 특정 반복문을 종료시킬 수 있음
public class ex4_19_naming {
    public static void main(String[] args) {
    // TODO Auto-generated method stub	
		
    // for문에 Loop1이라는 이름 생성
        Loop1 : for(int i = 2; i <= 9; i++) {
            for(int j = 1; j <= 9; j++) {
                if(j==5) 
                    break Loop1; // 5가 되면 반복문을 완전히 빠져나감
                //    break; //i를 9번까지 계속 반복
                System.out.println(i+"*"+j+"="+i*j);
            } // i 반복문 끝 
            System.out.println();
        } // Loop1 끝
    }
}

break Loop1; 결과값

2*1=2
2*2=4
2*3=6
2*4=8

만일 break; 로만 한다면?

2부터 9단까지 1~4까지의 구구단이 출력됨

 

(2) 계산 추가

  • 아까의 챗봇 프로그램에 중첩 무한반복문을 사용하여 계산 로직을 추가
  • 가장 바깥에 있는 while 반복문에 이름을 붙혀서 내부의 반복문에서도 전체 반복문을 빠져나갈 수 있도록 설정 -> 챗봇 로직 설정의 종료 로직을 구성할때 유용할 듯
import java.util.*;

public class ex4_20_naming {
    public static void main(String[] args) {
        int menu = 0, num = 0;
			
        Scanner scanner = new Scanner(System.in);
			
        outer : 
        while(true) {  // 무한반복문1
            System.out.println("(1) square");
            System.out.println("(2) square root");
            System.out.println("(3) log");
            System.out.print("원하는 메뉴(1~3)를 선택하세요,(종료:0)>");

            String tmp = scanner.nextLine();
            menu = Integer.parseInt(tmp);

            if(menu==0) { 
                break; // 0을 입력하면 반복문을 break
            } else if (!(1 <= menu && menu <= 3)) {
                System.out.println("메뉴를 잘못 선택하셨습니다. (종료:0)");
                continue;  // 1~3번을 아닌 것을 입력하면 다시 반복문을 실행
            }
            for(;;) { // 무한반복문2
                System.out.print("계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>");
                tmp = scanner.nextLine();
                num = Integer.parseInt(tmp);

                if(num==0)
                    break; // 서브메뉴 아웃 -> 다시 while로
                if(num==99) // 네이밍한 outer 반복문 아웃
                    break outer;
                switch(menu) {
                    case 1:
                        System.out.println("result="+ num*num);
                        break;
                    case 2:
                        System.out.println("result="+ Math.sqrt(num));
                        break;
                    case 3:
                        System.out.println("result="+ Math.log(num));
                        break;
                }
            } // for의 끝 
    	} //while의 끝
    	System.out.println("프로그램을 종료합니다.");
	} // main의 끝
}

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의