DDIT_Advanced_Java <List> 성적처리 프로그램

Gyeomii·2022년 5월 18일
0

DDITAdvancedJava

목록 보기
1/6
post-thumbnail

📌Full Code

💾 [깃허브 Full Code]


📌StudentSort Class

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);
		}
	}
}

📌Ranking() Method

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가 되는 식으로 반복된다.

📌TotalScoreSort Class

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;
		}
	}
}

📌Student Class

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
profile
김성겸

0개의 댓글