public class StudentSort {
public static void main(String[] args) {
ArrayList<Student> stdList = new ArrayList<Student>();
stdList.add(new Student("201602037", "김성겸", 100, 100, 100));
stdList.add(new Student("201702157", "고양희", 95, 56, 78));
stdList.add(new Student("201602049", "강아지", 86, 77, 96));
stdList.add(new Student("201902055", "문솔희", 54, 68, 72));
stdList.add(new Student("201602156", "오진어", 70, 80, 90));
stdList.add(new Student("201802037", "박수처", 90, 80, 70));
stdList.add(new Student("201502110", "황금색", 88, 88, 88));
Ranking(stdList); // 랭킹 메소드 호출
System.out.println("정렬 전");
for (Student str : stdList) {
System.out.println(str);
}
System.out.println("==========================================");
// 학번으로 오름차순으로 정렬하기
Collections.sort(stdList);
System.out.println("학번으로 오름차순으로 정렬");
for (Student str : stdList) {
System.out.println(str);
}
System.out.println("==========================================");
// 총점으로 내림차순
Collections.sort(stdList, new TotalScoreSort());
System.out.println("총점으로 내림차순으로 정렬");
for (Student str : stdList) {
System.out.println(str);
}
System.out.println("==========================================");
}
public static void Ranking(List<Student> stdList) {
for (Student std1 : stdList) {
int rank = 1;
for (Student std2 : stdList) {
if (std1.getTotalScore() < std2.getTotalScore()) {
rank++;
}
}
std1.setRank(rank);
}
}
}
Student 객체를 List에 넣고 등수(rank)를 구하는 메소드를 정의하였다.
public static void Ranking(List<Student> stdList) {
for (Student std1 : stdList) {
int rank = 1;
for (Student std2 : stdList) {
if (std1.getTotalScore() < std2.getTotalScore()) {
rank++;
}
}
std1.setRank(rank);
}
}
rank를 구하는 Ranking 메소드를 보면 stdList를 매개값으로 받고 foreach문으로 학생을 1명씩 불러온다.
1번 학생의 rank를 1로 초기화하고 비교를 시작한다.
if(1번학생의 총점 < 2번학생의 총점){ rank++; }
if문 안의 값이 true 일 때 rank++이 실행되기 때문에
1번학생의 총점이 2번학생의 총점보다 낮을 때
등수(rank)가 +1 되어 rank = 2가 되는 식으로 반복된다.
class TotalScoreSort implements Comparator<Student> {
@Override
public int compare(Student std1, Student std2) {
if (std1.getTotalScore() == std2.getTotalScore()) {
return std1.getStdNum().compareTo(std2.getStdNum()) * -1;
} else {
return Integer.compare(std1.getTotalScore(), std2.getTotalScore()) * -1;
}
}
}
class Student implements Comparable<Student> {
private String stdNum; // 학번
private String name; // 이름
private int korScore; // 국어점수
private int engscore; // 영어점수
private int mathScore; // 수학점수
private int totalScore; // 총점
private int rank; // 등수
public Student(String stdNum, String name, int korScore, int engscore, int mathScore) {
super();
this.stdNum = stdNum;
this.name = name;
this.korScore = korScore;
this.engscore = engscore;
this.mathScore = mathScore;
this.totalScore = korScore + engscore + mathScore;
}
//+ Getter, Setter, toString