while : 조건이 true 일 때 반복 수행 int i = 0;
// 💡 while 문의 괄호에는 종료조건만
while (i < 10) {
// 종료조건 충족을 위한 값 변화는 외적으로
System.out.println(i++);
}
아래처럼 사용하면 무한루프가 된다.
// 💡 의도적인 무한 루프에 널리 쓰이는 코드
while (true) {
System.out.println("인간의 욕심은 끝이 없고");
System.out.println("같은 실수를 반복한다.");
}
아래처럼break 를 사용하여 반복문을 종료하는 것도 가능하다.
double popInBillion = 7.837;
// ⭐️ break 를 통한 반복 탈출
while (true) {
System.out.println("세계인구: " + (popInBillion -= 0.1));
if (popInBillion <= 0) break;
System.out.println("인간의 욕심은 끝이 없고");
System.out.println("같은 실수를 반복한다.");
}
System.out.println("인류 멸종");
// 100보다 작은 3의 배수들 출력해보기
int i = 1;
// ⚠️ 의도대로 작동하지 않음. 이유는?
while (true) {
if (i % 3 != 0) continue; // 🔴
System.out.println(i);
if (i++ == 100) break;
}
위의 코드를 보면 i가 증가하기 전에 계속 continue에 걸려서 무한루프에 빠지는 것을 알 수 있다.
이런 종류의 실수는 종종 일어나니 주의해서 코드를 살펴보자.
int i = 1;
while (true) {
if (i++ == 100) break;
if ((i - 1) % 3 != 0) continue;
System.out.println(i - 1);
}
// 100보다 작은 3의 배수들이 출력
위의 코드보다 조금 더 가독성이 좋은 코드는 아래 코드이다.
int i = 1;
// 보다 가독성을 높이고 의도를 잘 드러낸 코드
while (true) {
int cur = i++;
if (cur == 100) break;
if (cur % 3 != 0) continue;
System.out.println(cur);
}
무조건 짧은 코드가 좋은 코드는 아니다.
do ... while : 일단 수행하고 조건을 봄 int enemies = 0;
System.out.println("일단 사격");
do {
System.out.println("탕");
if (enemies > 0) enemies--;
} while (enemies > 0);
System.out.println("사격중지 아군이다");
System.out.println("\n- - - - -\n");
int x = 1; // 10 이상으로 바꿔서 다시 실행해 볼 것
int y = x;
while (x < 10) {
System.out.println("while 문: " + x++);
}
do {
System.out.println("do ... while 문: " + y++);
} while (y < 10);
위의 코드들을 실행해보면 do...while 은 일단 한번은 실행하고 그 다음 조건에 따라 동작한다.
final int LINE_WIDTH = 5;
int lineWidth = LINE_WIDTH;
while (lineWidth > 0) {
int starsToPrint = lineWidth--;
while (starsToPrint-- > 0) { // 🔴
System.out.print("*");
}
System.out.println();
}
브레이크포인트를 내부 반복문에 찍고 꼭 디버그 과정을 통해 변수가 변하는 것을 확인하길 바란다.
// for 문으로 다시 작성
for (int i = LINE_WIDTH; i > 0; i--) {
for (int j = i; j > 0; j--) {
System.out.print("@");
}
System.out.println();
}