조건문과 반복문
조건문 : 조건을 만족할때만 {}을 수행 (0~1번)
반복문 : 조건을 만족하는 동안 {}를 수행 (0~n번)
둘을 합해서 제어문 (flow control statement)이라고 한다
if문
조건식이 참(true)일 때, 괄호 {}안의 문장들을 수행한다.
if (조건식) {
//조건식이 참일 때 수행될 문장을 적는다
}
ex) if(score > 60) {
System.out.println("합격입니다");
}
조건식의 다양한 예
조건식 | 조건식이 참일 조건 |
90 <= x && x <= 100 | 정수 x가 90이상 100이하일때 |
x < 0 || x > 100 | 정수 x가 0보다 작거나 혹은 100보다 클 때 |
x%3 == 0 && x%2!=0 | 정수 x가 3의 배수지만, 2의 배수는 아닐 때 |
ch == 'y' || ch == 'Y' | 문자 ch가 'y' 또는 'Y'일 때 |
ch==' ' || ch=='\t' || ch=='\n' | 문자 ch가 공백이거나 탭 또는 개행문자일 때 |
'A' <= ch && ch <= 'Z' | 문자 ch가 대문자일 때 |
'a' <= ch && ch <= 'z' | 문자 ch가 소문자일 때 |
'0' <= ch && ch <= '9' | 문자 ch가 숫자일 때 |
str.equals("yes") | 문자열 str의 내용이 "yes"일때 (대소문자 구분) |
str.equalsIgnoreCase("yes") | 문자열 str의 내용이 "yes"일때 (대소문자 구분X) |
참고 : \가 백스페이스다 겉보기만 다를뿐 eclipse에서는 제대로 출력됨
블럭 {}
여러 문장을 하나로 묶어주는 것
if-else문
둘 중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리한다
if (조건식) {
//조건식이 참일 때 수행될 문장을 적는다.
} else {
//조건식이 거짓일 때 수행될 문장들을 적는다.
}
if-else-if문
여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
if (조건식1) {
//조건식 1의 연산결과가 참일 때 수행될 문장들
} else if (조건식2) {
//조건식 2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식 3) {
//조건식 3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { //마지막은 보통 else 블럭으로 끝나며, 생략 가능하다
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
중첩 if문 - if문 안의 if //중첩횟수에 제약은 없다
if (조건식1) {
//조건식 1의 연산결과가 참일 때 수행될 문장들을 적는다
if(조건식2) {
//조건식 1 과 2가 모두 true일 때 수행될 문장들
{ else {
//조건식 1 이 true이고 2가 false 일 때 수행되는 문장들
}
} else {
//조건식1이 false일 때 수행되는 문장들
}
//괄호의 중요성 : if else문은 가까운 것과 상호작용 하기 때문에 괄호를 치는게 좋다
switch문
조건문은 보통 if문을 쓰지만, 처리해야 하는 경우의 수가 많을 때 유용한 조건문이다
(if문은 참과 거짓일 경우를 여러번 연산해야 하기 때문)
*순서
1. 조건식을 계산한다
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
하지만, switch문은 제약이 있어 경우의 수가 많을 때 사용하면 좋음
if > switch 제약있음 if < switch 가능
switch (조건식)>정수 (혹은 문자열) {
case 값1 :
//
break; //switch문을 벗어난다
case 값2
//조건식의 결과가 값2와 같을 경우 수행될 문장들
break;
default : // else블럭과 같이 생략가능
//조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
switch문의 제약조건
switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며, 중복되지 말아야한다. //변수x
임의의 정수(실수) 만들기
난수 : Math.random()
for문(반복문)
조건을 만족하는 동안 블록 {}을 반복- 반복횟수를 알 때 사용하기 적합하다.
for (초기화;조건식;증감식) {
수행될 문장
}//조건식이 거짓일때까지 반복
ex)
for(int I=1;i<=5;I++) {
System.out.println(“I can do it”);
}
중첩 for문
for문 내에 또 다른 for문을 포함시킬 수 있다.
향상된 for문
배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록
for문의 새로운 문법이 추가되었다
for ( 타입 변수명 : 배열 또는 컬렉션) {
//반복할 문장
}
while문
조건을 만족시키는 동안 블록 {}을 반복 - 반복횟수를 모를 때 사용하기 적합하다.
while (조건식) {
//조건식의 연산결과가 참인 동안, 반복될 문장들을 적는다.
}
while문이 먼저 만들어졌기 때문에 for문과 바꿀 수 있지만, for문이 더 간결하다.
*while문의 조건식은 생략불가
무한 반복문 for문은 for(;;) for{}로도 무한반복이 가능하지만 while은 true 생략이 불가능하다.
do-while문
블록 {}을 최소한 한 번 이상 반복 – 사용자의 입력을 받을 때 유용하다
do {
//조건식의 연산결과가 참일 때 수행될 문장들을 적는다. (처음한번은 무조건 실행)
} while (조건식); //끝에 ';'를 붙이는게 중요하다
break문
자신이 포함된 하나의 반복문을 벗어난다
while(true) {
if(sum > 100)
break; //break문이 수행되면 이 밑의 부분을 실행하지 않고 벗어난다
++i;
sum += i;
}
무한 반복문에서는 조건문과 break문이 항상 같이 사용된다.
그렇지 않으면 프로그램이 종료되지 않을 것이다.
continue문
반복문 내에서만 사용될 수 있다.
자신이 포함된 반복문의 끝으로 이동 - 다음 반복으로 넘어간다
for문의 경우 증감식으로 이동하고 while문과 do-while문의 경우 조건식으로 이동한다.
전체 반복중에서 특정 조건시 반복을 건너뛸 때 유용하다
이름붙은 반복문
반복문에 이름을 붙여서 하나이상의 반복문을 벗어날 수 있다.
(break문은 근접한 단 하나의 반복문만 벗어날 수 있음)
중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써
하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.