본문 바로가기

공부/자바 OOP

5월 17일 - 제어문 + QUIZ(if, switch)

 1. 제어문

 

의미 : 프로그램의 흐름을 제어한다

대표적인 제어문 :

  - 조건문 : if, switch~case

  - 반복문 : for, while, do~while

명령어 : break, continue

 

-1) 조건문 if

 

  if(조건) { 조건이 true일때만 수행 }

  if(조건) { 조건이 true일때만 수행 }

   else { 조건이 false일때 수행 } 

 

  if(조건) { 조건이 true일때만 수행 } 

   else  if(조건) { 조건이 true일때만 수행 }

   else  if(조건) { 조건이 true일때만 수행 }

   else  if(조건) { 조건이 true일때만 수행 }  // 조건 계속 중첩 가능

   else { 조건이 false일때 수행 } // 나머지 처리할 때, 생략가능

예시)

String name="무궁화";
int kor=70, eng=85, mat=50;
		
//평균
int aver=(kor+eng+mat)/3;
		
System.out.println("이름 : "+name);
System.out.println("국어 : "+kor);
System.out.println("영어 : "+eng);
System.out.println("수학 : "+mat);
System.out.println("평균 : "+aver);

//평균이 95점 이상이면 "장학생" 출력하시오
		
if (aver>=95) {
    System.out.println("넌 장학생");
}//if end
	else {
		System.out.println("넌 바보");
	}//if end
		
//국어점수가 70이상이면 "합격"
//아니면 "불합격"
		
if (kor>=70) {
	System.out.println("국어 : 합격");
	}  else {
		   System.out.println("국어 : 불합격");
	}//if end
//수학점수가 90이상이면 "A학점"
//수학점수가 80이상이면 "B학점"
//수학점수가 70이상이면 "C학점"
//수학점수가 60이상이면 "D학점"
//수학점수가 나머지이면  "F학점"
		
//내가 한 것 
if (mat>=90) {
	System.out.println("수학 : A학점");
	} else if (mat>=80&&mat<90) {
			System.out.println("수학 : B학점");
	} else if (mat>=70&&mat<80) {
			System.out.println("수학 : C학점");
	} else if (mat>=60&&mat<70) {
			System.out.println("수학 : D학점");
	} else  {
			System.out.println("수학 : F학점");
	}//if end
		
//선생님 답 
//mat의 변수가 숫자이므로 첫 if절의 범위의 숫자는 배제한 후 else로 넘어간다
//첫 if의 비교연산자에서 걸러서 내려오므로 
if (mat>=90) {
	System.out.println("수학 : A학점");
	} else if (mat>=80) {
			System.out.println("수학 : B학점");
	} else if (mat>=70) {
			System.out.println("수학 : C학점");
	} else if (mat>=60) {
			System.out.println("수학 : D학점");
	} else  {
			System.out.println("수학 : F학점");
	}//if end

 

문) 평균이 70점이상이면 "합격"
     (단, 국영수 과목 중에서 한 과목이라도 40미만이면 "재시험"
     나머지 무조건 "불합격"

 

-내가 푼 방법

if (aver>=70&&kor>=40&&eng>=40&&mat>=40) {
	System.out.println("축하 합격");
} else if (aver>=70&&(kor<40||eng<40||mat<40)) {
	System.out.println("무궁화 재시험 봐야대");
} else if(aver<70) {
	System.out.println("불합격");
}//if end

-선생님이 푼 방법

if(aver>=70)
{
  //1)OR 조건
  if(kor<40||eng<40||mat<40){
     System.out.println("결과:재시험");
  } else {
     System.out.println("결과:합격");
}
   //2)AND 조건
   if(kor>=40&&eng>=40&&mat>=40)
{
      System.out.println("결과:합격");
   }else{
      System.out.println("결과:재시험");
}
	}else{
	   System.out.println("결과:불합격");
}//if end

 

-2) 조건문 switch~case문/ break문

 

의미 : 제시하는 값과 동일한 값을 찾아서 수행

실수형, 논리형 등은 사용할 수 없다.

//case 뒤에 있는게 경우 수(10, 20, 30) , 이 경우수와 switch의 값(50)이 동일한 케이스를 찾아 수행

//수행한 후 break를 만나면 end로 빠져나옴
//case 뒤에 정수밖에 안됨

//경우수의 값을 나열하는 경우 반드시 순차적이지 않아도 된다.

//스위치 값이 해당하는 케이스 값이 존재하지 않는다면 default로 넘어감 

//default는 와도 되고 , 안와도 됨.

 

//case문에 break가 없다면, 빠져나오지 못한다.

//스위치값이 20이라면 먼저 case20 JEJU를 읽고 밑의 케이스, 브레이크있는 케이스까지 읽어준 다음 

//빠져나온다.

 

문제) 평균점수에 따라서 A, B, C, D, E, F학점을 출력하시오

int kor=95, eng=90, mat=80;
int aver=(kor+eng+mat)/3;
    System.out.println("평균 : "+aver+"점");
		
switch(aver/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;
case 5 : System.out.println("F학점"); break;
}//switch end

스위치문에는 연산식을 넣을 수 있지만, 케이스 뒤에는 연산식을 넣을 수 없다.

