[Java] 반복문 - for, while, do-while, break, continue
by Choi HyeSun
반복문
-
어떤 작업이 반복적으로 수행되도록 할 때 사용
-
for문, while문, do-while(while 변형문)문이 있음
-
주어진 조건을 만족하는 동안 주어진 문장을 반복적으로 수행
-
조건식 포함
-
true ; 반복
-
false ; 반복하지 않음
-
do-while문은 1번 이상 반복
-
for/while은 0번 이상 반복
-
for/while은 구조와 기능이 유사하여 어느 쪽을 선택해도 좋음
-
for는 보통 반복횟수를 알고있을 때 사용
for문 : 정의
-
반복 횟수를 알고 있을 때 적합
-
구조가 조금 복잡할 수 있지만 직관적이라 이해하기 쉬움
-
for(초기화;조건식;증감식) 형태
-
중첩 가능
for문 : 형태(초기화, 조건식, 증감식)
-
초기화
-
반복문에 사용될 변수를 초기화, 처음 한 번만 수행
-
둘 이상의 변수가 필요할 경우 콤마’,’로 구분하여 변수를 여러개 초기화 할 수 있음(단, 타입은 같아야 함)
ex) int i = 1, j = 2; -
for문에 사용되는 변수가 적은 것이 더 효율적이고 간단하므로 변수들의 관계를 잘 파악하여 불필요한 변수의 사용을 줄이는 것이 좋음
-
-
조건식
-
true/false로 결과를 반환하는 식
-
잘못 작성하면 무한 루프에 빠질 수 있기 때문에 유의하여 작성
-
-
증감식
-
반복문을 제어하는 변수의 값을 증가 또는 감소
-
++, --, +=, -= 등 사용
-
초기화와 마찬가지로 둘 이상 콤마’,’로 연결해서 사용 가능
-
-
초기화, 조건식, 증감식 모두 생략이 가능함
-
필요하지 않으면 생략을 할 수 있으며, 모두 생략도 가능
-
단, 모두 생략한 경우 조건식은 참(true)으로 고정
-
Enhanced for Statement (향상된 for문)
-
JDK 1.5부터 제공
-
배열과 컬렉션에 저장된 요소에 접근할 때 편한 방법
-
초기화 변수 타입은 배열 또는 컬렉션 요소의 타입이어야 함
-
배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장됨
-
반복문에서는 이 변수를 이용한 문장을 수행
-
일반적인 for문보다 간결함
-
일반적인 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다는 제약
for (타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
for문 예제
-
예제 1. 기본적인 for문
-
- 초기화 → 2. 조건식 → 3-1 (참) 문장 수행 → 4. 증감식 → 2. 조건식 → (반복) → 3-2 (거짓) Pass
-
for (초기화; 조건식; 증감식) {
// 조건식이 참(true)일 때 수행될 문장들을 적음
}
- 예제 2. 중첩 for문
for (초기화A; 조건식A; 증감식A) {
// 조건식A가 참(true)일 때 수행될 문장들을 적음
for (초기화B; 조건식B; 증감식B) {
// 조건식A가 참(true)이고
// 조건식B가 참(true)일 때 수행될 문장들을 적음
}
}
- 예제 3. 블럭 내 문장이 1개라면 괄호 생략 가능. 단, 가독성 주의
// 1
for (초기화A; 조건식A; 증감식A) {
for (초기화B; 조건식B; 증감식B) {
// 조건식A가 참(true)이고 조건식B가 참(true)일 때 수행될 문장들을 적음;
}
}
// 2. 중첩 for문 안의 문장이 1개기때문에 괄호 생략
for (초기화A; 조건식A; 증감식A) {
for (초기화B; 조건식B; 증감식B)
// 조건식A가 참(true)이고 조건식B가 참(true)일 때 수행될 문장들을 적음;
}
// 3. 바깥 for문에게는 중첩 for문 전체가 하나의 문장(;)이므로 바깥쪽도 생략 가능
for (초기화A; 조건식A; 증감식A)
for (초기화B; 조건식B; 증감식B)
// 조건식A가 참(true)이고 조건식B가 참(true)일 때 수행될 문장들을 적음;
-
예제 4. (주의) for문 뒤에 ;를 붙이면 for문은 {} (빈 블럭)을 인식하고, 그 아래 블럭은 블럭으로 인식되서 그냥 한 번 수행
- 1 == 2 == 3
// 1
for (초기화; 조건식; 증감식); {
System.out.println("wow");
}
// 2
for (초기화; 조건식; 증감식) {
}
{
System.out.println("wow");
}
// 3
for (초기화; 조건식; 증감식) {
}
System.out.println("wow");
while문
-
for문에 비해 구조가 간단
-
조건식이 ‘참(true)’인 동안, 블럭 { } 내의 문장을 반복
-
for과 다르게 조건식을 생략할 수는 없음
-
-
항상 참이 되려면 true를 넣어줄 것
-
사용할 변수의 초기화는 while문 인입 전 해줘야함
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장
}
/* 사용 예 */
int i = 0; // 초기화 - while 위해서
while (i < = 10) { // 조건식
System.out.println(i); // 실행할 문장
i++; // 증감식
}
/* 사용 예 - 조건식에 증감식을 넣을 수 있음
* 단, 전위형 후위형 구분해서 사용할 것
* 전위형 : 값을 증감한 후 계산
* 후위형 : 값을 계산한 후 증감
*/
while (++i < 10);
while (i-- < 10);
do-while문
-
그리 많이 쓰지 않지만, 반복적으로 사용자의 입력을 받아서 처리할 때 유용
-
while문의 변형으로, 기본적인 구조는 while과 같고 조건식과 블럭{ }의 순서를 바꾸어 둔 것
- 최소한 한 번은 수행됨
do {
// 조건식의 연산결과가 참일 때 수행될 결과를 적음, 시작할땐 무조건 참으로 시작
} while (조건식); // 끝에 ; 꼭!! 붙여야 함
break문
-
반복문에서도 switch문을 사용할 수 있음
-
자신이 포함된 가장 가까운 반복문(블럭)을 벗어남
-
무한 반복문에서는 조건문과 break문이 항상 같이 사용
- 그렇지 않으면 무한 루프에 빠지기 때문에 프로그램이 종료되지 않음
while(조건식A) {
if(조건식B) {
break; // 요게 (가장 가까운 반복문인)조건식 A를 탈출시킴
}
i++;
a += 1;
}
continue문
-
반복문 내에서만 사용 가능
-
반복 중 Continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어감
-
for : 증감식으로 이동
-
while / do-while : 조건식으로 이동
주의) 증감식이 continue 아래에 있다면 무한 루프에 빠지게 됨
-
-
break와 차이점
-
break : 조건문 탈출
-
continue : 조건문의 현재 조건을 끝내고 다음 조건을 확인하러 감
-
-
전체 반복 중 특정 조건을 만족하는 경우를 제외하고자 할 때 유용함
while(조건식A) {
if(조건식B) {
continue; // 요게 아래를 진행하지 않고 다음 조건으로 진행시킴
}
i++;
a += 1;
}
반복문에 이름 붙이기(with break & continue)
-
break와 continue는 가장 근접한 반복문에 대해서 적용됨
-
반복문에 이름을 붙일 경우 break와 continue에 이름을 명시해주면, 해당 반복문에 대해 적용 가능
-
이름 붙이는 법 : for문이나 while문 앞에 이름:를 붙임
-
방법 1. 이름: 조건문
-
방법 2. 이름:
조건문
-
// for문에 Loop1 이름 붙여주기
Loop1 : for(초기화A;조건식A;증감식A) {
for(초기화B;조건식B;증감식B) {
if(조건식1) {
break; // 조건식B를 쓰는 for문 탈출
} else if(조건식2) {
break Loop1; // 조건식A를 쓰는 for문 탈출
} else if(조건식3) {
continue; // 조건식B의 현재 조건을 마무리하고 증감식B로 이동
} else {
continue Loop1; // 조건식A의 현재 조건을 마무리하고 증감식A로 이동
}
//수행문장
}
}
// while문에 outer 이름 붙여주기
outer:
while(true) {
}
Subscribe via RSS