◆ 제어문
- {} 불럭이라고 한다. 여러 문장을 묶어준다.
- 제어문은 특정 문장을 건너뛰게도 하고 특정 문장을 반복 실행하거나 프로그램의 흐름을 조절하는 역할.
구 분 제어문 선택문 if 문
if else 문
if else if 문
switch case 문반복문 for 문
while 문
do while 문보조 제어문 break 문
continue 문
◆ 조건문
1. if 문
문자 1; //문장1을 수행하고
if(조건문){ //if문 조건문을 검사하여 참이면
문장2; //문장2를 수행하고 문장3을 수행한다.
} //거짓이면 문장2를 건너뛰고 문장3을 수행한다.
문장3; //문장2 쪽에 문장이 1개이면 { }를 생략할 수 있다.
//{}가 없으면 ;으로 끝나는 한 문장만 수행한다.
// 절대값 구하기
int x = -5;
if(x < 0)
x = -x;
System.out.println("절대값=" + x); //절대값=5
2. if~else문
- 참일 때와 거짓일 때 각각 다른 문장을 수행하도록 지정할 수 있다.
문장1; //문장 1을 수행.
if(조건문){ //조건문 검사 결과가 참이면
문장2; //문장2를 수행하고 거짓이면
} else { //문장3을 수행하고 문장4를 수행한다.
문장3;
}
문장4;
int x = 5;
if(x % 2 == 1)
System.out.println(x + "는 홀수입니다.");
else
System.out.println(x + "는 짝수입니다.");
3. 다중 if~else문
- 여러 경우에서 하나의 처리를 선택할 경우
if(조건문1){ //if(조건문1)이 참이면 문장1을 수행하고 if문 밖에 다음 문장을 수행한다.
문장1; //거짓일 경우 조건문2를 검사해 참이면 문장2를 수행하고 if문 밖에 다음 문장 수행.
}else if(조건문2){ //조건문2도 거짓이면 조건문3을 검사한다. 이런 식으로 얼마든지 조건에 만족하지
문장2; //않을 경우 새로운 조건을 제시할 수 있다.
}else if(조건문3){
문장3;
}else{ //else{} 생략 가능하다. default condition이라고 한다.
문장 n;
}
다음 문장;
int score = 75;
if(score>=90){
System.out.println("A학점 입니다.");
}else if(score>=80){
System.out.println("B학점 입니다.");
}else if(score>=70){
System.out.println("C학점 입니다.");
}else if(score>=60){
System.out.println("D학점 입니다.");
}else{
System.out.println("F학점 입니다.");
}
//C학점 입니다.
4. 중첩 if문
- if문의 블록 내에 또 다른 if문 포함. 중첩의 횟수에는 거의 제한이 없다.
if(조건문1){ //if(조건문1)이 참이면 문장1을 수행하고
문장1;
if(조건문2){ //if(조건문2)를 수행해 참이면 문장2를 수행하고 거짓이면 문장3을 수행한다.
문장2;
}else{
문장3;
}
}else{ //else{} 생략 가능하다. default condition이라고 한다.
문장 4;
}
5. switch - case 문
- 하나의 조건식으로 많은 경우의 수를 처리할 수 있고 간결해서 알아보기 쉽다.
- switch문은 참이나 거짓의 결과를 반환하는 논리식이 아닌 정수식에 따라 분기.
- if - else if - else문을 사용할 때 복잡하고 번거로운 부분을 가독성 좋게 구현.
- 비교 조건이 특정 값이나 문자열인 경우 사용
- break문을 사용하여 각 조건이 만족되면 switch블록을 빠져나오도록 한다.
- 자바 14부터 좀 더 간결해진 표현식이 지원된다.(break 사용하지 않음)
switch(정수식){ //정수식에는 변수가 올 수도 있다.
case 정수값1 : //switch문은 (정수식)의 결과 값과 case 다음의 정수 값이 일치하는 것을 찾아서
문장1; //해당되는 행의 문장을 수행한다.
break;
case 정수값2: //case문의 정수 값은 각각 달라야 하며 case문의 정수 값의 순서는 크기의 순서와
문장2; //상관없이 임의의 순서로 나타내도 상관없다.
break;
.... //case문의 값이 switch문의 정수식과 일치하는 것이 없을 경우에 수행할 문장을
case 정수값n: //기술하는 default가 있으면 이는 생략 가능하다.
문장n;
break; //break문은 각 case문의 영역을 구분하는 역할을 하는데 break문을 생략하면
default: //case문 사이의 구분이 없어지므로 다른 break문을 만나거나 switch문{} 블록의
문장n+1; //끝을 만날 때까지 나오는 문장을 모두 수행한다.
}
//따라서, (정수식) or 변수를 case의 값과 비교하여 같은 값을 갖는 case구문의 실행문을(문장) 실행되고 break문을 만나 전체 switch문을 종료하고 빠져나오게 된다. 같은 값을 갖는 case가 없으면 default구문의 실행문이 실행된다.
- case문의 값을 정수, 상수만 가능하며 중복되지 않아야 한다.
case '1' : //문자 상수
case ONE : //정수 상수
case "YES" : //문자열 상수
case num : //error 변수 불가.
case 1.0 : //error 실수 불가.
- case문에서 case와 정수 부분에 공백이 없으면 논리 오류가 발생할 수 있으므로 주의한다.
- case 3: 대신 공백 없이 case3:이라고 붙이면 case문이 아닌 레이블을 생성한 것으로 취급하여 논리 오류가 발생.
int score = 75;
switch(score/10){
case 10:
System.out.println("A학점입니다.");
break;
case 9:
System.out.println("A학점입니다.");
break;
case 8:
System.out.println("B학점입니다.");
break;
case 7:
System.out.println("C학점입니다.");
break;
case 6:
System.out.println("D학점입니다.");
break;
default :
System.out.println("F학점입니다.");
}
//C학점입니다.
int score = 75;
switch(score/10){
case 10: //break문을 생략
case 9: //case 10: case9: 수행할 문장이 동일
System.out.println("A학점입니다."); //10과 9일때 A학점이다.
break;
case 8:
System.out.println("B학점입니다.");
break;
case 7:
System.out.println("C학점입니다.");
break;
case 6:
System.out.println("D학점입니다.");
break;
default :
System.out.println("F학점입니다.");
}
//C학점입니다.
6. Java14부터 지원되는 Switch Expression
- : 대신 간단하게 쉼표(,)로 조건 구분하고 ->를 쓴다.
- 문장이 여러 개인 경우 {}를 써준다.
- switch문이 끝나면 ;을 써준다. 문장에 끝을 알려주는 것이다.
- 식으로 표현하여 반환 값을 받을 수 있다. 리턴 값이 없는 경우 오류가 생김.
- yield 키워드 사용(return 같은 개념, 반환 값을 yield로 받는다.)
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("월을 입력:");
int month=scanner.nextInt();
String season=switch(month) {
case 3, 4, 5 ->{
System.out.println("현재의 계절은 봄입니다.");
yield "봄";
}
case 6, 7, 8 ->{
System.out.println("현재의 계절은 여름입니다.");
yield "여름";
}
case 9, 10, 11 ->{
System.out.println("현재의 계절은 가을입니다.");
yield "가을";
}
case 12, 1, 2 ->{
System.out.println("현재의 계절은 겨울입니다.");
yield "겨울";
}
default ->{
System.out.println("존재하지 않는 달입니다.");
yield "존재하지 않는 달";
}
};
System.out.println(month+"월은 "+season+"입니다.");
}
'프로그래밍 > Java' 카테고리의 다른 글
Java 배열(Array) (0) | 2021.09.06 |
---|---|
Java 제어문(반복문 (for, while, do while), 보조 제어문(break, continue)) (0) | 2021.08.15 |
JAVA(자바) 연산자(operator) (0) | 2021.08.13 |
Java 자료형과 변수, 형 변환 (0) | 2021.08.11 |
Java 기본 구조 (0) | 2021.08.11 |
댓글