Java Standard - 조건문과 반복문
...
프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문 이라고하는데, 이 제어문에는 조건에 따라 다른 문장이 수행되도록하는 조건문과 특정 문장들을 반복해서 수행하는 반복문이 있다.
조건문 if, switch
- 조건문
- 조건식의 연산 결과에 따라 실행할 문장이 달라져 프로그램의 실행흐름을 변경할 수 있다.
- 구성
- 조건식, 블럭
{}
if 문
- 의미
- 만일(if) 조건식이 참
true
이면 괄호 안의 문장을 수행하라.
1
2
3
if(조건식){
참이면 수행할 문장들
}
블럭
{}
괄호{}
를 이용해 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 블럭이라고 한다. 만약 블럭 내에 문장이 하나뿐 일 때에는 생략할 수 있다.
if-else문
- 의미
- 만일(if) 조건식이 참
true
이면 if블럭 안의 문장을 수행하고, 거짓false
라면 else블럭안의 문장을 수행하라.
1
2
3
4
5
if(조건식){
참이면 수행할 문장들
}else{
거짓이면 수행할 문장들
}
if-else if 문
- 의미
- 첫 번째 조건식부터 순서대로 평가해 결과가 참인 조건식을 만나면, 해당 블럭만 수행하고 if-else if문 전체를 벗어난다.
1
2
3
4
5
6
7
8
9
if(조건식1){
조건식1이 참이면 수행할 문장들
}else if(조건식2){
조건식1이 거짓이면서, 조건식2가 참이면 수행할 문장들
}else if(조건식3){
조건식1도 조건식2도 거짓이면서, 조건식3가 참이면 수행할 문장들
}else{
모든 조건식이 거짓인 경우 수행할 문장들
}
중첩 if문
- 의미
- if문 내에 또 다른 if문을 포함시키는 것을 중첩if문 이라고 한다.
1
2
3
4
5
6
7
8
9
10
if(조건식1){
//조건식1이 참이면 수행할 문장들을 적는 공간
if(조건식2){
조건식1과 조건식2 모두가 참이면 수행할 문장들
}else{
조건식1은 참이고 조건식2는 거짓이면 수행할 문장들
}
}else{
조건식1이 거짓이면 수행할 문장들
}
switch 문
- 의미
- if문은 조건식의 결과가
true
,false
두가지 밖에 못다루기 때문에 경우의 수가 많아질수록 else-if를 추가해야 하므로 복잡해진다.- switch문은 이와 달리 단 하나의 조건식으로 많은 경우의 수를 처리한다. 단 제약조건이 존재한다.
- 순서
- 조건식을 계산한다.
- 조건식에 결과와 일치하는 case문으로 이동한다.
- 이후 문장들을 수행한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
- 조건식에 결과와 일치하는 case문으로 이동한다.
- 특징
- 결과와 일치하는 case문이 하나도 없는 경우 default문으로 이동한다.
- break문이 없는 경우, switch문 블럭의 끝을 만날 때까지 모든 문장을 수행한다.
- case문은 한 줄에 하나씩써도, 한 줄에 붙여서 써도 상관없다.
- switch문은 중첩이 가능하다.
- break문이 없는 경우, switch문 블럭의 끝을 만날 때까지 모든 문장을 수행한다.
- 제약조건
- 조건식의 결과값이 반드시 정수여야한다.
- case문의 값 역시 정수여야하며, 중복되지 않아야한다.
- case문의 값은 반드시 상수여야한다. (변수X, 실수 리터럴X)
- case문의 값 역시 정수여야하며, 중복되지 않아야한다.
반복문 for, while, do-while
반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용된다. do-while은 무조건 최소한 한 번은 수행될 것을 보장하고, for과 while은 한 번도 수행되지 않을 수 있다. 반복문은 조건을 만족하는 동안 주어진 문장들을 반복적으로 수행하므로 조건식을 포함한다.
for 문
for문은 반복 횟수를 알고 있을 때 적합하다.
구조와 수행순서
1
2
3
for(초기화;조건식;증감식){
조건식이 참일 때 수행될 문장들
}
- 초기화
- 반복문에 사용되는 변수를 초기화하는 부분
- 처음에 한번만 수행
- 둘 이상의 변수가 필요시 콤마
,
를 구분자로 초기화(두 변수의 타입은 같아야함) - 처음에 한번만 수행
- 조건식
- 참
true
이면 반복을 계속하고, 거짓false
이면 반복을 중단- for의 뜻이 ‘~하는 동안’ 이므로, ‘참
true
인 동안’ 계속한다고 생각 - for의 뜻이 ‘~하는 동안’ 이므로, ‘참
- 증감식
- 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식
- 변수의 값이 증감식에 의해 점진적으로 변하다가 결국 거짓
false
이 되어 반복문을 벗어남 - 변수의 값이 증감식에 의해 점진적으로 변하다가 결국 거짓
- 특징
- 초기화, 조건식, 증감식은 필요하지 않으면 생략할 수 있으며, 모두 생략하는 것도 가능하다.
- 모두 생략하면, 참
true
로 간주되어 무한루프가 된다.- 중첩이 가능하다.
- 모두 생략하면, 참
향상된 for 문
1
2
3
for(타입(요소의 타입) 변수명: 배열 또는 컬렉션){
반복할 문장
}
배열 또는 컬렉션의 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다.
while 문
구조와 수행순서
1
2
3
while(조건식){
조건식의 결과가 참true인동안 반복할 문장들
}
- 조건식을 평가해 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭내의 문장을 실행
- 다 실행한 후 조건식으로 돌아간다
- 조건식이 거짓이 될 때까지 반복한다.
- 특징
- 조건식 생략 불가
- 무한루프를 하기 위해서는 조건식에
true
를 넣으면 된다. - 무한루프를 하기 위해서는 조건식에
do-while문
while문과 같으나 조건식과 블럭의 순서를 바꿔놓은 것으로, 블럭을 먼저 수행한 후 조건식을 평가한다.
구조와 수행순서
1
2
3
do{
조건식의 결과가 참true인동안 반복할 문장들
}while(조건식);
- 특징
- while의 조건식 다음
;
을 잊지 않아야한다.- 최소 한번은 수행될 것을 보장한다.
break문
자신이 포함된 가장 가까운 반복문을 벗어난다.
continue문
반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
반복문 전체를 벗어나지 않고, 다음 반복을 계속 수행한다는 점이 break문과 다르다
이름 붙은 반복문
중첩 반복문 앞에 이름을 붙이고 break문과 continue문으에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너 뛸 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Loop1 : for(int i=2; i<=9;i++){
for(int j=1;j<=9;j++){
if(j==5){
break Loop1;
break;
continue Loop1;
continue;
}
System.out.prinln(i+"*"+j+"="=i*j);
//continue
}
//break
System.out.prinln();
//continue Loop1
}
//break Loop1
가장 바깥에 for문에 Loop1
이라는 이름을 붙였을때, if
에서 break
시와 continue
시 어디 위치로 가는지를 주석으로 표시했다.