JAVA/HomeWork

학생리스트정렬 Comparable과 Comparator

lavender1122 2024. 1. 20. 17:16
public class HomeWork1 {
	/*
	 * 학번(문자열), 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를 멤버로 갖는
	  Student클래스를 만든다.
	  생성자는 학번, 이름, 국어, 영어, 수학 점수만 매개변수로 받아서 처리한다.
	  
	  이 Student객체들은 List에 저장하여 관리한다.
	  List에 저장된 데이터들을 학번의 오름차순으로 정렬하여 출력하는 부분과
	  총점의 역순으로 정렬하는 부분을 프로그램 하시오.

	  (총점이 같으면 학번의 내림차순으로 정렬되도록 한다.)//조건
	  (학번 정렬기준은 Student클래스 자체에서 제공하도록 하고,
	   총점 정렬기준은 외부클래스에서 제공하도록 한다.)
	 */
	public static void main(String[] args) {
		List<Student> s = new ArrayList<Student>();
		//list 타입으로 s에 담기
		s.add(new Student("1", "홍길동", 98, 70, 100));
		s.add(new Student("4", "이순신", 40, 75, 95));
		s.add(new Student("3", "성충향", 10, 50, 70));
		s.add(new Student("2", "변학도", 70, 90, 80));
		s.add(new Student("5", "강감찬", 98, 70, 100));
		
		
		//List 타입에 합계 출력
		Student student1  = s.get(4);
	      int ex  = student1.getSum();
	      System.out.println(ex);
		
		for(int i=0; i<s.size(); i++) {
	         int cnt = 1;
	         for(int j=0; j<s.size(); j++) {
	            if(s.get(i).getSum()<s.get(j).getSum()) {
	               cnt++;
	            }
	            s.get(i).setRank(cnt);
	         }
	      }
	      
		System.out.println("정렬전 :");
		for (Student student : s) {
			System.out.println(student);
		}
		
		Collections.sort(s);// 오름차순 정렬하기 
		System.out.println("학번 오름차순");
		for (Student student : s) {
			System.out.println(student);
		}
		System.out.println("(╯°□°)╯︵ 🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵ 🖥️(╯°□°)╯︵ 🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵ 🖥️");
		
		Collections.sort(s, new SortNumDesc());//점수별로 내림차순
		
//		for (int i = 0; i < s.size(); i++) { //미숙
//	         int Rank = i+1;
//	         s.get(i).setRank(Rank);
//	      }
		System.out.println("점수 내림차순 정렬");
		for (Student student : s) {
			System.out.println(student);
		}
	}
}

class SortNumDesc implements Comparator<Student>{

	@Override
	public int compare(Student s1, Student s2) {
		if(s1.getSum() < s2.getSum()) { 
			return Integer.compare(s1.getSum(), s2.getSum()) * -1;//내림차순
		}
//		
		return -1;
	}
}

class Student implements Comparable<Student>{

	private String no;//학번(문자열)
	private String name;//이름
	private int kor_num;//국어점수
	private int eng_num;//영어점수
	private int math_num;//수학점수
	private int sum;//총점
	private int rank;//등수
	//생성자
	public Student(String no, String name, int kor_num, int eng_num, int math_num) {
		this.no = no;
		this.name = name;
		this.kor_num = kor_num;
		this.eng_num = eng_num;
		this.math_num = math_num;
	}
	
	@Override
	public int compareTo(Student student) {
		return this.getNo().compareTo(student.getNo());
	}

	
	@Override
	public String toString() {
		return "Student [no=" + no + ", name=" + name + ", kor_num=" + kor_num + ", eng_num=" + eng_num + ", math_num="
				+ math_num + ", sum=" + getSum() + ", rank=" + rank + "]";
	}

	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor_num() {
		return kor_num;
	}
	public void setKor_num(int kor_num) {
		this.kor_num = kor_num;
	}
	public int getEng_num() {
		return eng_num;
	}
	public void setEng_num(int eng_num) {
		this.eng_num = eng_num;
	}
	public int getMath_num() {
		return math_num;
	}
	public void setMath_num(int math_num) {
		this.math_num = math_num;
	}
	public int getSum() {
		return getKor_num()+getEng_num()+getMath_num();
	}
	public void setSum(int sum) {
		this.sum = sum;
	}
	public int getRank() {
		return rank;
	}
	public void setRank(int rank) {
		this.rank = rank;
	}
}