국비 3일차_2

강지수·2023년 12월 14일
0

국비교육

목록 보기
6/97

이전의 코드를 압축적으로 표현하기

		int intScore=(int) ((Math.random()*50)+50);
		System.out.println(intScore);

중첩 if 문

		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의 배수

강사님도 즉석에서 문제를 만들고 즉석에서 풀면서 설명하다보니 자주 틀리고 고치고 하는 경향이 있음. 정보를 모른다 / 못가르친다 의 개념을 떠나서 강의스타일이 그러함.


미션


내 분석 결과

profile
개발자 준비의 준비준비중..

0개의 댓글