Java while문 문제는 반복 횟수보다 현재 상태와 종료 조건을 먼저 정해야 풀린다. 목표 몸무게에 도달할 때까지 입력받기, 오답이 5번 쌓일 때까지 덧셈 문제 내기, 두 입력이 모두 0일 때 종료하기를 한 흐름으로 연결해 보자.
while문 설계 순서: 반복 전에 상태를 만든다 → 조건을 검사한다 → 한 번의 입력과 처리를 수행한다 → 상태를 반드시 갱신한다.

목표 달성, 오답 횟수, 종료 신호처럼 상태가 바뀌며 while문이 끝나는 세 가지 장면
1. 반복 조건은 ‘계속할 때’를 쓴다
| 문제 | 상태 | 계속 조건 | 갱신 |
|---|---|---|---|
| 목표 감량 | 현재 몸무게 | 현재 > 목표 | 감량값 빼기 |
| 덧셈 게임 | 오답 횟수 | 오답 < 5 | 틀렸을 때 1 증가 |
| 종료 신호 | 두 입력값 | 무한 반복 | 0, 0이면 break |
while (true)가 틀린 것은 아니다. 종료 신호가 반복문 안에서 결정되는 문제라면 무한 반복을 만들고 break 위치를 명확히 두는 편이 자연스럽다.
2. 목표 몸무게까지 입력받기
Scanner sc = new Scanner(System.in);
int current = sc.nextInt();
int goal = sc.nextInt();
int week = 1;
while (current > goal) {
System.out.print(week + "주차 감량: ");
int loss = sc.nextInt();
if (loss <= 0) {
System.out.println("감량값은 1 이상이어야 합니다.");
continue;
}
current -= loss;
week++;
}
System.out.println(current + "kg 달성");
원문 1의 핵심은 current -= loss다. 이 갱신이 없으면 조건이 영원히 바뀌지 않아 무한 반복이 된다. 잘못된 입력에서 continue를 사용하면 몸무게와 주차를 변경하지 않고 다시 입력받을 수 있다.
3. 오답이 5번 쌓이면 끝나는 덧셈 게임
Random random = new Random();
int wrong = 0;
while (wrong < 5) {
int a = random.nextInt(10) + 1;
int b = random.nextInt(10) + 1;
System.out.print(a + " + " + b + " = ");
int answer = sc.nextInt();
if (answer == a + b) {
System.out.println("SUCCESS");
} else {
wrong++;
System.out.println("FAIL (" + wrong + "/5)");
}
}
System.out.println("GAME OVER");
원문 29는 전체 문제 수가 아니라 틀린 횟수를 상태로 사용한다. 정답일 때는 wrong이 늘지 않으므로 사용자는 오답을 다섯 번 낼 때까지 계속 도전한다.
4. 두 수가 모두 0일 때만 종료하기
while (true) {
int a = sc.nextInt();
int b = sc.nextInt();
if (a == 0 && b == 0) {
break;
}
System.out.println(a - b);
}
원문 32의 문장은 “A와 B가 모두 0”이다. 따라서 &&가 맞다. a == 0 || b == 0을 쓰면 둘 중 하나만 0이어도 프로그램이 끝나는 오류가 생긴다.
5. 실수하기 쉬운 부분
상태를 갱신하지 않는다
조건에 사용한 변수가 반복문 안에서 바뀌는지 확인한다. 바뀌지 않으면 종료할 수 없다.
종료 입력도 계산한다
0, 0을 확인한 직후 break해야 한다. 뺄셈을 먼저 출력하면 종료 신호가 결과처럼 보인다.
문장의 ‘모두’와 ‘하나라도’를 바꾼다
“모두”는 &&, “하나라도”는 ||로 번역한 뒤 경계 입력을 직접 대입해 본다.
- while문은 횟수보다 상태와 종료 조건을 먼저 설계한다.
- 반복 조건에 쓰인 상태는 본문에서 반드시 갱신한다.
- 종료 신호는 계산보다 먼저 검사한다.
- “두 값 모두 0”은
&&조건이다.
'자격증·공부 아카이브 > Java 기초' 카테고리의 다른 글
| Java 숫자 계산 예제: 거스름돈·반올림·구구단·세 자리 곱셈 (0) | 2026.08.02 |
|---|---|
| Java while문 실전: 목표 달성·덧셈 게임·종료 조건 (0) | 2026.08.02 |
| Java 자릿수와 진법 변환: 숫자 합·10진수·2진수 원리 (0) | 2026.07.30 |
| Java 배열 문제 풀이: 조건 필터링·배수·정렬·가장 가까운 두 수 (0) | 2026.07.30 |
| Java 메서드 예제 3가지: 계산기·가운데 글자·거듭제곱 구현 (0) | 2026.07.30 |