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
'공부 > 자바 OOP' 카테고리의 다른 글
5월 22일 - 배열 2+연습문제 (0) | 2019.05.22 |
---|---|
5월 21일 - 배열 1 (0) | 2019.05.21 |
5월 21일 - while/ do~while 반복문+ 도형 + 연습문제 (0) | 2019.05.21 |
5월20일 - 반복문 For + 연습문제 (0) | 2019.05.20 |
5월 17일 - 자바OOP 1 : 연산자 (0) | 2019.05.16 |