객체지향 함수로 성적표 만들기

조수경·2021년 9월 27일
0

JAVA

목록 보기
11/26

함수로 성적표 만들기

  학생 한명을 메모리에 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]);
	      }
	   }

}
profile
신입 개발자 입니다!!!

0개의 댓글