[JAVA/자바] 제어문 - 조건문 / 반복문 / 분기문
조건문
프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 조건에 따라 다른 문장이 수행되도록 함
* 선택적으로 실행시키고자 할 때 사용
* "조건식"을 통해 참이냐 거짓이냐를 판단해서 참일 경우 그에 해당하는 코드 실행
* 조건식의 결과 true / false 여야 한다
* 조건문은 크게 if문과 switch문으로 나뉨!
* 보통 조건식에서는 비교 연산자 (대소, 동등), 논리 연산자 (&&, ||)를 주로 사용
* 기본자료형들끼리 동등 비교 시에는 ==, != 사용 가능 (정상적으로 비교됨)
단, 참조자료형은 동등 비교 시 ==, != 사용 시 정상적으로 비교가 안됨 (ex. String)
=> equals() 메소드를 이용해서 비교해야 됨
[표현법] 문자열.equals(문자열);
- if문
if(조건식1) {
수행될 문장;
} else if(조건식2) {
수행될 문장;
}else if(조건식3) {
수행될 문장;
} else {
수행될 문장;
}
- if
[표현법]
if(조건식) {
a
}
조건식의 결과 값이 true면 a의 내용 실행
false면 실행하지 않음
> 예시
if(num > 0) {
System.out.println("양수입니다.");
}
- if ~ else
[표현법]
if(조건식) {
a
} else {
b
}
조건식의 결과 값이 true면 a의 내용 실행
false면 b의 내용 실행
> 예시
if(num % 2 == 0) {
System.out.println("짝수");
} else {
System.out.println("홀수");
}
- if ~ else if ~ else
(같은 비교 대상으로 여러 개의 조건을 제시해야 될 경우)
[표현법]
if(조건식1) {
a
} else if(조건식2) {
b
} else {
c
}
조건식1의 결과 값이 true면 a의 내용 실행
조건식2의 결과 값이 true면 b의 내용 실행
모두 false면 c의 내용 실행
* if는 true, false와 상관없이 조건절 실행,
if ~ else if ~ else는 조건문이 true면 이후 조건은 실행하지 않음
* else 생략 가능
> 예시
if(month ==1 || month == 2 || month == 12) {
season = "겨울";
} else if(month >= 3 && month <= 5) {
season = "봄";
} else if(month >= 6 && month <= 8) {
season = "여름";
} else if(month >= 9 && month <= 11) {
season = "가을";
} else {
season = "해당하는 계절이 없습니다.";
}
- 중첩 if
[표현법]
if(조건식1) {
if(조건식2) {
if(조건식3) {
수행될 문장;
} else if(조건식4) {
수행될 문장;
} else {
수행될 문장;
} else {
수행될 문장;
}
} else if(조건식5) {
수행될 문장;
} else {
수행될 문장;
}
> 예시
if(month ==1 || month == 2 || month == 12) {
season = "겨울";
if(temperature <= -15) {
season += "한파 경보";
} else if(temperature <= -12) {
season += "한파 주의보";
}
} else if(month >= 3 && month <= 5) {
season = "봄";
} else if(month >= 6 && month <= 8) {
season = "여름";
if(temperature >= 35) {
season += "폭염 경보";
} else if(temperature >= 33) {
season += "폭염 주의보";
}
} else if(month >= 9 && month <= 11) {
season = "가을";
} else {
season = "해당하는 계절이 없습니다.";
}
- switch문
switch(조건식) {
case 값1:
수행될 문장;
break;
case 값2:
수행될 문장;
break;
default:
수행될 문장;
}
조건식 하나로 많은 경우의 수를 처리할 때 사용하며
이때 조건식의 결과는 정수 또는 문자, 문자열
조건식의 결과 값과 일치하는 case문으로 이동
default문은 일치하는 case문이 없을 때 수행 (= else)
switch문은 동등 비교로 밖에 수행되지 않음
실행할 구문만 실행하고 자동으로 빠져나오지 못함!
=> 직접 break;문 작성해야 됨
*default : 위에 값들과 모두 일치하지 않을 경우 실행할 코드 (생략 가능)
> 예시
switch(num % 5) {
case 1 :
team = "1조";
break;
case 2 :
team = "2조";
break;
case 3 :
team = "3조";
break;
case 4 :
team = "4조";
break;
default :
team = "다시";
}
반복문
프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
* 반복문은 크게 for문과 while문으로 나뉨!
- for문
- for
[표현법]
for (초기식; 조건식; 증감식) {
수행될 문장;
}
1회전 : 초기식 확인 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음
2회전 : 증감식 연산 후 조건식 확인
조건식이 true면 문장 수행
조건식이 false면 수행하지 않음
* 2회전 이상부터는 모두 2회전과 동일하고
조건식이 false가 나올 때까지 문장 수행
- 초기식 : 반복문이 수행될 때 "처음에 단 한 번만 실행되는 구문"
(보통 반복문 안에서 사용될 변수를 선언 및 초기화하는 구문)
- 조건식 : "반복문이 수행될 조건"을 작성하는 구문
(보통 초기식에 제시된 변수를 가지고 조건식을 작성함)
- 증감식 : 반복문을 제어하는 변수 값을 증감시키는 구문
(보통 초기식에 제시된 변수를 가지고 증감 연산자(++, --)를 사용함)
* for문 안에 초기식, 조건식, 증감식 각각 생략 가능하긴 함 ( 단, ; ; 은 반드시 필수)
=> for (; ;) => 무한 수행
> 예시
for (int i = 1; i <= 5; i++) {
System.out.println(i + "출력");
}
> 실행 결과
1 출력
2 출력
3 출력
4 출력
5 출력
- 중첩 fol문
[표현식]
for (초기값1; 조건식1; 증감식1) {
수행될 문장1;
for (초기값2; 조건식2; 증감식2) {
수행될 문장2;
}
수행될 문장3;
}
for문에 진입하면 수행될 문장1을 먼저 수행하고 두 번째 for문에 진입하면
조건식2가 false가 될 때까지 수행될 문장2를 수행 후 나오면
수행될 문장3을 수행하고 조건식1로 돌아와 true면 다시 반복
for (초기값1; 조건식1; 증감식1) {
수행될 문장1;
for (초기값2; 조건식2; 증감식2) {
수행될 문장2;
break;
}
수행될 문장3;
[break;]
}
두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 문장3을 수행 후
다시 첫 번째 for문을 실행하지만
마지막 break가 있다면 수행될 문장3을 수행 후 for문을 완전히 빠져나감
- while문
- while
[표현법]
초기식; (생략가능)
while (조건식) {
수행될 문장;
증감식; (생략가능)
}
조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식
다시 확인 후 true면 수행,
조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
* { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
* for문과 다른 점
초기식 값을 출력할 수 있다
> 예시
int i = 1;
while (i <= 5) {
System.out.println(i + " 출력");
i++;
}
> 실행 결과
1 출력
2 출력
3 출력
4 출력
5 출력
- do ~ while
[표현법]
do {
수행될 문장;
[증감식 or 분기문];
} while (조건식);
do 안의 내용 먼저 실행
조건식 확인 후 true면 문장 수행,
false면 종료
while 뒤에 ; 꼭 필요
* while과 do ~ while의 차이점
do ~ while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행
* { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
> 예시
int i = 1;
do {
System.out.println(i + "출력");
i++
} while (i <= 5);
> 실행 결과
1 출력
2 출력
3 출력
4 출력
5 출력
분기문
- break
반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
* switch문의 break;와의 차이점
switch문의 break;는 switch문만을 빠져나가는 구문
> 예시
for (int i = 1;; i++) {
System.out.println(i + " 출력");
if (i >= 5) {
break;
}
}
- continue
반복문 내에서만 사용 가능하며 반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행
* for문의 경우 증감식으로 이동,
while (do ~ while)문의 경우 조건식으로 이동
* 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
> 예시
for (int i = 1; i <= 5; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i + " 출력");
}