그러므로 스위치문에 연산을 정리한 후, 해당되는 케이스로 이동해야 한다.

여기서 평균을 정리하는 방법은 100,99,98,97...... 각 십의 자리로 케이스를 표현,

스위치에 에버값을 10으로 나눈 후 십의 자리 앞자리로 케이스에 넣어 성립시키면 된다.

->출력된 값 : B학점

 

**(if, switch) QUIZ**

-문제를 풀 때엔 먼저 분석을 한 다음 차례대로 코딩하기 

문1) 임의의 수가 양수, 음수, 제로인지 출력하시오 
int a=-3;

내가 푼 것 

int a=-3;
if (a>0) {
	System.out.println(a+":양수");
} else if (a==0) {
	System.out.println(a+":제로");
} else if (a<0) {
	System.out.println(a+":음수");
}//if end

-> 정답 ! 


문2) 코드값에 따라 성별을 출력하시오

//짝수 여자, 홀수 남자

int code=4;

내가 푼 것

int code=4; //짝수 여자, 홀수 남자
if (code%2==0) {
	System.out.println("성별:여자");
} else if (code%2==1) {
	System.out.println("성별:남자");
}//if end

선생님이 푼 것

int code=4;

//성별 나눠서 
if(code==1 || code==3) {
	System.out.println("남자");
}else if(code==2||code==4){
	System.out.println("여자");
}//if end

//짝홀수 방법
int code=4;
switch(code%2){
	case 0: System.out.println("여자"); break;
	case 1: System.out.println("남자"); break;
}//switch end

성별나눠서 & 짝홀수나눠서 두가지방법으로 진행

-성별나눠서 : 남자는 1,3 여자는 2,4 코드로 확정하에 진행

-짝홀수나눠서 : 2로 나눴을때 나머지가 0 은 여자

                                       나머지가 1 은 남자


문3) 연산기호에 따라 결과값을 출력하시오

//-> 출력결과 : op 변수에 따라 결과값이 다름 ,이 경우 5+7=12
//          ->5+7=12,  5-7=-2,  5*3=15,  5/7=0.17,   5% 7=5

int c=5, d=7;
char op='+';

내가 푼 것 

int c=5, d=7; 
char op='%';
		
switch (op) {
	case '+' : System.out.println(c+d); break;
	case '-' : System.out.println(c-d); break;
	case '*' : System.out.println(c*d); break;
	case '/' : System.out.println(c/d); break;
	case '%' : System.out.println(c%d); break;
}//switch end

선생님이 푼 것

int c=5, d=7; 
char op='+';
	
int res1      =0;    //정수 결과값
double res2=0.0; //실수 결과값
		
switch(op){
	case '+' : res1=c+d; break;
	case '-' : res1=c-d; break;
	case '*' : res1=c*d; break;
	case '/' : res2=(double)c/d; break;
	case '%' : res1=c%d; break;
}//switch end
		
	if(op=='/'){
		System.out.println(c+" "+op+" "+d+"="+res2);
	}else{
		System.out.println(c+" "+op+" "+d+"="+res1);
	}

 


문4) 문제2의 코드를 참조해서 나이를 계산하시오

//태어난 년도 10 

//19xx는 남자1 여자2 , 20xx은 남자3 여자4

//code 1,2 일때 19xx , code 3,4일때 20xx

//2019-년도 수 

int myYear=10;

내가 푼 것

int myYear=10;
int code1=4;
		
switch (code1){
	case 1 : System.out.println(2019-(myYear+1900)); break;
	case 2 : System.out.println(2019-(myYear+1900)); break;
	case 3 : System.out.println(2019-(myYear+2000)); break;
	case 4 : System.out.println(2019-(myYear+2000)); break;		
}//switch end

성별코드의 정확한 명명이 부족

스위치문의 케이스 1,2 와 케이스 3,4 는 중복계산인데 굳이 할 필요없었움,

결과는 나왔지만, 확실히 딱 나온건 아님 어정쩡,, 

 

선생님이 푼 것 

int myYear=10; //태어난 년도
switch (code){
	case 1 : 
	case 2 : myYear=1900+myYear ; break;
	case 3 : 
	case 4 : myYear=2000+myYear ; break;
}//switch end
		
int myAge = 2019-myYear;
	System.out.println("나이:"+myAge);

그냥 선생님은 천재임 

문제 2의 성별코드를 참조하여 그 code를 불러와서 사용하는 것 

스위치문의 특성상 break가 안걸려있다면 밑으로 내려가는 성질을 이용하여 중복되어 있는 내용은 지운다 ! 

먼저 스위치문으로 태어난 년도를 계산 후 나이계산식에 대입하여 나이 계산하기 

 

 

<과제>

 문제) 운행거리에 따라 택시 요금을 계산하는 프로그램
         2000m까지는 기본요금 900원이고,
         2000m초과 운행시 200m단위마다 
         기본요금에 100원씩 가산하여 요금을 계산한다 

 예) 운행거리 : 1600
      요금 : 900
 예) 운행거리 :2900
      요금 : 900 + 200*5 = 1900

 


 초과거리-2000=y

y%200

y는 무조건 200의 단위로 움직인다

200..200...200...

y=(more-2000)/200

 

0-200=100

201-400=200

401-600=300

601-800=400