[6 - 3, 4]
1. 문제설명
2. 나의 해답
package ex6_3;
public class Exercise6_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.name = "홍길동";
s.ban = 1;
s.no = 1;
s.kor = 100;
s.eng = 60;
s.math = 76;
System.out.println("이름 : " + s.name);
System.out.println("총점 : " + s.getTotal());
System.out.println("평균 : " + s.getAverage());
}
}
package ex6_3;
public class Student {
String name;
int ban;
int no;
int kor;
int eng;
int math;
public int getTotal() {
// TODO Auto-generated method stub
return this.kor + this.eng + this.math;
}
public float getAverage() {
// TODO Auto-generated method stub
float av = this.getTotal() / (float)3.0;
return (float) (Math.round(av * 10) / 10.0);
}
}
<고친코드>
public float getAverage() {
// TODO Auto-generated method stub
float a = this.getTotal() / 3f;
a *= 10; // 살릴 만큼 만 뽑아주기
a += 0.5f; // 반올림으로 마지막 자리수 반올림여부 결
float b = (int) a / 10f;
// 그외 소수점 작업 위해서 정수 형으로 변환 뒤
// 실수와 연산해서 다시 실수로 바꾸어주기
return b;
}
}
3. 정답 코드 ( 모범답안 )
public float getAverage() {
return (int)(getTotal() / 3f * 10 + 0.5f) / 10f;
}
4. 보충 및 회고
(1) 보충
1) f를 붙여서 강제 형 변환하기에 대한 체화가 필요하다
(2) 회고 : 문제풀이과정에서 어떻게 접근하려고했는지 (접근방법) + 어려움이 있었는데 해결했다.
1) 문제 풀이과정에서 당연하게도 소숫점 두번째 자리에서 반올림하고, 첫번째 자리만 남겨지게끔 하는 방식에서 어려움이 있었다.
우선 나의 구글링으로 도출한 방식은
Math.round() 메소드를 이용해서 정수형으로 반환하는 것을 이용했다.
- 이방식도 있지만 수동으로 남겨지게끔 하는 수까지 인위적으로 10의 자리로 곱하기 하면 가능하다.
- 그리고 반올림은 남겨진 수의 소숫점 첫재자리에 0.5를 더하면 반올림이 가능하다
- 남은 소수들을 없애주기 위해 정수형으로 형변환을 하면 된다,
2) 3f 와 (float)3.0 은 유사하다고 볼수있다.
3f가 리터럴을 이용한 형 변환이 흥미로웠다.
'문제풀이 > 자바' 카테고리의 다른 글
TIL - 자바의정석 연습문제[ch6 - 20] (0) | 2022.12.30 |
---|---|
TIL - 자바의정석 연습문제[ch6 - 5] (0) | 2022.12.27 |
TIL - 자바의정석 연습문제[ch6 - 1,2 ] (0) | 2022.12.27 |
TIL - 자바의정석 연습문제[ch5 - 4 ] (0) | 2022.12.20 |
TIL - 자바의정석 연습문제[ch4 - 1 ~ 10 /11 - 14 / 15 ] 완 (1) | 2022.12.09 |