Computer Science/컴퓨터 프로그래밍

JAVA/C++ 반복문 탈출(break, label)

Chavo Kim 2020. 9. 18. 13:36

코딩을 할 때 2중으로 for문이 있거나 while문을 돌릴 때,

 

전체 반복문을 탈출하고 싶을 때가 있다.

 

그럴 때 break를 사용하게 되면, 현재 반복문만 통과하기 때문에 상위의 반복문은 여전히 돌아간다.

 

만약 전체 반복문을 탈출하고 싶다면 labeling을 사용해서 통과해줄 수 있다!

 

아래 코드를 보자

 

public class Practice {
    public static void main(String[] args){
        char[] test = new char[]{'a', 'b', 'c'};
        int[] test2 = new int[]{0, 1, 2};

        int i = 0;

        loof1 : while(true){
            System.out.println("i : " + i);
            for(int j : test2) {
                if(j == 2)
                    break;
                System.out.println("j : " + j);
            }
            i++;
            if(i == 10)
                break;
        }
    }

}

 

아래와 같이 반복문이 구성되어 있을 때, j==2에서 break를 하면 내부의 반복문만 끝나고 상위의 while 반복문은 계속 돌게 된다.

 

출력

 

i : 0
j : 0
j : 1
i : 1
j : 0
j : 1
i : 2
j : 0
j : 1
i : 3
j : 0
j : 1
i : 4
j : 0
j : 1
i : 5
j : 0
j : 1
i : 6
j : 0
j : 1
i : 7
j : 0
j : 1
i : 8
j : 0
j : 1
i : 9
j : 0
j : 1

 

만약 j == 2가 되는 조건에서 전체 반복문을 끝내고 싶다면?

 

앞서 벗어나고 싶은 반복문 앞에 "label_name :" 으로 labeling 해주고

 

이후에 break label;으로 해당 반복문을 벗어나주면 된다.

 

public class Practice {
    public static void main(String[] args){
        char[] test = new char[]{'a', 'b', 'c'};
        int[] test2 = new int[]{0, 1, 2};

        int i = 0;

        loof1 : while(true){//label 선언
            System.out.println("i : " + i);
            for(int j : test2) {
                if(j == 2)
                    break loof1;//최상위 반복문 탈출
                System.out.println("j : " + j);
            }
            i++;
            if(i == 10)
                break;
        }
    }

}

 

출력 : 

 

i : 0
j : 0
j : 1

 

p.s.

 

C/C++에서도 가능한가 싶어서 찾아보니,

 

dojang.io/mod/page/view.php?id=259

 

C 언어 코딩 도장: 32.2 중첩 루프 빠져 나오기

이번에는 중첩 루프와 goto에 대해서 알아보겠습니다. 다음은 변수 num1이 20이 되면 중첩 루프를 빠져나옵니다. if_multiple_loop.c #include #include int main() { int num1 = 0; bool exitOuterLoop = false; // 바깥쪽 루��

dojang.io

 

goto를 사용해서 바로 EXIT 부분으로 빠져나올 수 있더라...

 

역시 아는게 힘.