중첩 for문이 하나 있다고 가정하자.
for(int i=0; i<10; i++) {
System.out.println(i);
for(int j=0; j<5; j++) {
System.out.println(\tj);
if(i == 5 && j == 4) {
break;
}
}
}
i의 값이 5이면서 j의 값이 4일 때, 모든 for문이 종료되는 것을 기대했다.
하지만, 위의 코드를 실행해보면 아래와 같은 결과를 얻게 된다.
i = 0
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 1
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 2
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 3
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 4
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 5
j = 0
j = 1
j = 2
j = 3
j = 4
i = 6
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 7
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 8
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
i = 9
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
j = 7
고로, for문 안의 for문이 종료되고 i의 값이 증감된 상태로 다시 for문을 실행하게 된다.
기댓값을 얻기 위해서는 2가지의 방법이 존재한다.
1) Loop수에 맞춰서 break 걸기
boolean b = false;
for(int i=0; i<10; i++) {
System.out.println(i);
for(int j=0; j<5; j++) {
System.out.println(\tj);
if(i == 5 && j == 4) {
b = true;
}
if(b) {
break;
}
}
if(b) {
break;
}
}
코드의 복잡성을 낮추기 위해서 boolean타입의 변수 b를 지정해서 false로 초기화한다.
내가 원하는 시점에 b의 값을 true로 변경해서 b의 값이 true이면 break 하도록
안에 for문과 밖에 for문에 코드를 작성한다.
하지만, 이 방법은 for문이 많아지면 코드가 복잡해지기 때문에 다음 방법을 이용하는게 편리하다.
2) for문에 라벨 달아주기
loopout : for(int i=0; i<10; i++) {
System.out.println("i = " + i);
for(int j=0; j<8; j++) {
System.out.println("\tj = " + j);
if(i == 5 && j == 4) {
break loopout;
}
}
}
for문이 맨 처음 실행되는 구간에 라벨을 붙여준다.
필자는 loopout이라는 이름으로 붙여줬는데 이 라벨명은 변수명처럼 각자가 원하는대로 붙여주면 된다.
위의 코드에서는 i가 5이면서 j가 4인 시점에 break loopout을 만나 반복문을 빠져나오는데
loopout이라는 라벨이 붙은 반복문을 빠져 나오는것이므로 for문 전체를 빠져나오게 된다.
'BACK-END > JAVA' 카테고리의 다른 글
[JAVA]주소록 CRUD 프로그램 만들기 (0) | 2022.12.28 |
---|---|
[JAVA] 2진수를 원하는 진수로 변환해서 출력하는 프로그램 (0) | 2022.12.22 |
WRAPPER 클래스와 메소드 사용법 (0) | 2022.12.21 |
Scanner 그리고 BufferedReader 차이점 (0) | 2022.12.20 |
Map, HashMap (0) | 2022.05.24 |
댓글