조건이 참(true)인 동안 반복 수행
주로 '반복 횟수'나 '값의 비교의 결과' 에 따라 true
, false
판단
ex. 달리는 자동차, 일정 횟수 만큼 돌아가는 나사못, 특정 온도까지 가동되는 에어컨 etc...
반복 횟수만큼 반복
수행문을 수행하기 전 조건을 체크하고, 그 조건의 결과가 true
인 동안 반복 수행
프로그램에서 반복 횟수가 명확하지 않을 때 사용
초기식→ 조건식→ 반복 수행문→ 증감식→. . . →조건식→ 반복 수행문→ 증감식
조건 만큼, 반복 횟수 만큼 반복!
초기식;
while (조건식) {
반복 수행문;
증감식;
}
int sum = 0;
int i = 1;
while (i <= 10) {
if(i % 2 == 0) {
sum = sum + i;
System.out.println(i);
}
i++;
}
System.out.println(sum); // 55 출력
증감식을 누락했거나, 조건식을 잘못 기술하는 실수에서 발생
고의로 무한 루프 사용할 때도 있음
예 : 종료할 때까지 계속 간단한 채팅을 입력받는 예제
Scanner input = new Scanner(System.in);
// 무한 루프 반복문
while (true) {
System.out.println("메시지 입력 후 Enter를 치세요.(종료할 때는 'quit')");
String message = input.nextLine();
if(message.equals("quit")) {
// 읽은 메시지가 quit일 때 반복문 탈출
break;
}
System.out.println("입력한 메시지 : " + message);
}
// Scanner 종료
input.close();
조건과 상관 없이 한번은 수행문을 수행
for 문과 while 문 → 처음 평가된 조건식의 결과가 거짓이면 ? 한 번도 실행되지 않음😨
❗ 이를 보완하기위해 만든 것이 do ~ while 문 ❗
while 문은 조건을 먼저 체크하고 반복 수행
do-while 문은 조건과 상관 없이 수행을 한 번 하고나서 조건을 체크
조건이 맞지 않으면(true 가 아니면) 더 이상 수행하지 않음
초기식;
do {
반복 수행문;
증감식;
} while (조건식);
입력받는 모든 숫자의 합을 구하는 예제
입력이 0이 되면 반복을 그만하고 합을 출력
Scanner scanner = new Scanner(System.in);
int input;
int sum = 0;
do {
input = scanner.nextInt();
sum += input;
} while(input != 0);
System.out.println(sum);
반복하는 횟수를 알고 있는 경우 사용
for (초기식; 조건식; 증감식;) {
반복 수행문;
}
int sum = 0;
for (int i = 1; i <= 10; i++) {
if(i % 2 == 0) {
sum = sum + i;
}
}
System.out.println("짝수 합계 " + sum); // 30 출력
i+1 과 i++은 다르다
i+1 자체는 i 값이 증가되지 않음
대입연산자 i++
를 사용해야 값이 증가함
예
int i = 0;
System.out.println(i + 1); // 1
System.out.println("i + 1한 i의 실질적인 값은? " + i); // 0
System.out.println(++i); // 1
System.out.println("++i한 i의 실질적인 값은? " + i); // 1
System.out.println(i++); // 1
System.out.println("i++한 i의 실질적인 값은? " + i); // 2
<출력결과>
1
i + 1한 i의 실질적인 값은? 0
1
++i한 i의 실질적인 값은? 1
1
i++한 i의 실질적인 값은? 2
반복문 안에 반복문 안에 반복문. . .
반복문 내부에 또 다른 반복문이 있음
여러 겹으로 반복문을 겹쳐서 구현 가능
단, 수행시간에 문제가 발생할 수 있음
외부 반복문과 내부 반복문 간의 변수 값 변화에 유의 하며 구현
for (초기식; 조건식; 증감식;) {
for (초기식; 조건식; 증감식;) {
반복 수행문;
}
}
초기식;
while (조건식) {
초기식;
while (조건식) {
반복 수행문;
증감식;
}
}
int dan = 2;
int count = 1;
for( dan = 2; dan <= 9; dan++) {
for(count = 1; count <=9; count++) {
System.out.println( dan + "X" + count + "=" + dan * count);
}
System.out.println();
}
int dan = 2;
int count = 1;
while( dan <= 9 ) {
count = 1;
while (count <= 9) {
System.out.println( dan + "X" + count + "=" + dan * count);
count++;
}
dan++;
System.out.println();
}
2X1=2
2X2=4
2X3=6
2X4=8
2X5=10
2X6=12
2X7=14
2X8=16
2X9=18
.
.
.
9X1=9
9X2=18
9X3=27
9X4=36
9X5=45
9X6=54
9X7=63
9X8=72
9X9=81
제어문의 블록을 빠져 나오는 기능
break;
조건문 switch
문 에서도 사용 가능
→ 특정 case
문을 실행하고 switch
블록 바깥으로 제어를 이동
반복문에서는 주로 조건문(if)와 같이 사용
→ 조건이 참이면, 반복 수행을 멈추고 탈출!
여러 반복문이 중첩되어 있는 경우
→ break
문이 포함되어 있는 반복문만 빠져 나옴
bk: for (int i = 1; i <= 10; i++) {
System.out.println("<for문 시작>");
for (int j = 1; j <= 10; j++) {
System.out.println("(for문 2 시작)");
System.out.println(j);
System.out.println(i);
if (j > i) {
System.out.println("if문 내부");
System.out.println(j);
System.out.println(i);
break bk;
}
System.out.println("-");
}
System.out.println("(for문 2 끝)"); // 이 코드는 실행되지 않음
}
System.out.println("<for문 끝>");
if 문 안에서 break
되는 bk
는 가장 바깥에 있는 for 문이다.
두번째 for 문을 반복해서 실행하다가, 내부의 if 문에서 가장 바깥에 있는 반복문을 탈출하므로
System.out.println("(for문 2 끝)");
은 실행되지 않는다.
continue 이후 코드는 실행 안해! 반복문 처음으로 돌아가!
반복문에서는 주로 조건문(if)와 같이 사용
→ 조건이 참이면, 반복문 블럭 내부의 다른 코드를 수행하지 않고 처음으로 돌아감
break 와 동일한 점
→ 프로그램의 수행을 중단시킴
break 와 다른 점
→ continue 이후에 작성된 실행을 중단하는 것 뿐, break 처럼 반복문 자체를 종료시키지는 않음
int num;
for( num = 1; num <= 10; num++) {
if( (num % 3) != 0) continue; // println()을 실행하지 않고, for문을 다시 반복
System.out.println(num); // 3의 배수만 출력
}
<출력>
3
6
9
while
조건이 참인 동안 반복 수행
조건이 맞지 않으면? 수행되지 않음사용할 때 👉 조건식의 결과 or 변수가 true false 값인 경우
do while
조건이 참인 동안 반복 수행
수행문do
를 먼저 수행하고 조건 체크!사용할 때 👉 조건식의 결과 or 변수가 true false 값인 경우
for
초기화, 조건체크, 증감 순
사용할 때 👉 특정 수의 범위 및 횟수 관련 등 반복되는 경우, 배열과 함께 많이 사용
🤧 자바의 기초 중의 기초지만 핵심이라고 할 수 있는 제어문 정리가 끝났다!