for 반복문은 대부분 반복 횟수가 고정되어 있을 때 사용하는 반복문이다.
구구단이나 일정 횟수만큼 누적 계산을 할 때 구조가 간단해진다.
for문과 while문의 선택 기준은 다음과 같다.
반복 횟수가 명확하게 정해져 있다면 for문을 사용하는 것이 적합하다.
몇 번 반복될지 모르고 특정 상태가 되었을 때 종료해야 한다면 while문이 더 어울린다.
```java
// for문 기본 형식
for (시작값; 종료조건; 증감값) {
반복실행문
}
sum 변수에 값을 계속 더해 누적시키는 방식이다.
반복이 진행될수록 값이 덮어씌워지는 것이 아니라 누적된다는 점이 핵심이다.
int sum1 = 0;
for (int k = 1; k < 101; k++) {
sum1 += k;
}
System.out.println(sum1);
for문 안에 if문을 사용하여 홀수일 때만 누적하도록 처리할 수 있다.
나머지 연산자를 이용해 홀수 여부를 판단한다.
int sum1 = 0;
for (int i = 1; i < 101; i++) {
if (i % 2 == 1) {
sum1 += i;
}
}
System.out.println(sum1);
굳이 모든 숫자를 순회할 필요 없이, 증감값을 2로 설정하면 홀수만 방문할 수 있다.
이 방식이 더 간결하고 효율적이다.
int sum2 = 0;
for (int j = 1; j < 101; j += 2) {
sum2 += j;
}
System.out.println(sum2);
for문 안에 또 다른 for문을 넣을 수 있으며, 바깥 반복이 한 번 실행될 때
안쪽 반복은 여러 번 실행된다.
// 구구단
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.println(i + " x " + j + " = " + (i * j));
}
System.out.println();
}
줄 번호에 따라 별의 개수가 하나씩 증가하는 패턴이다.
안쪽 반복문의 조건을 i + 1로 설정해 줄 단위 증가를 만든다.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < i + 1; j++) {
System.out.print("*");
}
System.out.println();
}
위에서부터 별의 개수가 줄어드는 구조다.
안쪽 반복문의 조건을 5 - i로 설정해 줄마다 출력 개수를 줄인다.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5 - i; j++) {
System.out.print("*");
}
System.out.println();
}
한 줄을 공백 영역과 별 영역으로 나누어 생각하면 패턴이 보인다.
공백은 줄어들고, 별은 늘어나도록 설계한다.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < (5 - i) - 1; j++) {
System.out.print(" ");
}
for (int k = 0; k < i + 1; k++) {
System.out.print("*");
}
System.out.println();
}
이번에는 공백이 늘어나고 별이 줄어드는 구조다.
두 개의 반복문 역할을 분리해서 생각하는 것이 중요하다.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
for (int k = 0; k < 5 - i; k++) {
System.out.print("*");
}
System.out.println();
}
for문은 반복 횟수가 명확한 상황에서 가장 읽기 쉬운 반복문이다.
증감값을 조절하면 조건문 없이도 원하는 값만 순회할 수 있다는 점이 인상적이었다.
중첩 for문과 별찍기 문제는 공백과 출력의 역할을 나누어 생각하면 구조가 명확해진다.