반복문
자바는 반복 연산을 프로그래밍할 수 있도록 다음 3가지 종류의 반복문을 제공합니다.
| for 문, while문, do ~ while문 |
for 문은 처음부터 반복 횟수를 알 수 있는 경우에, while 문과 do ~ while 문 반복 횟수를 알 수 없고, 조건에 따라 반복이 계속되거나 중단되는 경우에 이용합니다.
while문은 반복 조건을 처음부터 따지는 경우에, do ~ while문은 반복 조건을 나중에 따지는 경우에 적합합니다.
for 문

초기문
초기문은 주로 조건식에서 사용하는 변수를 초기화합니다.
초기문의 특징이 다음과 같다.
- 초기문은 시작할 때 한 번만 수행됩니다.
- 콤마(,)로 분리하여 여러 문장을 나열할 수 있습니다.
- 초기문은 빈 상태로 두어도 되지만 끝에 세미콜론(;)은 있어야 합니다.
조건식
조건식에는 논리형 변수나 논리 연산을 사용합니다. 조건식의 결과가 true이면 반복이 계속되며 false이면 for문을 벗어납니다. 조건식은 for 문의 작업 문장을 수행하기 전에 검사하므로 처음부터 false이면 바로 반복문을 벗어납니다.
for (i = 0; i < 10; i++) { // i가 0 ~ 9까지 10번 반복
System.out.print(i); // 0에서 9까지 출력
}
다음과 같이 조건식에 true가 있거나 비어 있으면 무한 반복(infinite loop) 됩니다.
for (초기문; true; 반복 후 작업) { // 무한 반복
..............
}
for (초기문; ;반복 후 작업) { // 조건식이 비어 있으면 무한 반복
..............
}
반복 후 작업
for 문의 작업문의 실행된 후 '반복 후 작업문'이 실행됩니다.
for (i = 0; i < 10; i += 2) { // i가 0, 2, 4, 6, 8로 변하면서 5번 반복
...............
}
'반복 후 작업문'에는 콤마(,)로 분리하여 여러 문장을 나열할 수 있습니다.
for (int i = 0; i < 10; i++, System.out.println(i) {
...........
}
작업문
for 문이 반복하는 동안 반복 실행합니다.
작업문이 하나의 문장인 경우 중괄호({ })가 필요 없지만 여러 개의 문장으로 구성되는 경우 반드시 중괄호({ })로 묶어야 합니다.
for 문 활용
0에서 9까지 정수 출력
for (i = 0; i < 10; i++) {
System.out.print(i);
}
위의 문장은 다음과 같이 중괄호({ })를 생략해도 됩니다.
for (i = 0; i < 10; i++)
System.out.print(i);

반복문에 변수 선언
변수 i를 for 문 블록 내에서만 사용되는 지역 변수로 선언하여 사용할 수 있습니다.
for (int i = 0; i < 10; i++) // 변수 i는 for 문 밖에서 사용 불가
System.out.print(i);
1에서 100까지의 합 구하기
int sum = 0;
for (int i = 1; i <= 100; i++) // 1에서 100까지 반복
sum += i;
int sum = 0;
for (int i = 100; i >= 1; i--) // 100에서 1까지 반복
sum += i;
int i, sum;
for (i = 1, sum = 0; i <= 100; i++) // sum 변수를 0으로 초기화
sum += i;
}
for 문을 이용하여 1에서 10까지의 합 출력
public class ForSample {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) { // 1 ~ 10까지 반복
sum += i;
System.out.print(i); // 더하는 수 출력
if (i <= 9) // 1 ~ 9까지는 '+' 출력
System.out.print("+");
else { // i가 10인 경우
System.out.print("="); // "=" 출력하고
System.out.print(sum); // 덧셈 결과 출력
}
}
}
}
실행 결과
1+2+3+4+5+6+7+8+9+10=55
while 문

while문은 반복 횟수를 알 수 없는 경우에 적합합니다. while 문의 조건식은 true인 동안 작업문의 실행을 반복하고, false가 되면 while 문을 벗어납니다.
while 문에 조건식이 없으면 컴파일 오류가 발생합니다.
while 문을 사용하는 경우, 조건식에 사용되는 변수를 while 문 실행 전에 초기화해야 합니다.
그리고 반복이 진행되면서 조건식이 false가 되어 반복문을 빠져 나올 수 있도록 설계되어야 합니다.

-1이 입력될 때까지 입력된 수의 평균 구하기
import java.util.Scanner;
public class WhileSample {
public static void main(String[] args) {
int count = 0; // count는 입력된 정수의 개수
int sum = 0; // sum은 합
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 입력하고 마지막에 -1을 입력하세요.");
int n = scanner.nextInt(); // 정수 입력
while (n != -1) { // -1이 입력되면 while 문 벗어남
sum += n;
count++;
n = scanner.nextInt(); // 정수 입력
}
if (count == 0)
System.out.println("입력된 수가 없습니다.");
else {
System.out.print("정수의 개수는 " + count + "개이며 ");
System.out.println("평균은 " + (double) sum / count + "입니다.");
}
scanner.close();
}
}
실행 결과
정수를 입력하고 마지막에 -1을 입력하세요.
10
30
-20
40
-1
정수의 개수는 4개이며 평균은 15.0입니다.
do ~ while 문

do-while 문의 조건식은 조건식이 없으면 컴파일 오류가 발생합니다.
do-while 문은 작업문 실행 후 조건식을 검사하므호 작업문이 최초 한 번은 반드시 실행합니다.
do-while 문에서도 조건식에 사용되는 변수는 do-while 문 실행 이전에 초기화가 이루어져야 합니다.
무한 반복에 빠지지 않게 반복이 진행되는 동안 조건식을 false로 만들 수 있도록 설계가 되어야 합니다.

a부터 z까지 출력
public class DoWhileSample {
public static void main(String[] args) {
char c = 'a';
do {
System.out.print(c);
c = (char) (c + 1); // 영문의 경우 1을 더하면 다음 문자의 코드 값
} while (c <= 'z');
}
}
실행 결과
abcdefghijklmnopqrstuvwxyz
중첩 반복
반복문 안에 다른 반복문을 만들 수 있는 것을 중첩 반복이라고 합니다.
반복은 몇 번이고 중첩 가능하지만, 너무 깊은 중첩 반복은 프로그램 구조를 복잡하게 하므로 2중 또는 3중 중첩 이상하지 않는 것이 바람직합니다.

2중 중첩을 이용한 구구단 출력
public class NestedLoop {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) { // 1단에서 9단
for (int j = 1; j < 10; j++) { // 각 단의 구구셈 출력
System.out.print(i + "*" + j + "=" + i * j); // 구구셈 출력
System.out.print("\t");
}
System.out.println(); // 한 단이 끝나면 다음 줄로 커서 이동
}
}
}
실행 결과
