이전의 코드를 압축적으로 표현하기
int intScore=(int) ((Math.random()*50)+50);
System.out.println(intScore);
int score = (int) ((Math.random() * 50) + 50);
System.out.println(score);
// 중첩 조건문
if (score >= 90) {
if (score >= 95) {
System.out.println("A+");
} else {
System.out.println("A");
}
} else if (score >= 80) {
if (score >= 85) {
System.out.println("B+");
} else {
System.out.println("B");
}
} else if (score >= 70) {
if (score >= 75) {
System.out.println("C+");
} else {
System.out.println("C");
}
} else if (score >= 60) {
if (score >= 65) {
System.out.println("D+");
} else {
System.out.println("D");
}
} else {
System.out.println("F");
}
결과
60
D
if 문 안에 if / else 를 중첩해서 넣을 수 있다.
반복 문장 제거
// 반복 구간 제거
int score = (int) ((Math.random() * 50) + 50);
System.out.println(score);
String grade="";
if (score >= 90) {
if (score >= 95) {
grade="A+";
} else {
grade="A";
}
} else if (score >= 80) {
if (score >= 85) {
grade="B+";
} else {
grade="B";
}
} else if (score >= 70) {
if (score >= 75) {
grade="C+";
} else {
grade="C";
}
} else if (score >= 60) {
if (score >= 65) {
grade="D+";
} else {
grade="D";
}
} else {
grade="F";
}
System.out.println(grade);
결과
65
D+
반복되는 출력문을 1개로 압축시킴.
미션
500~1000 사이의 값을 random으로 입력받아
grade를 (char 타입) A, B, C, D, F 로 나누어 출력하세요.
100 단위로 끊어서 평가, 중첩없이
내가 짠 코드
int gradeNum=(int) ((Math.random()*500)+500);
char grade;
if (gradeNum>=900) grade='A';
else if (gradeNum>=800) grade='B';
else if (gradeNum>=700) grade='C';
else if (gradeNum>=600) grade='D';
else grade='F';
System.out.println(grade);
결과
C
왜 char 타입으로 해야 하는지, string과의 차이점은 무엇인지 궁금했는데,
같이 강의듣는 학우분 말로는 나중에 data량이 많아지게 되면 변수의 data 타입에 따라 메모리 용량을 조절해야 할 필요가 있는데, 이럴 때 char 타입으로도 처리 가능한 data를 string 타입으로 처리하게 되면 쓸데없이 낭비되는 용량이 많아지기 때문에 용량조절할 때 그러한 부분이 필요하다는 comment를 남겨주셨다.
+char 초기화 시 ASCII코드 상에서 0 = NULL 이기때문에 0을 넣어줘야 함
강사님의 코드
int score=(int)(Math.random()*500)+500;
System.out.println(score);
char grade=' ';
if(score>=900) {
grade='A';
} else if(score>=800) {
grade='B';
} else if(score>=700) {
grade='C';
} else if(score>=600) {
grade='D';
} else {
grade='F';
}
System.out.println("grade:"+grade+"등급");
결과
636
grade:D등급
미션
Math를 통해 int형으로 ranNum 받기
범위 : 0 ~ 1000
짝수인지 홀수인지 구분해서 출력하세요
int ranNum=(int)(Math.random()*1000);
System.out.println(ranNum);
String result="";
if (ranNum%2==0) {
result="짝수";
} else {
result="홀수";
}
System.out.println(result);
결과
818
짝수
강사님의 코드
int ranNum=(int)(Math.random()*1000);
System.out.println(ranNum);
if (ranNum%2==0) {
System.out.println("짝수");
} else {
System.out.println("홀수");
}
결과
721
홀수
미션
+ 위의 조건 + 3의 배수인지 5의 배수인지
int ranNum=(int)(Math.random()*1000);
System.out.println(ranNum);
String result1="";
String result2="";
if (ranNum%2==0) {
result1="짝수";
} else {
result1="홀수";
}
System.out.println(result1);
if (ranNum%3==0) {
result2="3의 배수";
if (ranNum%5==0) {
result2="3의 배수이면서 5의 배수";
}
} else if (ranNum%5==0) {
result2="5의 배수";
}
else {
result2="3의 배수도, 5의 배수도 아님";
}
System.out.println(result2);
결과
555
홀수
3의 배수이면서 5의 배수
강사님의 코드 1
int ranNum=(int)(Math.random()*1000);
System.out.println(ranNum);
String result2="홀수";
String result3="3의 배수 아님";
String result5="5의 배수 아님";
if(ranNum%2==0) {
result2="짝수";
}else if (ranNum%3==0) {
result2="3의배수";
}else if (ranNum%5==0) {
result2="5의배수";
}
System.out.println("숫자:"+ranNum+" : "+result2+","+result3+","+result5);
결과
555
숫자:555 : 3의배수,3의 배수 아님, 5의 배수 아님
틀림
위와 같은 식으로 else if 를 사용하게 되면 첫번째 if 충족시 다음 if문에 들어가지 않고 아예 밖으로 나와버리기 때문에 원하는 방향의 진행이 어렵다.
강사님의 코드 2
int ranNum=(int)(Math.random()*1000);
System.out.println(ranNum);
String result2="홀수";
String result3="3의 배수아님";
String result5="5의 배수아님";
if(ranNum%2==1) {
result2="짝수";
}if(ranNum%3==0) {
result3="3의 배수";
}if(ranNum%5==0) {
result5="5의 배수";
}
System.out.println("숫자:"+ranNum+" : "+result2+","+result3+","+result5);
결과
620
숫자:620 : 홀수,3의 배수아님,5의 배수
강사님도 즉석에서 문제를 만들고 즉석에서 풀면서 설명하다보니 자주 틀리고 고치고 하는 경향이 있음. 정보를 모른다 / 못가르친다 의 개념을 떠나서 강의스타일이 그러함.
미션
내 분석 결과