제어문 블록이 실행 완료되었을 때 조건문은 정상 흐름으로 돌아오지만, 반복문일 경우는 제어문 처음으로 다시 되돌아가 반복 실행(루핑-looping)한다.
<for문>
주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문
- for문이 처음 실행될 때 초기화식(①)이 제일 먼저 실행됨
- 조건식(②)을 평가해서 true이면 for문 블록 내부의 실행문(③)을 실행하고,
false이면 for문 블록을 실행하지 않고 종료 - 블록 내부의 실행문(③)들이 모두 실행되면 증감식(④)을 실행하고 다시 조건식(②)을 평가
- 조건식(②)의 평가 결과가 true이면 실행문(③) → 증감식(④) → 조건식(②)으로 다시 진행하며,
false일 경우 for문 종료
public class ForPrintFrom1To10Example {
public static void main(String[] args) {
for(int i=1; i<=10; i++) {
System.out.println(i);
}
}
}
결과 :
* 초기화식 = 조건식과 실행문, 증감식에서 사용할 변수를 초기화하는 역할(필요 없을 경우 생략 가능)
* 초기화식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있음
--주의할 점--
for문 초기화식에서 루프 카운터 변수를 선언할 때 부동 소수점을 쓰는 float타입 사용 금지
이유 : 0.1은 float타입으로 정확하게 표현할 수 없기 때문에 10번 반복으로 선언해도 9번만 돌게 됨.
public class ForFloatCounterExample {
public static void main(String[] args) {
for(float x=0.1f; x<=1.0f; x+=0.1f) {
System.out.println(x);
}
}
}
결과 :
<중첩 for문>
for문 안에 또 다른 for문을 내포한 것.
→ 바깥쪽 for문이 한 번 실행할 대마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아감
ex) 구구단 출력
public class ForMultiplicationTableExample {
public static void main(String[] args) {
for (int m=2; m<=9; m++) {
System.out.println("*** " + m + "단 ***");
for (int n=1; n<=9; n++) {
System.out.println(m + " x " + n + " = " + (m*n));
}
}
}
}
결과 :
<while문>
조건식이 true일 경우에 계속해서 반복
조건식에는 boolean타입 변수나 true/false 값을 산출하는 어떠한 연산식이든 가능함
만약 조건식에 true를 사용하면 무한 루프 발생
- while문이 처음 실행될 때 조건식(①)을 평가
- 평가 결과가 true이면 실행문(②)을 실행
- 실행문(②)이 모두 실행되면 조건식으로 되돌아가서 다시 조건식(①)을 평가
- 조건식이 true이면 실행문(②) → 조건식(①)으로 다시 진행
- 조건식이 false라면 while문 종료
public class WhileSumForm1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i<=100) {
sum += i;
i++;
}
System.out.println("1~" + (i-1) + " 합 : " + sum);
}
}
결과 :
* 이때, 계속 누적되는 값을 갖는 루프 카운터 변수는 while문이 시작하기 전에 미리 선언해야 함
<do-while 문>
조건식에 의해 반복 실행한다는 점에서는 while문과 동일하지만,
블록 내부의 실행문을 우선 실행하고 실행 결과에 따라 반복 실행을 계속할지 결정하는 점에서 다르다.
- do-while문이 처음 실행될 때 실행문(①)을 우선 실행
- 실행문(①)이 모두 실행되면 조건식(②)을 평가
- 조건식의 결과가 true이면 실행문(①) → 조건식(②)과 같이 반복 실행
- 조건식의 결과가 false이면 do-while문 종료
--주의할 점--
작성 시 while() 뒤에 반드시 세미콜론(;)을 붙여야 함
<break문>
반복문인 for문, while문, do-while문의 실행을 중지할 때 사용
switch문에서도 break문 사용하여 switch문 종료
break문의 실행 흐름으로 대개 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용
public class BreakExample {
public static void main(String[] args) throws Exception {
while(true) {
int num = (int)(Math.random()*6) + 1; //대충 랜덤 수를 뽑는 함수
System.out.println(num);
if(num == 6) {
break;
}
}
System.out.println("프로그램 종료");
}
}
결과 :
* 반복문이 중첩된 경우 가장 가까운 반복문만 종료 → 바깥쪽 반복문까지 종료시키려면 라벨(Label) 사용
public class BreakOutterExample {
public static void main(String[] args) throws Exception {
Outter: //Label
for(char upper='A'; upper<='Z'; upper++) {
for(char lower='a'; lower<='z'; lower++) {
System.out.println(upper + "-" + lower);
if(lower=='g') {
break Outter;
}
}
}
System.out.println("프로그램 실행 종료");
}
}
결과 :
<continue문>
반복문인 for문, while문, do-while문에서만 사용
블록 내부에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동
반복문을 종료하지 않고 계속 반복을 수행한다는 점이 break문과 다른 점
break문과 마찬가지로 대개 if문과 같이 사용(특정 조건 만족 시 그 이후의 문장을 수행하지 않고 다음 반복으로 넘어감)
public class ContinueExample {
public static void main(String[] args) throws Exception {
for(int i=1; i<=10; i++) {
if(i%2 != 0) {
continue;
}
System.out.println(i);
}
}
}
결과 :
'프로그래밍언어 > Java' 카테고리의 다른 글
05-2. 배열 (0) | 2021.01.19 |
---|---|
05-1. 참조 타입과 참조 변수 (0) | 2021.01.18 |
04-1. if문, switch문 (0) | 2021.01.11 |
03-2. 연산자의 종류 (0) | 2021.01.08 |
03-1. 연산자와 연산식 (0) | 2021.01.05 |