Java

[Java] Outer Loop 탈출법, break 사용범위

dearbeany 2022. 8. 19. 17:54


1. break 문의 탈출 => 가장 가까운 반복문 1단계

 

break문은 무조건 if 밖의 while, for, switch, do-while을 기준으로 가장 가까운 반복문 탈출을 시도한다. 즉,
탈출의 한계는 반복문 1단계 뿐이다.

 

		for (int i = 0; i < 2; i++) {
			System.out.println("<OuterLoop>: i = " + i);
			for (int j = 0; j < 10; j++) {
				if (j == 5) {
					System.out.println("break 실행");
					break;
				}
				System.out.println("InnerLoop: j = " + j);
			}
		}

=>

그렇다면, 이중반복문을 완전히 빠져나가고 싶다면? n의 반복문을 빠져나가고 싶다면?

 

 

2. 이중반복문의 탈출

- 태그 사용(바깥 반복문에 이름을 명명함)

		OuterLoop: for (int i = 0; i < 2; i++) {
			System.out.println("<OuterLoop>: i = " + i);
			for (int j = 0; j < 10; j++) {
				if (j == 5) {
					System.out.println("break 실행");
					break OuterLoop;
				}
				System.out.println("InnerLoop: j = " + j);
			}
		}

 

- 플래그 사용

		for (int i = 0; i < 2; i++) {
			System.out.println("<OuterLoop>: i = " + i);
			if (flag) break;

			for (int j = 0; j < 10; j++) {
				if (j == 5) {
					System.out.println("break 실행");
					flag = true;
					break; // break가 없을 경우 안쪽for문 모두 수행 후 바깥for문이 flag의해 종료
				}
				System.out.println("InnerLoop: j = " + j);
			}
		}

 

번외) 플래그 사용시 if문 내부의 break가 없는 경우의 출력?

- break가 없을 경우 안쪽for문 모두 수행 후 바깥for문이 flag의해 종료

		boolean flag = false; // 이중반복문 탈출을 위한 플래그

		for (int i = 0; i < 2; i++) {
			System.out.println("<OuterLoop>: i = " + i);

			if (flag) break;

			for (int j = 0; j < 10; j++) {
				if (j == 5) {
					System.out.println("break 실행");
					flag = true;
				}
				System.out.println("InnerLoop: j = " + j);
			}
		}