- 자바 프로그램의 실행 흐름을 개발자가 원하는 방향으로 바꾸어주는 것이 제어문이다.
- 제어문은 조건식과 중괄호({}) 블록으로 구성되는데 조건식의 결과에 따라 블록 내부의 실행 여부가 결정된다.
조건문 - if, switch
- 주로 if문이 많이 사용된다. 처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이지만, switch문은 if문보다 제약이 많다.
1. if문
- 조건식이 true 일 때 중괄호({}) 블록이 실행되고 false 일 때는 중괄호({}) 블록이 실행되지 않는다.
if(조건식) {
// 조건식이 참 (true) 일 때 수행될 문장을 적는다.
}
- 조건식은 일반적으로 비교연산자와 논리연산자로 구성된다.
- 헷갈리는 조건식
조건식 조건식이 참일 경우
str.equals(“yes”) | 문자열 str의 내용이 “yes”일 때 (대소문자 구분) |
str.equalsIgnoreCase(“yes”) | 문자열 str의 내용이 “yes”일 때 (대소문자 구분안함) |
‘A’ ≤ ch && ch ≤ ‘Z’ | 문자 ch가 대문자일 때 |
‘a’ ≤ ch && ch ,=’z’ | 문자 ch가 소문자일 때 |
public void method1() {
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("정수값 입력 > ");
num = scanner.nextInt();
if (num % 2 == 0) {
System.out.printf("%d는(은) 짝수이다. \n", num);
}
if (num % 2 != 0) {
System.out.printf("%d는(은) 홀수이다. \n", num);
}
scanner.close();
}
2. if-else문
- 조건식이 true 일 때 if 문의 중괄호({}) 블록이 실행되고 false 일 때는 else 문의 중괄호({}) 블록이 실행된다.
if(조건식) {
// 조건식이 참 (true) 일 때 수행될 문장을 적는다.
} else {
// 조건식이 거짓 (false) 일 때 수행될 문장을 적는다.
}
- 두 개의 if문을 항상 if-else문으로 바꿀 수 있는 것은 아니다.
- if-else문 블럭 내의 문장이 하나뿐인 경우 괄호({})를 생략할 수 있다.
public void method2() {
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("정수값 입력 > ");
num = scanner.nextInt();
if (num % 2 == 0) {
System.out.printf("%d는(은) 짝수이다. \\n", num);
} else {
System.out.printf("%d는(은) 홀수이다. \\n", num);
}
scanner.close();
}
3. 중첩 if문
- 처리해야 할 경우의 수가 셋 이상인 경우에는 여러 개의 조건식을 쓸 수 있는 ‘if-else if’문을 사용하면 된다.
if(조건식1) {
// 조건식1이 참 (true) 일 때 수행될 문장을 적는다.
} else if (조건식2) {
// 조건식2이 참 (true) 일 때 수행될 문장을 적는다.
} else if (조건식3) {
// 조건식3이 참 (true) 일 때 수행될 문장을 적는다.
} else { // 마지막에는 보통 else블럭으로 끝나며, else블럭은 생략가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
public void method4() {
char ch = '\\u0000';
Scanner scanner = new Scanner(System.in);
System.out.println("문자 입력 > ");
ch = scanner.nextLine().charAt(0);
if((ch >= 'A') && (ch <= 'Z')) {
System.out.printf("%c는(은) 알파벳 대문자이다.", ch);
} else if((ch >= 'a') && (ch <= 'z')) {
System.out.printf("%c는(은) 알파벳 소문자이다.", ch);
} else {
System.out.printf("%c는(은) 알파벳이 아니다.", ch);
}
scanner.close();
}
public void method4() {
char ch = '\u0000';
Scanner scanner = new Scanner(System.in);
System.out.println("문자 입력 > ");
ch = scanner.nextLine().charAt(0);
if((ch >= 'A') && (ch <= 'Z')) {
System.out.printf("%c는(은) 알파벳 대문자이다.", ch);
} else if((ch >= 'a') && (ch <= 'z')) {
System.out.printf("%c는(은) 알파벳 소문자이다.", ch);
} else {
System.out.printf("%c는(은) 알파벳이 아니다.", ch);
}
scanner.close();
}
public void practice2() {
int num = 0;
char grade = ' ';
Scanner scanner = new Scanner(System.in);
System.out.print("점수 > ");
num = scanner.nextInt();
if (num >= 90) {
grade = 'A';
} else if (num >= 80) {
grade = 'B';
} else if (num >= 70) {
grade = 'c';
} else if (num >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.printf("당신의 점수는 %d점이고 등급은 %c입니다.", num, grade);
scanner.close();
}
4. switch문
1) switch문
- 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하다.
- switch 문은 조건식의 결과값이(계산식, 변수, 리터럴) 어떤 값(정수, 문자, 문자열)을 갖느냐에 따라서 실행문이 선택된다
- if 문과 다르게 코드를 실행하고 조건문을 빠져나가기 위해 break 문이 필요하다.
- 조건식을 계산한다
- 조건식의 결과와 일치하는 case문으로 이동한다.
- 이후의 문장들을 수행한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
- 조건식의 결과와 일치하는 case문이 하나도 없는 경우에는 default문으로 이동한다.
- default문 if문의 else블럭과 같은 역할을 한다.
switch(조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
break; // switch문을 벗어난다.
...
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
2) switch문의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 또는 상수만 가능하며, 중복되지 않아야 한다.
public void main(String [] arg){
int num, result;
final int ONE = 1;
...
switch(result) {
case '1': // OK, 문자 리터럴(정수 상수 49와 동일)
case 'ONE': // OK, 정수 상수
case "YES": // OK, 문자열 리터럴.
case num: // 에러, 변수는 불가
case 1.0: // 에러, 실수도 불가
...
}
}
public void method1() {
String fruit = "";
int price = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("과일 이름 > ");
fruit = scanner.nextLine();
switch(fruit) {
case "수박":
price = 8000;
break;
case "사과":
price = 1500;
break;
case "복숭아":
price = 2000;
break;
case "딸기":
price = 20000;
break;
default:
System.out.println("판매하지 않는 과일입니다.");
scanner.close();
return;
}
System.out.printf("%s의 가격은 %d원 입니다.", fruit, price);
scanner.close();
}
// 1 ~ 12월까지 입력받아서 해당하는 달의 마지막 날짜를 출력한다.
// 31일까지 존재하는 월 : 1, 3, 5, 7, 8, 10, 12
// 30일까지 존재하는 월 : 4, 6, 9, 11
// 28일까지 존재하는 월 : 2
public void method2() {
int month = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("1월 ~ 12월까지 중 하나를 입력하세요. >");
month = scanner.nextInt();
if(!(month >= 1 && month <= 12)) {
System.out.println("1 ~ 12월까지 입력하셔야 합니다.");
scanner.close();
return;
}
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("입력하긴 월은 31일까지 입니다.");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("입력하긴 월은 30일까지 입니다.");
break;
case 2:
System.out.println("입력하긴 월은 28일 혹은 29일까지 입니다.");
}
scanner.close();
}
/*
* 실습 문제 1
*
* 두 정수를 입력받고 연산자 기호(+, -, *, /)를 입력받아서 계산을 출력하라
* 단, + 또는 - 외의 문자를 입력하는 경우 "잘못 입력했습니다." 출력
*
* 예시)
* 첫 번째 수 > 3
* 두 번째 수 > 4
* 연산자 입력(+, -, *, /) > +
*
* 3 + 4 = 7
*
* 첫 번째 수 > 3
* 두 번째 수 > 4
* 연산자 입력(+, -, *, /) > a
*
* 연산자를 잘못 입력하셨습니다.
*/
public void practice() {
int num1 = 0;
int num2 = 0;
int result = 0;
char op = '\u0000';
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 수 > ");
num1 = scanner.nextInt();
System.out.print("두 번째 수 > ");
num2 = scanner.nextInt();
scanner.nextLine();
System.out.print("연산자 입력(+, -, *, /) > ");
op = scanner.nextLine().charAt(0);
System.out.println();
switch(op) {
case '+':
result = (num1 + num2);
break;
case '-':
result = (num1 - num2) ;
break;
case '*':
result = (num1 * num2) ;
break;
case '/':
result = (num1 / num2) ;
break;
default:
System.out.println("연산자를 잘못 입력하셨습니다.");
return;
}
System.out.printf("%d %c %d = %d", num1, op, num2, result);
}
'Java' 카테고리의 다른 글
배열(Array) - 다차원 배열 (0) | 2022.08.21 |
---|---|
배열(Array) - 배열(Array)이란? (0) | 2022.08.20 |
반복문(iteration statements) - for & while & do-while (0) | 2022.08.19 |
연산자(Operator) - 논리 연산자 & 그 외의 연산자 (0) | 2022.08.18 |
연산자(Operator) - 산술 연산자 & 비교 연산자 (0) | 2022.08.17 |