함수로 성적표 만들기
학생 한명을 메모리에 25번 올리는것/학생의 등수를 구하려면 합계,평균를 구해야함-메서드로 만들기
리턴타입을 받는다는 의미란? 외부에서 필요한 정보는 받는것(나에게 없는것)
1. 설계도
package e_oop.score2;
public class Student {
int kor;
int eng;
int math;
int sum;
double avg;
String name;
int rank;
void createRandomScore(){ // 국, 영, 수 함수에 랜덤값 넣기
kor = (int)(Math.random() * 101);
eng = (int)(Math.random() * 101);
math = (int)(Math.random() * 101);
}
int getSum(){//합계 함수
return sum = kor + eng + math;
}
double getAverage(){//평균 함수
return avg = Math.round(getSum() / 3.0 * 100) / 100.0;
}
int getRank(Student[] students){//석차 함수
rank = 1;
for(int i = 0; i < students.length; i++){
if(getSum() < students[i].getSum()){
rank++;
}
}
return rank;
}
String getInfo(){//출력함수
return name + "\t" + kor + "\t" + eng + "\t" + math + "\t" + sum + "\t" + avg + "\t" + rank;
}
}
2.출력
package e_oop.score2;
public class Score {
public static void main(String[] args) {
String[] studentNames =
{ "강나영", "강동환", "강태영", "곽지훈", "김서윤"
, "김영훈", "김진석", "김충신", "박슬기", "박채린"
, "손영태", "손영흔", "안정연", "이선우", "이수보"
, "이주홍", "이중호", "임현정", "장유진", "정신애"
, "조수경", "조하영", "조혜민", "허민정", "박지은"};
Student[] students = new Student[studentNames.length]; //배열 생성
for(int i = 0; i < students.length; i++){
students[i] = new Student(); //객체생성? 학생객체를 배열에 넣고 배열안에서 메소드를 호출.
// Student s = new Studnet();와 같음 담는 공간이 변수 s에서 배열로 바뀌었을뿐임
students[i].name = studentNames[i];
students[i].createRandomScore();
students[i].getSum();
students[i].getAverage();
//s.createRandomScore()
//s.getSum();
//s.getAverage(); 와같음.
}
for(int i = 0; i < students.length; i++){
students[i].getRank(students);
}
//석차순 정렬
for(int i = 0; i < students.length - 1; i++){
int min = i;
for(int j = i + 1; j < students.length; j++){
if(students[j].rank < students[min].rank){
min = j;
}
}
Student temp = students[i];
students[i] = students[min];
students[min] = temp;
}
//과목별 합계, 평균
int[] sums = new int[3];
for(int i = 0; i < students.length; i++){
sums[0] += students[i].kor;
sums[1] += students[i].eng;
sums[2] += students[i].math;
}
double[] avgs = new double[3];
for(int i = 0; i < avgs.length; i++){
avgs[i] = Math.round((double)sums[i] / students.length * 100) / 100.0;
}
//출력
System.out.println("이름\t국어\t영어\t수학\t합계\t평균\t석차");
for(int i = 0; i < students.length; i++){
System.out.println(students[i].getInfo());
}
System.out.print("과목합계");
for(int i = 0; i < sums.length; i++){
System.out.print("\t" + sums[i]);
}
System.out.print("\n과목평균");
for(int i = 0; i < avgs.length; i++){
System.out.print("\t" + avgs[i]);
}
}
}