조건문과 반복문
조건문: 조건을 만족할 때만 { }를 수행(0~1번) – if와 switch
반복문: 조건을 만족하는 동안 { }를 수행(0~n번) – for와 while
조건문과 반복문은 실행 흐름을 바꿔 주기 때문에 제어문(flow control statement)라고 함
if문
조건식이 참(true)일 때, 괄호{ }안의 문장들을 수행한다.
if (조건식 {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
}
-> 조건식에는 true 아니면 false
조건식 | 조건식이 참일 조건 |
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”일 때(대소문자 구분 안함) |
if – else 문
둘 중의 하나 – 조건식이 참일 때와 거짓일 때로 나눠서 처리
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
if – else if 문
여러 개 중의 하나 – 여러 개의 조건식을 포함한 조건식
if (조건식1) {
// 조건식1이 참(true)일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2가 참일 때 수행될 문장들을 적는다.
} else {
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
<예제 코드>
입력값으로 점수를 받고 90점보다 크면 A, 80점보다 크거나 같으면 B, 70점보다 크거나 같으면 C, 그 외의 D학점을 출력
int score = 0; //점수를 저장하기 위한 변수 초기화
char grade = ' '; // 학점을 저장하기 위한 변수 공백으로 초기화
System.out.println("점수를 입력하세요: ");
Scanner sc = new Scanner(System.in);
score = sc.nextInt(); // 화면을 통해 입력받은 숫자를 score에 저장
if (score >= 90) { //score가 90점 보다 같거나 크면 A학점
grade = 'A';
} else if (score >= 80) { //score가 80점 보다 같거나 크면 B학점
grade = 'B';
} else if (score >= 70) { //score가 70점 보다 같거나 크면 c학점
grade = 'C';
} else { //나머지는 D학점
grade = 'D';
}
System.out.println("당신의 학점은 "+grade+"입니다.");
sc.close();
중첩 if문 – if문 안의 if
if (조건식1) {
// 조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if(조건식2) {
// 조건식1과 조건식2가 모두 true일 때 수행될 문장들
} else {
// 조건식1이 true이고, 조건식2가 false일 때 수행되는 문장들
}
} else {
// 조건식1이 false일 때 수행되는 문장들
}
<예제 코드>
위의 예제 코드에서 A+과 A- / B+과 B-를 출력(if문 안의 if를 통해)
int score = 0; //점수를 저장하기 위한 변수 초기화
char grade = ' ', opt = '0';
System.out.print("점수를 입력하세요.>");
Scanner sc = new Scanner(System.in);
score = sc.nextInt(); // 화면을 통해 입력받은 숫자를 score에 저장
System.out.printf("당신의 점수는 %d입니다.%n", score);
if (score >= 90) { //score가 90점 보다 같거나 크면 A학점
grade = 'A';
if (score >= 98) { //90점 이상 중에서도 98점 이상은 A+
opt = '+';
} else if(score < 94) { //90점 이상 94점 미만 A-
opt = '-';
} //변수 opt를 선언할 때 이미 '0'으로 초기화 되어서 else 블럭 필요xx
} else if (score >= 80) { //score가 80점 보다 같거나 크면 B학점
grade = 'B';
if (score >= 88) {
opt = '+';
} else if(score < 84) {
opt = '-';
}
} else if (score >= 70) { //score가 70점 보다 같거나 크면 c학점
grade = 'C';
} else { //나머지는 D학점
grade = 'D';
}
System.out.println("당신의 학점은 "+grade + opt+"입니다.");
//System.out.printf("당신의 학점은 %c%c입니다. %n", grade, opt);
sc.close();
switch 문
처리해야 하는 경우가 많을 때 유용한 조건문
1) 조건식을 계산한다.
2) 조건식의 결과와 일치하는 case문으로 이동한다.
3) 이후의 문장들을 수행한다.
4) break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
switch (조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
// …
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
// …
break;
default : -> default값은 생략가능
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
// …
If문과 Switch문의 차이
1) if문의 조건식에는 true 아니면 false / switch문의 조건식에는 정수 아니면 문자열!
2) if문은 여러 조건식이 나온다. switch는 조건식을 한 번만 계산하면 됨
-> switch문은 항상 if문으로 바꿀 수 있음 if문은 switch문으로 바꿀 수 있을 때도 있고 없을 때도 있음
switch문의 제약조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다. (상수 xx)
int num, result;
final int ONE = 1;
...
switch(result) {
case '1': // OK. 문자 리터럴(정수 49와 동일)
case ONE: // OK. 정수 상수
case "YES": // OK. 문자열 리터럴. JDK 1.7부터 허용
case num: // 에러. 변수는 불가
case 1.0: // 에러. 실수도 불가
System.out.print("현재 월을 입력하세요.:");
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month) {
case 3:
case 4:
case 5:
System.out.println("봄입니다.");
break;
case 6: case 7: case 8:
System.out.println("여름입니다.");
break;
case 9: case 10: case 11:
System.out.println("가을입니다.");
break;
default: //case 1: case 2: case 12:
System.out.println("겨울입니다.");
sc.close();
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석1-7 배열 (0) | 2021.12.30 |
---|---|
자바의 정석1-6 반복문 (0) | 2021.12.29 |
자바의 정석1-4 타입 변환과 연산자(operator) (0) | 2021.12.28 |
자바의 정석1-3 화면 입출력 (0) | 2021.12.28 |
자바의 정석1-2 변수, 기본형과 참조형 (0) | 2021.12.28 |