반응형
SMALL
■ 개요
오늘은 간단한 학생 성적 프로그램을 만들어 보았다.
기능은 아래와 같다.
아래에 보면 빅데시말과 라운딩 모드를 사용하기 위해 임포트를 해주었다.
import javax.print.attribute.standard.NumberUp;
import java.math.BigDecimal; //빅데시말
import java.math.RoundingMode; // 빅데시말 올림 컨트롤을 위한 라운딩모드
public class StudentTest2 {
public static void main(String[] args) {
Stud stud = new Stud("KimKunhwi",new int[] {90,93,81,85,80});
int Number = stud.getMarkNumber(); //배열의 수 체크
System.out.println("건휘의 점수 수 :" + Number); //배열 수 출력
int sum = stud.getMarkSum(); //점수합계
System.out.println("건휘의 점수 합계 :" + sum);
int markMax = stud.getMarkMax();
System.out.println("건휘의 제일 높은 점수 :" + markMax);
int markMin = stud.getMarkMin();
System.out.println("건휘의 제일 낮은 점수 :" + markMin);
BigDecimal avg = stud.avg();
System.out.println("건휘의 평균 :" + avg);
}
}
■기능
- 학생 성적의 개수를 알 수 있다.
- 학생 성적의 합계를 알 수 있다.
- 학생 성적의 최고점을 알 수 있다.
- 학생 성적의 최저점을 알 수 있다.
- 학생 성적의 평균을 알 수 있다.
■ 코드
String name; //학생이름
int[] marks; //성적 개수
Stud(String name,int[] marks){ //생성자
this.name = name;
this.marks = marks;
}
위 코드를 보면 먼저 학생의 이름과 성적을 알기 위해서 필드 변수를 선언해준 후 기본값을 세팅하기 위해서 생성자를 만들어 주었다.
특징은 학생의 성적을 관리하기 용이하게 학생의 성적을 배열로 선언해주었다는 것이다.
public int getMarkNumber(){
return marks.length; // 랭스 메서드로 배열 길이체크
}
위 코드에서는 성적의 개수를 알기 위해서 인트형을 리턴받는 인트형 메서드를 선언해주었다. 아래 메서드의 바디에는 성적의 길이를 반환하는 length 함수를 사용해 길이를 인트형으로 반환해주었다.
public int getMarkSum(){
int sum = 0; //기본값 세팅
for(int mark:marks){ //향상된 포문 사용 || int형으로 인자를 받아주며 marks에 배열만큼 반복
sum += mark; //sum = sum + mark || mark의 값들을 스택에 저장
}
return sum;
}
위 코드에서는 학생에 성적을 더하는 메서드를 선언하였다.
위 int sum = 0을 선언하여 학생의 성적을 더한 값을 담아줄 변수를 초기화해 선언해주었고, 향상된 포문을 사용해 배열을 순환한 후 배열의 값을 더해주고 그 값을 넣은 sum을 리턴해주었다.
public int getMarkMax(){ //90,72,81,85,80
int sum = Integer.MIN_VALUE; //정수의 최소값에서부터 비교 -2147483648
for(int mark:marks){
if(sum<mark){ //sum의 크기보다 marks 의 크기가 크면 true -> 포문안으로 들어가 sum에 현재 mark 배열에 담겨있는 값을 넣어준다.
sum = mark;
}
}
return sum;
}
위 코드는 학생의 성적 중 최고점을 찾아내는 메서드이다.
int sum에 Integer 타입에 최소값을 초기값으로 넣어주고 향상된 포문을 통하여 배열을 순환하면서 if문안에 조건을 검사한다. sum보다 mark가 크다면 mark에 값을 sum에 넣어주고 배열이 끝날 때 까지 이 작업을 반복한 후 최종값을 sum에 넣어주고 리턴해준다.
public int getMarkMin(){
int min = Integer.MAX_VALUE;
for(int mark:marks){
if(mark<min){
min = mark;
}
}
return min;
}
위 코드는 학생 성적의 최저점을 찾는 코드이다.
위 코드와 반대로 int min에 integer 타입의 최고값을 넣어주었다. 그 후 똑같이 향상된 포문을 사용해 배열을 순회하고 if문의 조건을 체크 후 mark 보다 min이 크다면 mim에 mark의 현재값을 넣어주고 배열이 끝날 때 까지 조건을 체크 한 후 최종값을 min에 넣어주고 리턴해주었다.
public BigDecimal avg(){ // 평균의 정확한 값을 구하기 위해 빅데시말 메서드를 사용하였다.
int sum = getMarkSum(); // sum 변수에 성적 +값 넣기
int num = getMarkNumber(); // Num 변수에 성적 개수넣기
return new BigDecimal(sum).divide(new BigDecimal(num),3, RoundingMode.UP);
//새로운 빅데시말에 sum을 넣고. divide 후 새로운 빅데시말에 num을 넣어줌 || 3자리 소수까지 표현 및 4자리 반올림
}
위 코드는 빅데시말을 사용하여 성적 평균을 나타내는 메서드이다.
빅데시말을 사용한 이유는 보다 정확한 평균 계산을 위한 용도이다. 빅 데시말은 자바내장 클래스 임으로 사용하고싶다면 임포를 해줘야하며 참조변수를 선언하고 인스턴트화를 시켜주어야한다.
//BIgDecimal 참조변수명 = new BigDecimal();
우선 int 타입 sum, num에 각각 getMarkSum() 메서드와 getMarkNumber() 메서드 의 값을 넣어주어 값을 초기화 해주었다 . 이때 sum과 num에는 성적종합과 성적의 개수가 들어간다.
그 후 값을 받아줄 빅 데시말을 return 값에 선언 후 작성해주었다.
코드 뒤편 "," 뒤에 오는 것은 왼쪽부터 소수점을 몇자리 까지 표현할 것 인지와 반올림을 할 것이라는 것이라 명시해 주는 것이다.
RoundingMode 도 사용지 Import를 해주어야한다.
< 출력값 >
건휘의 점수 수 :5
건휘의 점수 합계 :429
건휘의 제일 높은 점수 :93
건휘의 제일 낮은 점수 :80
건휘의 평균 :85.800
■ 마치며
누구나 쓸 수 있는 쉬운 코드이지만 자바를 정말 어려워하는 나에게 이런 코드하나를 완성 시킨 것은 아주 큰 경험이었다. 코드를 작성하며 스스로 자바 문법에 대해서 조금이 나마 알게 되었구나 깨닫게 되었고 아직 부족한 점이 많으니 꾸준히 정진하여 실력을 더 향상시켜야겠다고 다시금 다짐하게 되었다.
차후에는 더 어렵고 재미있는 코드도 스스로 짤 수 있는 실력이 되길 소망한다.
쉬운길은 없으니, 꾸준히 정진하자.
LIST
'Programming > issue' 카테고리의 다른 글
[ Docker ] 도커 이미지 빌드 시 requirements.txt 에서 오류 해결 (0) | 2024.06.13 |
---|---|
[Error] 404 Not Found (0) | 2022.07.29 |