for문과 동일하게 특정 조건에 따라 반복하여 수행할때 사용한다. 단, 초기값 없이 조건문만 명시하여 반복한다.
While(조건문 { (연산) } 형태로 사용한다. (while문)
조건문을 만족해야만 연산이 반복 수행된다.
한번 반복할때마다 조건문을 체크하여 불만족(false)이면 반복을 중단한다.
do { (연산) } while(조건문) 형태로도 사용가능하다. (do-while 문)
int number = 0;
while (number < 3) {
number++;
System.out.println(number + "출력");
출력값: 1출력, 2출력, 3출력
do를 한 이후 while작업을 진행한다.
int number = 4;
do{
System.out.println(number + " 출력");
} while (number < 3);
출력값: 4 출력
만일 여기서 int number = 1; 일 경우 1 출력의 무한루프에 빠진다. 빠지지 않게 하려면 while 이전에 do 에서 number++; 을 해야 한다.
int number = 0;
do{
number++;
System.out.println(number + " 출력");
} while (number < 3);
다음과 같이 되어야 한다.
break; 명령을 내리면 가장 가까운 블럭의 for문 또는 while, switch 문을 중단한다.
int number = 0;
while (number < 3) {
number++;
if (number == 2) {
break;
}
System.out.println(number + "출력!");
while 문에 의해 0이므로 3보다 작고 number++;에 의해 0 → 1이 되었으므로 "1 출력"이 출력된다.
while문에 의해 1이므로 3보다 작다. number++;에 의해 1 → 2이 되었고 if문에 의해 number 2와 2는 같으므로 break가 실행되어 while문이 더 이상 출력이 진행되지 않는다.
for (int i=0; i<10; i++) {
System.out.println("i: " + i);
if (i == 2) {
break;
}
for (int j=0; j<10; j++) {
System.out.println("j: " + j);
if(j == 2) {
break;
}
}
}
for문 안에 중첩 for문이 사용되었다. 먼저 i의 경우 0이므로 브레이크에 걸리지 않고 하위 for문으로 이동한다.
하위 for문의 j는 0이므로 break에 걸리지 않는다. 이때 상위 for문으로 이동하지 않고 하위 for문에서 j가 j++에 의해서 0 → 1이 된다. 그렇게 "j: 0", "j: 1", "j: 2" 까지 된 후에 if문의 2==2 가 성립되어 break에 걸린다.
다시 상위 for문의 i가 0 → 1이 되고 마찬가지로 if문의 i == 2가 성립되지 않기에 하위 for문으로 이동한다."j: 0", "j: 1", "j: 2" 까지 된 후에 if문의 2==2 가 성립되어 break에 걸린다.
상위 for문의 i가 1 → 2가 되고 이번에는 if 의 2 == 2가 성립되기 때문에 break에 걸려서 하위 for문으로 이동하는 것 없이 출력이 마치게 된다.
for문 또는 while 문에서 해당 순서를 패스하고 싶을 때 사용
반복문 안에서 continue; 형태로 사용
int number = 0;
while (number < 3) {
number++;
if (number == 2) {
continue;
}
System.out.println(number + "출력!");
}
number가 0 < 3에 충족하므로 number++; 에 의해 1로 된다. 이후 if문의 1 == 2 는 성립하지 않으므로 "1 출력!"이 출력된다.
number가 1 < 3에 충족하므로 number++; 에 의해 2로 된다. if문의 2 == 2가 성립되므로 continue;문에 걸리게 된다. 이 때 출력을 진행하는 것이 아닌 바로 while문의 2 < 3으로 가서 진행한다.
number++;에 의해 1이 추가 되어 3이 되고 "3 출력!"이 출력된다.
최종적으로 "1 출력!" 과 "3 출력!"이 출력된다.