본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의정석1-5 조건문

by 이쟝 2021. 12. 29.

조건문과 반복문

조건문: 조건을 만족할 때만 { }를 수행(0~1) – ifswitch

반복문: 조건을 만족하는 동안 { }를 수행(0~n) – forwhile

조건문과 반복문은 실행 흐름을 바꿔 주기 때문에 제어문(flow control statement)라고 함


if

조건식이 참(true)일 때, 괄호{ }안의 문장들을 수행한다.

if (조건식 {

    // 조건식이 참(true)일 때 수행될 문장들을 적는다.

}

-> 조건식에는 true 아니면 false

조건식 조건식이 참일 조건
90 <= x && x <= 100 정수 x90이상 100이하일 때
x < 0 || x > 100 정수 x0보다 작거나 100보다 클 때
x%3 == 0 && x%2!=0 정수 x3의 배수지만, 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();