반복문을 사용하면 같은 문장을 여러 번 적지 않아도 동일한 결과를 이끌어낼 수 있어서 효율적이다.
for문
for(초기화; 조건식; 증감식) {
반복될 문장;
반복될 문장;
}
*반복될 문장이 하나인 경우는 괄호를 생략할 수 있음
total += i는 total = total + i와 동일하다.
for문에서 선언된 int형의 i라는 변수는 for문이 끝나는 블록(})을 만나면 소멸된다.
즉, for문 안에서만 의미가 있다. 따라서 for문이 끝난 후 i라는 변수를 사용하고자 하면 에러가 발생한다.
for(int i, int j; 조건식; 증감식) {
반복될 문장;
반복될 문장;
}
초기화 부분에는 초기화 문장을 콤마(,)를 사용해 여러 개 배치할 수도 있다.
또 원하는 위치에 초기화, 증감식을 위치시킬 수도 있다.
만약 위의 코드에서 조건식을 생략한다면 문장이 무한히 반복된다.
for(;;) {
}
초기화, 조건식, 증감식, 반복될 문장을 모두 생략할 수 있다.
향상된 for문
for(타입 변수: 배열) {
반복될 문장;
반복될 문장;
}
*배열에 가져올 항목이 있는 경우 실행되고 더 이상 가져올 항목이 없을 때 종료됨,
배열에 항목이 존재하지 않는 경우에는 for문이 실행되지 않음
*반복될 문장이 하나인 경우는 괄호를 생략할 수 있음
while문
while(조건식) {
반복될 문장;
반복될 문장;
}
*반복될 문장이 하나인 경우는 괄호를 생략할 수 있음
for문과 달리 증감식과 조건식이 없다.
1부터 100까지의 합을 구하는 예제를 while문으로 구현해보자.
이때 i++를 생략하게 되면 i의 값은 항상 1이므로 i <= 100은 항상 참이다.
while문의 조건식이 항상 참이면 while문을 탈출하지 않고 코드가 무한히 반복되므로 이 점을 유의하자!
do~while
do {
반복될 문장;
반복될 문장;
} while(조건식);
*반복될 문장이 하나인 경우는 괄호를 생략할 수 있음
do~while문은 while문과 달리 반복될 문장을 실행한 후, 조건식을 검사하여 참이면 이 과정을 반복하고, 거짓이면 반복문을 탈출한다.
break문
break문을 만나면 가장 가까운 반복문이나 switch문을 빠져나간다.
만약, for문이 중첩된 구조일 때, 가장 안쪽에서 break문을 만난다면 안쪽의 반복문만을 탈출한다.
이때, 중첩 반복문에 이름을 붙여주어 한 번에 반복문을 탈출할 수 있다.
continue문
i % 2 == 0가 참일 때(i가 짝수일 때) continue문이 실행된다.
continue문을 만나면 아래의 코드를 실행하지 않고 바로 for문의 마지막 블록(})으로 건너뛰게 된다.
for문의 수행 순서는 초기식 -> 조건식 -> 반복될 문장 -> 증감식이므로 곧바로 i의 값을 1만큼 증가한다.
이후 조건식이 참이면 반복문을 실행하고, 아니면 반복문을 탈출한다.